Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260826-1851-notes-handoff-closeout-registry-drift

rdmsm4x — Notes handoff close-out + PROJECTS.md registry drift

Session: 2026-08-26 18:44:31 → 19:01:16 EDT · rdmsm4x · claude@rdmsm4x Trigger: cross-session handoff from claude@rdmpw3265m (thread 20260826-150928-283CD86E), relayed because Rich was rebooting that host. Rich then asked to close it out and to file every side-thread with its own project so the next run picks it up.

Nothing destructive was done. The four Apple Notes decisions are Rich's and were NOT actioned.


What was verified (do not redo)

Check Result
8 handoff docs + note export at ~/dev/apps/icloudtoolkit/ present, shas recorded in that project's ISSUES.md
Session record, origin 127.0.0.1:8787 200
Session record, tailnet rdmsm4x-1.kangaroo-kitefin.ts.net 200
Session record, public dev.dataroo.net 401 — Basic auth, by design, not an outage
directory.html auto-link present; no manual gen_site.py run made
net.dataroo.claude-rc LaunchAgent state = running, pid 1451, uptime 17:36:41 (pid 81711 in the transcript is from the 2026-08-25 smoke test, a different day)

The sha that did not match, and why

The peer published and verified d0591c59c638 / 19465 bytes. The served file is now fa50b297a697 / 44761 bytes. Benign. The com.eastcoastscience.devsite job appends a <!--dr-export v1--> copy-as-Markdown widget (~25 KB of JS) to every wiki page. Verified byte-identical up to that marker against the source archive ~/dev/rdmpw3265m-reports/session-record-notes-investigation-20260825.html, which still hashes d0591c59c638.

Rule derived: verify a publish by HTTP 200 + content spot-check, or sha the source archive — never sha the served file against a pre-publish hash.


Hazard escalated: notes_changelog.zsh can delete notes

claude@rdmpw3265m measured (bus 20260825-171804-06D2D5DF) that AppleScript against Notes returns wrong counts rather than errors during the cold-start stall — 23 reported, 467 actual. Reading the script against that finding:

Line Branch Consequence of a wrong count
:140 count of folders readiness probe declares Notes ready while it is still stalled
:173 exists folder creates a second llmlog → the already-known duplicate-folder bug
:197 repeat while (count of notes of f) > 0 stops draining a stray folder early
:205 if (count of notes of f) = 0 then delete f deletes a stray folder with its notes still inside — data loss

:205 is a step worse than the duplicate creation already logged. Also measured: a fast READ is not evidence a WRITE will land (read 5 s vs write 1898 s, same run).

Script NOT modified — shared-write, no owner, and the fix must ship together with the NOTE_HOST item after a six-host shasum compare. Filed in ~/dev/ISSUES.md; ownership sits with Rich as DECISIONS-PENDING-RICH.md E2.


Found while registering the project: 5 of 12 registry paths were dead

PROJECTS.md working directories still pointed at folders the 2026-08-24 00:41 consolidation had moved. An agent starting from the registry would have blind-written a dead path and silently created a stray tree nobody reads. Corrected from each project's own .MOVED.md marker, then re-verified on disk:

The consolidation wrote the .MOVED.md markers but never updated the registry that points at them. Any other file hardcoding ~/dev/agy/<project> deserves the same check.

Still open — ObsidianFleetSync was never promoted

Marked VICTORY CONFIRMED (365/365 tests) at a path that does not exist. The real tree — 2.0 MB, full docs — sits at ~/dev/_migration/fleet-ingest/rdmbair15m5/dev/obsidian_fleet_sync and is not a git repo, so it is outside the nightly GitHub backup entirely. Needs a canonical domain, a move, git init, and a first commit. Filed OPEN in ~/dev/ISSUES.md.


Files changed

