rdmsm4x-changelog-20260831-1236-tyrell-cli-rebuild-two-hosts
Rebuilt the missing tyrell CLI on rdmbair13m5 and
jdmbair13m5, restoring on-demand fleet sync on the two hosts that had no
way to run it; verified end to end against the master.
- When: 2026-08-31 12:34–12:36 EDT (America/New_York)
- Driven from: rdmsm4x (session dev-ef), over Tailscale SSH
- Hosts changed: rdmbair13m5, jdmbair13m5
- Requested by: Rich, 2026-08-31 — "rebuild the CLI on both hosts"
Why
During the 2026-08-30 fleet sync acceptance, tyrell sync
could not be run on rdmbair13m5 or jdmbair13m5: only
tyrelld and tyrell-mcp were present in their
build output. Those hosts had no on-demand sync path and depended
entirely on the daemon. tyrell-mcp run_sync would also have
failed there, because MCPMain.swift:306 resolves the CLI as
a sibling of the tyrell-mcp executable and returns "tyrell
CLI not found" when it is absent.
Pre-flight findings
| Host | Repo state | Package.swift SHA-256 (prefix) | Swift |
|---|---|---|---|
| rdmsm4x (canonical) | git main @ eff5293, clean | 0aaee742 |
— |
| rdmbair13m5 | git main @ 6ddef9b, 2 dirty files | 6310f37c (diverged) |
6.4, Xcode-beta |
| jdmbair13m5 | not a git repo (no .git) |
0aaee742 (matches canonical) |
6.3.3, Xcode |
rdmbair13m5 is behind canonical by 20 commits / 91 files / ~16.5k
insertions. Its two dirty files (scripts/sysmon.zsh plus a
.bak-reconcile-20260830-010303) are unrelated to Tyrell
sources.
Decision: build from each host's own tree; do NOT
git pull. Justification, verified before building:
git diff --stat 6ddef9b..eff5293 -- Sources/tyrell Sources/TyrellCore
shows Sources/tyrell unchanged and
SyncEngine.swift untouched. The CLI and the sync path are
byte-identical across the divergence, so a local build is functionally
equivalent, stays consistent with each host's own tyrelld,
and avoids disturbing uncommitted work on rdmbair13m5.
Commands run
Identical on both hosts, via
ssh richh@<tailnet-ip>:
cd ~/dev/apps/Tyrell
swift build -c release --product tyrell # detached, logged
~/dev/apps/Tyrell/.build/release/tyrell sync
Build logs:
~/Library/Logs/Tyrell/build-tyrell-cli-20260831-123501.log
on each host.
Verification evidence
Builds (incremental; dependencies were already present):
- rdmbair13m5 —
Build complete! (13.62 sec); binary 7,591,720 bytes at.build/release/tyrell - jdmbair13m5 —
Build of product 'tyrell' complete! (11.90s); binary 9,273,336 bytes
Live sync through the new binaries, both reaching
rdmsm4x.ts.dataroo.net:43117:
- rdmbair13m5 —
PASS sent 0 files · skipped 25757 - jdmbair13m5 —
PASS sent 0 files · skipped 12101
Master-side confirmation via fleet_status immediately
after:
- Both
lastManifestAtadvanced to 1788194167 / 1788194168 (2026-08-31 12:36:07 / 12:36:08 EDT) - jdmbair13m5 indexed 11,223 -> 12,635 files (+1,412), 2.550 -> 2.565 GB, pending 2 files/77 KB -> 1 file/44 KB
- rdmbair13m5 file count steady at 32,694; pending steady at 62 files / 42.9 MB (see note below)
Note: "sent 0 files" is the correct result, not a failure
Recorded 2026-08-30 and still true. The fleet's nonzero
pendingFiles / pendingBytes is a permanent
floor of continuously-rewritten files, not a backlog:
~/.codex/logs_2.sqlite and its
-wal/-shm siblings,
~/.agent-coordination/heartbeats/*.json (rewritten every 5
min by agentstatus), antigravity conversation
.db files, ~/dev/.tmp.driveupload scratch.
SyncEngine.swift:122 correctly refuses to upload a file
whose size/mtime moved under it — a torn SQLite snapshot is worse than
none — while SQLiteStateStore.swift:321
(pendingAgainstCAS) then counts it owed forever.
pendingFiles must not be used as a sync-complete
indicator on the agents board; it will never reach zero.
Backups / undo
No backups needed: nothing was overwritten, no config or source file was edited, no git state was changed on any host. The only new artifacts are the two build products and their logs.
To undo: rm ~/dev/apps/Tyrell/.build/release/tyrell on
either host. This restores the prior condition exactly (no CLI present)
and does not affect the running tyrelld.
Outstanding owner actions for Rich
- rdmbair13m5 is 20 commits behind canonical Tyrell
(main @ 6ddef9b vs eff5293). Not touched here by design. Its
tyrelld, built 2026-08-29 from that tree, is likewise stale. Decide whether to bring it to canonical. - jdmbair13m5's
~/dev/apps/Tyrellis not a git repository — the source matches canonical by hash, but it has no provenance and no way to pull. Worth converting to a real clone. - Build-path drift across the fleet, unresolved:
.build/out/Products/Release(rdmbair15m5),.build/x86_64-apple-macosx/release(rdmpw3265m),.build/x86_64-apple-macosx/debug(rdmpw3275m — running a debug binary),.build/releasesymlink targets differing by host. Any script hardcoding one path breaks on the others; this is what broke the first pass of the 2026-08-30 sync run.
No secrets, tokens, or credentials are recorded in this file.