aboutsummaryrefslogtreecommitdiff
path: root/.ai
diff options
context:
space:
mode:
Diffstat (limited to '.ai')
-rw-r--r--.ai/sessions/2026-07-31-22-43-sync-guard-narrowing-and-standup-scripts.org142
1 files changed, 142 insertions, 0 deletions
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.