Tyrell Build 19 failed the real six-hour charged-physical-footprint gate on the designated canary; the fail-closed guard restored the exact signed Build 15 daemon and Build 17 app, and a new canonical bug now owns the allocator remediation.
Tyrell Build 19 six-hour rejection and verified rollback
- Recorded: 2026-09-12 00:38 EDT
- Recording host:
rdmpw3275m - Runtime-change host:
rdmbair15m5only - Project: Tyrell
- Mode: production
- Monitoring task:
TASK-20260911-01 - Newly filed bug:
ISSUE-20260912-01 - Source task resumed for remediation:
01a08a70-7b42-7ed1-aa30-1e3408453d0aonrdmsm4x - Fleet message:
20260912-003702-10A4C8FE
Outcome
The exact signed Build 19 canary was rejected at its first
long-runtime checkpoint. This was not the earlier RSS-metric false
positive: the corrected physical-footprint-v2 gate measured
charged physical footprint and found both the endpoint and growth rate
outside policy. The guard then performed the expected rollback without
operator intervention.
No fleet rollout occurred. Rejected Builds 16, 18, and 19 remain prohibited. The designated canary is back on the exact signed universal Build 15 daemon and retained Build 17 app while a narrower source remediation is developed.
Exact Build 19 identity and continuity
- Source commit:
ec036973cff969447292c1fb7ebef9916dfcb14c - Signed daemon SHA-256:
03e365cec1b8219b3d4cc12384b42313936b850748a97727366e6595f4ee390b - App executable SHA-256:
cfb51c67602f9cf6047e4b6bf609ee1a5e24fe99d907269fcf0548d7c5c2c072 - Daemon PID:
69804 - Process start:
Fri Sep 11 18:18:18 2026 - Stable executable path during the canary:
/Users/richh/Library/Application Support/Tyrell/releases/daemon-03e365cec1b8/tyrelld - Guard PID:
69716 - Total samples:
371 - Post-warmup gate samples:
361 - Maximum sample gap:
60.095386seconds - Inventory passes: seven complete passes, each
38roots across29bundle plans - Inventory equality: unchanged-repeat evidence remained true
- Identity continuity: one PID, one process-start value, and one executable path for every sample
- Health during the failing sample: both status planes HTTP 200; all
16 concurrent permission probes HTTP 200; lsof rows moved
41 -> 40; TCP descriptors remained2 -> 2
Six-hour gate result
The post-warmup window ran from
2026-09-11T18:28:20.629348-04:00 through
2026-09-12T00:28:23.378465-04:00, spanning
21602.749116897583 seconds.
- Physical start:
98.39218139648438 MiB - Physical endpoint:
638.0955352783203 MiB - Policy endpoint ceiling:
300 MiB - Observed physical peak:
801.1582183837891 MiB(diagnostic) - Endpoint delta:
+1.4989852012668576 MiB/min - Regression slope:
+0.5012999132921384 MiB/min - Policy growth ceiling:
+0.20 MiB/min - RSS start:
756.546875 MiB - RSS endpoint:
1044.34375 MiB(diagnostic only)
Inventory pass 7 completed at 00:25:32 EDT,
approximately three minutes before the fixed gate endpoint. The guard
raised ValueError: physical footprint exceeds 300MiB bound;
no long-gate receipt was written because validation failed before
receipt creation.
Failure allocation evidence
The failure-time footprint capture measured
669058896 charged bytes. It was allocator-dominated:
- Malloc Large dirty:
382025728bytes - Malloc Small dirty:
279412736bytes - Malloc Small reclaimable:
259342336bytes vmmapallocator fragmentation:512.3 MiB,88%vmmapMalloc Large (empty):360.7 MiBvmmapMalloc Small (empty):252.0 MiB- SQLite page-cache charged footprint: not dominant at failure
This evidence supersedes any explanation that treats the failure as reclaimable RSS alone. The gate semantics remained unchanged; the underlying inventory/allocation behavior now requires correction.
Rollback verification
The guard wrote state rolled_back with reason
physical footprint exceeds 300MiB bound and restored:
- Exact signed universal Build 15 daemon SHA-256:
dbc440bd54b85a54dd6c4150b23b3e508bff7d8d8080687d81b9ba7ac2cbbcf0 - Managed link:
/Users/richh/Library/Application Support/Tyrell/bin/tyrelld - Managed target:
/Users/richh/Library/Application Support/Tyrell/releases/daemon-dbc440bd54b8/tyrelld - Architectures:
x86_64andarm64 - Team:
ZU2882L4HT - Strict signature verification: pass
- Replacement launchd PID:
40001 - Launchd program: managed stable link above
- Launchd state: running, active count 1, last exit never exited
- Both status planes: HTTP 200
- Retained Build 17 app version/build:
0.2.0 / 17 - Build 17 app executable SHA-256:
8693ebce3d474fed049597d11e3579bf1cd32f7a78acfd9544c78d77592da05e - Build 17 app designated requirement and signature: preserved; deep strict verification passed
Build 15 predates the cached permission endpoint, so
/api/agent-permissions returning 404 after rollback is
expected and was not treated as a rollback failure. The two service
status endpoints are the compatible rollback health check.
The rejected Build 19 app was retained recoverably at
/Applications/.tyrell-rollbacks/20260912-002826-933b995d2964/Tyrell.app.
The rejected daemon and complete evidence remain under the canary stage;
neither was deleted.
Evidence locations and hashes
Evidence root on rdmbair15m5:
/Users/richh/.tyrell/build19-canary-20260911-ec03697
state.json:13787f1fa1c12683d0619473f55f4390b4db00838e96267f28336db279bedeadsamples.jsonl:ac06da09e5bb51ed2f2ec61193ca0a9343a7cbdc1611e91838f2775be9c2aa4dinventory.log:e021e47541046c457b56246e693fda3fbbe21405d97a741462d00d701d8f77fcguard.log:17c88072f46959219861afdcfd7d24ce81f650bd5f7c190950a52caaa39b4d4failure-footprint.txt:e99853d3c19adba7bec703ed4febe71f5676d9b719ed837f37b566a38b9f4cf8failure-vmmap.txt:e7312ef9f84d47cf8c7472cab8d6d498f66b6d5ccd38dfbae2bff0bdb64968e9app-rollback.log:12e58bb398c2ee995dc2155c4454242edf22ac95a11105e553e5782af069076d
Canonical records changed
- Created
ISSUE-20260912-01, a high-severity Tyrell bug for the allocator-heavy hourly inventory path. - Linked it to
ISSUE-20260905-23,ISSUE-20260911-01, andISSUE-20260911-15. - Marked it as blocking
TASK-20260911-01andISSUE-20260909-12. - Added evidence comments to those records and to the original outage ticket.
- Resumed the existing canonical Codex task rather than creating a duplicate source lane.
- Delivered fleet message
20260912-003702-10A4C8FEto the exact canonical Codex task and verified the immutable message on bothrdmpw3275mandrdmsm4x.
Dispatch is not receipt, source acceptance, integration, artifact creation, or release. Those states remain pending.
Representative verification commands
ssh [email protected] 'jq -c . /Users/richh/.tyrell/build19-canary-20260911-ec03697/state.json'
ssh [email protected] 'tail -18 /Users/richh/.tyrell/build19-canary-20260911-ec03697/samples.jsonl'
ssh [email protected] 'tail -12 /Users/richh/.tyrell/build19-canary-20260911-ec03697/inventory.log'
ssh [email protected] 'cat /Users/richh/.tyrell/build19-canary-20260911-ec03697/failure-footprint.txt'
ssh [email protected] 'launchctl print gui/$(id -u)/com.eastcoastscience.tyrelld'
ssh [email protected] 'shasum -a 256 "/Users/richh/Library/Application Support/Tyrell/bin/tyrelld" "/Applications/Tyrell.app/Contents/MacOS/Tyrell"'
ssh [email protected] 'curl -fsS http://127.0.0.1:43117/api/status; curl -fsS http://127.0.0.1:43118/api/status'
/Users/richh/bin/ticket show ISSUE-20260912-01
AGENT_LLM=codex /Users/richh/.agent-coordination/agent_msg.zsh read 20260912-003702-10A4C8FERecovery and undo
The current rollback is the safe state and should not be undone while
ISSUE-20260912-01 is open. If controlled reproduction is
required, use the retained canary artifacts and the pinned lifecycle
scripts under a new rollback-protected canary; do not point launchd at a
mutable build tree and do not reinstall rejected Build 19 as
production.
To recover from any later candidate failure, reinstall the exact retained Build 15 daemon through the hash-addressed stable-path lifecycle and reinstall the retained Build 17 app through the signed bundle lifecycle, then verify exact hashes, signature, launchd state, both status endpoints, process identity, descriptors, and sockets.
Outstanding work
- The canonical owner must acknowledge and accept
ISSUE-20260912-01after collision preflight. - Diagnose the allocator-heavy hourly inventory path without weakening
physical-footprint-v2. - Add deterministic allocation/regression coverage and pass the full canonical Swift 6.4 suite.
- Independently review the source correction.
- Build, sign, and notarize a newer universal Tyrell app and daemon with exact hashes.
- Run another designated rollback-protected canary whose inventory pass overlaps the six-hour endpoint, then complete the existing 24-hour memory, CPU, descriptor/socket, functional-app, stable-path reboot, signature, rollback, and exact-hash gates.
- Do not expand to the fleet until all acceptance evidence exists.
The separate local agy monitor was also checked. No agy
process is running, every discovered parent remains complete or awaiting
canonical acceptance, and no provider quota-reset event or eligible
incomplete parent permits a resume.