rdmsm4x — Tyrell Build 47 + Build 48 (final release of all worktrees) fleet-wide; SIGSTOP and SIGTERM fixes
Summary:
Tyrell Build 48 is live on all six Macs (21:07 EDT). It contains every Tyrell worktree's functionality, merged or ported with no test loss, plus two daemon fixes:
- FleetGuard no longer SIGSTOPs dev_update, which caused the nightly sweep's exit 145.
- The SIGTERM handler no longer traps (a Swift 6 isolation issue). That trap had crashed every daemon on shutdown before it released its holds.
About 44 GB of superseded Tyrell copies and 16 preview bundles went to the Trash, not deleted.
Host: rdmsm4x, rolled out to all six (rdmsm4x, rdmbair13m5, rdmbair15m5, jdmbair13m5, rdmpw3265m, rdmpw3275m)
Agent: claude@rdmsm4x (Claude Code, session 4fec0f54). Helpers were 1 comms and 1 bus-triage agent (Sonnet), 3 read-only reviewers (Sonnet), porters P1–P3 (Opus) and P4 (Sonnet), and a grok-onboarding auditor (Sonnet).
Tickets:
- resolved: TASK-20260927-83, ISSUE-20260927-20, ISSUE-20260927-24
- opened: FEAT-20260927-27 (orchestrator10), ISSUE-20260927-26 (ReplicantDB leak), ISSUE-20260927-22 (fd-limit test)
Window: 2026-09-27 17:40 → 21:12 EDT
Timeline
- 17:40: root-caused the exit 145. The fix is Tyrell c76343f.
- 18:42 — Build 47 on 6/6:
- The canary first refused rdmbair15m5, because of a stray 16:43
LaunchAgent that ran TyrellBar from a dev build. It was archived to
~/Archive/tyrellbar-dev-agent-20260927/. - 221 superseded copies (about 38 GB) went to each host's Trash.
- The canary first refused rdmbair15m5, because of a stray 16:43
LaunchAgent that ran TyrellBar from a dev build. It was archived to
- 18:22–18:26 — Rich asked to "merge all worktrees…,
commit/sync/push all". In response:
- 3 dirty worktrees were WIP-committed.
- 2 detached heads were given branches.
- 185/185 branches were pushed to the backup remote.
- 72 branches with unique commits were classified (56 tips).
- Reviews R1–R3 (read-only) produced verdicts per feature. Today's branches were merged, giving main 4be476e and ECSQuotaKit c522150.
- Ports:
- P1: chat security and a config-driven tailnet allowlist.
- P2: CloudKit privacy, node health, daemon identity.
- P3: 6 iOS features, reconciled with P1's iOS send path.
- P4: docs and screenshots.
- 19:21 — a bus report of tyrelld SIGILL: the old daemons were trapping on SIGTERM. I reproduced it standalone and fixed it in 8d87e94.
- 20:34 — the Build 48 cut was blocked by the fleet-identity
build gate. The allowlist was made config-driven (f22cf5c), and
tailnetDomainswas added to the 5 spoke configs (backups kept). - 20:56 — the canary refused with install_service exit
4. My earlier cleanup had trashed
releases/daemon-<sha12>, the managed copy ofbin/tyrelld. It was restored from the Trash on 6/6 and the retire script was fixed (v1.1). - 21:07 — Build 48 on 6/6 via
rollout_v2.zsh:- daemon = bundle helper 6701aa98
- SIGTERM restart test: crash reports 8 → 8
- Build 47 leftovers (about 5.9 GB) to the Trash
Verification (numbers)
Tests:
Suite main c76343f Build 48 Swift Testing 1515 1587 XCTest 643 643 iOS 18 (1 failing) 75 (0 failing) Failures 0 0 Hosts: 6/6 report CFBundleVersion 48, name "Tyrell", bin/tyrelld sha 6701aa987be4, TyrellBar running from the bundle, and managed-copy OK.
Crash evidence: the rollout-time crash reports are the outgoing Build 47 (slice 002D4282 = daemon-34d603f78d4c). Build 48 (5BCB05F6) has never crashed.
Decisions (INTEGRATION.md DEC-A..E)
- Not ported:
- 7662e97, which would bring back the 2,981-room bug
- aa9b1dc, which tests the LiteLLM meter DEC-20260924-01 retired
- the old rollback release script
- orchestrator10 (11k unreviewed lines) is preserved on its branch and tracked in FEAT-20260927-27.
- The tailnet allowlist was ported compatibly (plain HTTP over Tailscale to configured masters), because a straight port would have cut chat.
- DEC-20260927-08 (SMAppService) was left for Rich. The release keeps the current LaunchAgent.
Other results this window
- Grok and grok-bot were already fully onboarded, 8/8 checks on 6 hosts. The sweep also repaired a broken cursor-cli on both Intel Macs (TASK-20260927-68).
- Bus: 135 controller messages were triaged (109
acks, 24 replies, 4 tickets). See
~/dev/_handoff/bus-triage-20260927/TRIAGE.md. - ReplicantDB on rdmpw3265m: its daemon footprint grows about 10 GB/h. The host is fine for now (82% of RAM free). Filed as ISSUE-20260927-26 for the ReplicantDB lane.
Undo
- Roll back one host: redeploy Build 47 from
~/dev/_handoff/tyrell-lead-20260927/b47/artifacts, or restore from the host's Trash (tyrell-replaced-20260927-b48/). - Revert code:
git -C ~/dev/apps/Tyrell reverton main, or reset to the pushed 4be476e / c76343f. - Spoke config: restore
~/.tyrell/config.json.bak-20260927-tailnetdomains.
Needs Rich
- DEC-20260927-08 (SMAppService), which was asked of him.
- A one-time console login on the 5 spokes so cursor-agent can reach the keychain.