From 8b5d34c3a504e39b7a0e0e678acb803f71aa9317 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 31 Jul 2026 22:44:54 -0500 Subject: chore: record the sync-narrowing and standup-script work Archives the day's record and folds in this wrap's lint sweep. --- ...43-sync-guard-narrowing-and-standup-scripts.org | 142 +++++++++++++++++++++ inbox/lint-followups.org | 32 ++--- 2 files changed, 158 insertions(+), 16 deletions(-) create mode 100644 .ai/sessions/2026-07-31-22-43-sync-guard-narrowing-and-standup-scripts.org diff --git a/.ai/sessions/2026-07-31-22-43-sync-guard-narrowing-and-standup-scripts.org b/.ai/sessions/2026-07-31-22-43-sync-guard-narrowing-and-standup-scripts.org new file mode 100644 index 0000000..8714a49 --- /dev/null +++ b/.ai/sessions/2026-07-31-22-43-sync-guard-narrowing-and-standup-scripts.org @@ -0,0 +1,142 @@ +#+TITLE: Session Context — 2026-07-31 +#+AUTHOR: Craig Jennings + +* Summary + +** Active Goal + +Answer the propagation question from the 2026-07-30 outage — how do I work in +rulesets without blocking every other project's template sync — then build the +answer. Four inbound handoffs from work preempted it mid-session and were +processed inline before the build resumed. + +** Decisions + +- *Narrowing first, manifest second.* The per-path =--exclude= narrowing is the + direct answer to the question and cost ~60 lines. The last-synced manifest is + the larger fix behind it and stays unbuilt. +- *Withhold rather than block, per file.* A dirty path is excluded from its own + rsync instead of skipping all three for every project. Verified empirically + before building: rsync honors =--exclude= on both sides, so a withheld file is + neither overwritten nor deleted downstream. +- *The behind-upstream guard stays all-or-nothing.* That staleness lives in the + destination, so there is no single source file to narrow to. +- *Accepted work's standup-script proposal with four changes*, the load-bearing + one being that the script is a draft Craig edits at the gate. A topic list + fails safe by forcing him to compose; a wrong script reads fluently enough to + be spoken unchanged. Work agreed this was better than what they sent. + +** Data Collected / Findings + +*The narrowing, shipped as =f69dc22=.* Each dirty path under the synced roots +becomes an =--exclude= on its own rsync. A dirty =protocols.org= skips only its +own single-file transfer. A rename withholds both names, since sweeping the old +copy would delete a file the project still runs mid-rename. The run now names +what it held back. Suite went 15 → 22 tests; six were written red on purpose to +invert the "ONE dirty file blocks ALL THREE rsyncs" characterization. + +*Verified end-to-end against the live checkout*, which is the strongest evidence +here: mid-change, rulesets had two dirty files under the synced paths. The run +propagated 48 workflows and withheld exactly those two, naming them. The same +run under the old guard would have synced nothing. + +*I was wrong about project-workflows shadowing.* I told work their +=.ai/project-workflows/daily-prep.org= would shadow the synced copy and starve +them of updates. Phase 11 says the project file runs as *additional* steps +appended, "not a replacement" — daily-prep composes both. I had generalized from +=protocols.org='s workflow-selection rule, which governs dispatching a *named* +workflow. Their duplication concern was real by a different route and they +handled it with a marked stopgap carrying an explicit delete condition. + +*Known false-success path, still open and still load-bearing:* the success line +prints unconditionally, so a run whose rsyncs all failed still reports a clean +sync. The manifest must not be written from that branch as it stands. + +** Files Modified + +- =claude-templates/.ai/workflows/daily-prep.org= (=a212eeb=) — standup scripts, + Phase 8 blocking gate, generalized worked example. +- =claude-templates/.ai/scripts/sync-templates= + its bats suite (=f69dc22=) — + the narrowing. +- =todo.org=, =.ai/notes.org= (=cb31fd2=) — voice pattern #48 filed, inbox marker. +- =working/sync-model-revert/= (=1c222cb=) — the parked .emacs.d handoff, which + had been sitting untracked against the working-files rule. + +KB: promoted 0 / consulted no + +** Next Steps + +1. *Build the last-synced manifest* — the other half of the propagation fix, and + the one .emacs.d's measurement said matters more, since silent drift is the + ordinary case and the loud crash the exception. Its design constraint is in + =working/sync-model-revert/=: the report must carry the *diff*, not just a + backup path, so a reader can tell in one look whether the canonical already + contains their patch or whether their change was thrown away. Fix the + unconditional success line first or the manifest will stamp success onto a + sync that did nothing. +2. *Voice pattern #48* is filed =[#B]= and fully specified — Craig approved the + =interaction.md= mirror, so both homes get the rule with a cross-reference + line in each, plus #48 into the attestation high-recurrence set. Work's + suggested text needs its em-dashes stripped before it lands. +3. *Process note worth fixing:* every pre-commit review this session ran inline + rather than in an isolated subagent, because of the session's no-Agent-tool + directive. It caught real defects both times, but a self-review is weaker + evidence than an isolated one, and =subagents.md= names this as the standing + isolation-override case. + +Longer queue, unchanged: sentry's stashed =CronCreate= port and the per-project +declaration model, the MCP scoping of five work-bound servers, velox's Keep +token, the nag-event rule corrections, and the =[#A]= account-binding task whose +premise may be wrong. + +* Session Log + +** 2026-07-31 Fri @ 11:24:43 -0500 — flushed + +Craig returned after the 06:32 wrap and asked to flush before taking the +propagation outage. In flight: nothing on disk, tree clean at =cbcd972=. The +work ahead is a design answer, not an edit, so nothing is half-finished. Read +=.emacs.d='s 08:16 handoff and folded its diff-in-the-report point into the +Findings above before clearing, since it changes the manifest design and would +otherwise have to be re-read. + +** 2026-07-31 Fri @ 13:22 -0500 — inbox processed, standup-scripts shipped + +Three handoffs from work arrived mid-session and preempted the sync question. + +Accepted work's standup-brief proposal with four changes and shipped it as +=a212eeb=: generalized their worked example (it carried real names, an +=AWS Secrets Manager= detail, an investor demo and a specific bug into a file +that syncs everywhere), dropped their "exactly None." punctuation change (it +contradicted the Standups section, which already mandates =Blockers: None=), +scoped the gate to *each* standup rather than the day (their phrasing would +have passed the same text under both headers), and added the clause that the +script is a draft I edit at the gate. That last one is the real finding: a +topic list fails safe by forcing me to compose, where a wrong script reads +fluently enough to be spoken unchanged. Work agreed it was better than what +they sent. + +*I was wrong about the fork.* I told work their =.ai/project-workflows/daily-prep.org= +would shadow the synced copy and silently starve them of updates. Phase 11 of +the template says the project file runs as *additional* steps appended, "not a +replacement" — daily-prep composes both, and there is no shadowing. I +generalized from =protocols.org='s workflow-selection rule, which governs +dispatching a *named* workflow, not this composition. Their duplication concern +was real by a different route and they handled it with a marked stopgap +carrying an explicit delete condition. + +Voice pattern #48 (corrective antithesis, "X rather than Y") filed =[#B]=. Two +additions on the task: it belongs in the attestation high-recurrence set +immediately, and the frequency cap needs mirroring into =interaction.md=, +because Craig noticed the pattern in *conversation* and the voice skill only +runs on publish artifacts. + +*Process note:* the Step 1 pre-commit review ran inline rather than in an +isolated subagent, because this session's directive is not to call the Agent +tool unattended. It caught two real defects (a self-contradicting Blockers rule +and an example that undercut it), but a self-review is weaker evidence than an +isolated one. + +*Still open and unanswered:* the sync-narrowing question from the top of the +session. Options and recommendation are in the Summary above; nothing has been +built. diff --git a/inbox/lint-followups.org b/inbox/lint-followups.org index 9d2bd8f..21a5ed3 100644 --- a/inbox/lint-followups.org +++ b/inbox/lint-followups.org @@ -1,18 +1,18 @@ * 2026-07-20 Mon — Task-review health: 1 top-level [#A]/[#B]/[#C] tasks unreviewed for >30 days (daily review may have slipped) -* lint-org follow-ups — todo.org (2026-07-29) -** TODO misplaced-heading — Possibly misplaced heading line (line 2263) -** TODO link-to-local-file — Link to non-existent local file "working/hook-fail-open/validate-el.diff" (line 2239) -** TODO misplaced-planning-info — Misplaced planning info line (line 2228) -** TODO link-to-local-file — Link to non-existent local file "working/hook-fail-open/pre-commit.diff" (line 2223) -** TODO misplaced-planning-info — Misplaced planning info line (line 2208) -** TODO org-table-standard — table violates the org-table standard: no closing rule; missing rule between rows — wrap-org-table.el reflows it (line 314) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 472) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 475) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 482) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 490) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 493) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 502) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 600) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 759) -** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 768) +* lint-org follow-ups — todo.org (2026-07-31) +** TODO misplaced-heading — Possibly misplaced heading line (line 2320) +** TODO link-to-local-file — Link to non-existent local file "working/hook-fail-open/validate-el.diff" (line 2296) +** TODO misplaced-planning-info — Misplaced planning info line (line 2285) +** TODO link-to-local-file — Link to non-existent local file "working/hook-fail-open/pre-commit.diff" (line 2280) +** TODO misplaced-planning-info — Misplaced planning info line (line 2265) +** TODO org-table-standard — table violates the org-table standard: no closing rule; missing rule between rows — wrap-org-table.el reflows it (line 371) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 529) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 532) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 539) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 547) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 550) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 559) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 657) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 816) +** TODO task-missing-last-reviewed — task has no :LAST_REVIEWED: — stamp it at creation with today's date (a task you just wrote and graded is reviewed); otherwise it enters the next staleness batch as never-reviewed (line 825) -- cgit v1.2.3