File Change
~/dev/PROJECTS.md registered icloudtoolkit; corrected 5 dead working-directory paths; header date
~/dev/ISSUES.md +1 RESOLVED (registry drift), +2 OPEN (ObsidianFleetSync promotion, notes_changelog.zsh:205)
~/dev/DECISIONS-PENDING-RICH.md new section I — the four Apple Notes decisions, with root cause and the 30-day undo clock
~/dev/apps/icloudtoolkit/ISSUES.md +1 RESOLVED — handoff receipt and artifact verification, so the next agent starts at 00-INDEX.md
~/dev/sites/dev.dataroo.net/ISSUES.md +1 RESOLVED — the sha-drift and pgrep nginx/OrbStack publish-verification gotchas
~/dev/_handoff/HANDOFF-claude-rc-service-20260825.md addendum — service re-verified, and the shared-cwd collision observed live
~/.agent-coordination/mail/20260826-185146-1170A000__… bus broadcast to all hosts

Not modified, deliberately: ~/scripts/notes_changelog.zsh (shared-write, ownership is Rich's) and anything inside Apple Notes.


Shared-cwd collision, observed live

The net.dataroo.claude-rc service runs --spawn same-dir --capacity 4, so up to four sessions share ~/dev. While this session was reading ~/dev/ISSUES.md, another session wrote a CRITICAL, PARTLY RESOLVED 2026-08-26 18:48 EDT block into the same file mid-turn. Nothing was lost, only because the two edits landed in different regions. Working practice appended to the claude-rc handoff: prefer edge appends over rewriting a structured section, use small unique anchors, and treat a "changed on disk" notice as current state rather than something to revert.


Apple Notes changelog deliberately skipped

Rule 26 wants an Apple Notes record. Not attempted, for two documented reasons: DECISIONS-PENDING-RICH.md E2 records notes_changelog.zsh failing fleet-wide ("Notes never became responsive within 600 s" against a 7.8 GB store), and the :205 hazard above means a run during a stall could delete a folder. This file copy is the durable record until E2 has an owner.

Spend

Inline only — no subagents, no codex exec, no agy. Consistent with the 2026-08-26 18:33 fleet broadcast: Anthropic weekly bucket at 92%, tyrell usage_status advice = hold for Claude fan-out.


Addendum 19:01 EDT — resumability + auto-ingest routing

Remote access verified, not just assumed. bash ~/scripts/claude_rc_service.sh status at 18:58:04 EDT → ALL CLEAR: launchd job loaded, pid 1451, uptime 17:36:41, session registered at https://claude.ai/code/session_01Ci1T6JJg3ATLknPfmKPYXv. FileVault on (cold boot still needs a human; sudo fdesetup authrestart for planned reboots).

This thread is now resumable from disk — ~/dev/apps/icloudtoolkit/SESSION-STATE.md records what was verified, what must not be touched, and that the next action is a conversation with Rich rather than code.

Cross-project context routed through the real auto-ingest path. ~/dev/todo + the com.eastcoastscience.todoscan scanner already relays items into the owning project's ISSUES.md, tagged [todo:<id>] for idempotency. Three items filed and all three confirmed relayed:

Item Target
20260826-notes-applescript-wrong-counts-can-delete-notes fleet/maintenance
20260826-obsidianfleetsync-never-promoted-no-git the ObsidianFleetSync staging tree
20260826-sqlite-immutable-ignores-wal-on-live-stores apps/SQLiteScope

apps/SQLiteScope had no ISSUES.md, which silently made it unreachable by the relay — created it, and the relay then landed. Worth checking which other projects are invisible to the scanner for the same reason.

Stale directive corrected. ~/dev/SESSION-STATE.md still opened with "READ THIS FIRST — the 2026-08-24 FLEET HALT has never been released." It was released at 18:36 EDT today (broadcast 20260826-183333-17877A8C). Updated with the release, the three carve-outs that remain gated (rdRECEIPT push, the two customer repo deletions, delete-nothing on jdmbair13m5), and the spend directive active until 2026-08-28.

Note on /autocompact: no autoCompact key exists in ~/.claude/settings.json and one was not invented — context compaction is harness-managed, and fabricating a settings key would be a speculative config edit.