[FIX] Retire the dead thinking-mirror agent; one writer, and it reports
The vault held two mirrors of docs/thinking/David/ in two folders, neither aware of the other. /wrap-up §7 writes 08. Notes/CapableMind/thinking-mirror at every wrap and is byte-current with upstream. The launchd agent com.dglidden.thinking-mirror wrote 00. Compass/00b. Constellations/... every 48h, and had been failing since roughly March 2026: last exit 1, ending in `rsync … > /dev/null 2>&1`, so its own plist StandardOutPath received nothing and its log has been 0 bytes since 10 Mar. Its tree was 115 files behind. Nobody noticed the archive job had died because a second, undocumented writer was quietly doing the same work to a different folder. That is the failure the duplication caused: not a lost archive, but a lost signal. The steward asked a previous executor to build that script. Option A chosen: keep the wrap, retire the agent. Agent unloaded, plist and deployed script removed. Removing the plist from config/capablemind/ is load-bearing, not tidiness — setup-capablemind.sh:135 copies every *.plist there into LaunchAgents, so leaving it would resurrect the retired job on the next setup. Stale tree deleted from the vault after three independent checks that nothing was lost: all 151 of its .md files present in the live tree by basename, all five files that `diff -rq` reported as unique present in both the live tree and the repo (they only looked unique because the stale tree is flat and upstream reorganised into l2-constitution/, amendments/, chamber/), and 156 files tracked in the vault mirror's git HEAD at a58fc00. Siblings daily-log/, sessions/ and l2-design-narrative.md preserved. §7 rewritten: it now states it is the only writer, that the destination is a derived tree no pass may edit, and that the outcome is reported in §8 with the exit code — never skipped silently. The file already required exactly that of a failed push in §6.5 and contradicted itself eight lines later. Frontmatter Specification bumped to v1.0.1 in the vault (steward-authorized, scoped to this amendment): principle 7 and a new §1a declare mirrored trees out of scope. Pass 2 brought that subtree to v1.0.0 and reported an end state for it; the 2026-08-22 wrap rewrote it from source at 23:42 and every edit vanished. A derived tree cannot hold an edit. Tracker: the mechanism claim filed earlier today named the launchd agent as the writer, on nothing stronger than matching upstream content. Wrong agent, explicitly superseded in place. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQKeKY9T9d95KpvHwwok8T
This commit is contained in:
co-authored by
Claude Opus 5
parent
5a350c7059
commit
f1c91d9866
@@ -212,9 +212,32 @@ Sync the thinking mirror to Obsidian vault:
|
||||
- Source: `~/_Dev/CapableMind-AI/docs/thinking/David/`
|
||||
- Destination: `~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/08. Notes/CapableMind/thinking-mirror/`
|
||||
|
||||
Use rsync to copy new/modified files, preserving directory structure. Report what was synced.
|
||||
Use rsync to copy new/modified files, preserving directory structure.
|
||||
|
||||
If the destination doesn't exist or the iCloud path isn't accessible, skip silently and note it.
|
||||
⚠ **This wrap is now the ONLY writer of that mirror.** A launchd agent
|
||||
(`com.dglidden.thinking-mirror`, every 48 h) used to mirror the same source into a *second* vault
|
||||
folder, `00. Compass/00b. Constellations/CapableMind/thinking-mirror`. It had been failing since
|
||||
roughly March 2026 — last exit 1, `rsync … > /dev/null 2>&1`, so its own log sat at 0 bytes and it
|
||||
could not report its own death — and its tree had drifted 115 files behind. **Retired 2026-08-23**:
|
||||
agent unloaded, plist and script removed, the stale duplicate tree deleted after verifying all 151
|
||||
of its files were present in the live tree. Steward-authorized. Do not recreate a second writer.
|
||||
|
||||
⚠ **The destination is a MIRROR — a derived tree. Never edit it, and never apply a vault-wide pass
|
||||
to it.** `rsync` overwrites it from source on the next wrap, so any vault-side edit there is void
|
||||
the moment it is written. Frontmatter pass 2 (2026-08-19) learned this the expensive way: its edits
|
||||
to this subtree were reverted by this very step on 2026-08-22 at 23:42, and the 09-item spec
|
||||
end-state it reported for those notes had already ceased to be true. The Frontmatter Specification
|
||||
declares mirrored trees out of scope for exactly this reason.
|
||||
|
||||
**Report the outcome explicitly in §8 — never skip silently.** This mirrors §6.5's rule for a
|
||||
failed push, and for the same reason: a sync that fails quietly is indistinguishable from a sync
|
||||
that had nothing to do, and that is how five months of silence went unnoticed.
|
||||
|
||||
- Success: name the count synced (`N files`), or `no changes` if the trees already agreed.
|
||||
- Failure — destination missing, iCloud path unavailable, non-zero rsync exit: **say so in §8 with
|
||||
the exit code.** Do not swallow it. If the failure looks like the launchd precedent (an iCloud
|
||||
path unreachable from a restricted context), say that too; the diagnosis is in
|
||||
`session-ledger-2026-04-16.md` and it is macOS Full Disk Access, not git and not rsync.
|
||||
|
||||
### 8. Output
|
||||
|
||||
|
||||
Reference in New Issue
Block a user