Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260904-1834-tyrell-main-45e976b-clean-signed-leakfix-artifact

rdmsm4x-changelog-20260904-1834-tyrell-main-45e976b-clean-signed-leakfix-artifact

Built and team-signed a clean-provenance Tyrell 0.2.0 build 7 artifact of canonical main 45e976b (fd/memory leak fix) in an isolated scratch worktree; read-only plan accepted it; nothing installed or deployed. Also filed the 09-03 build 13 changelog to Notes (was pending on a wedged Notes.app). Undo: remove the three scratch worktrees named in the report.

Tyrell 0.2.0 build 7 (canonical main 45e976b) — clean package + sign, leak fix, handoff

[2026-09-04 18:35:02 EDT · rdmsm4x] · from the Aqua desktop session "Tyrell build 13 — package/sign + handoff" · Rich approved 2026-09-04 ~18:26 EDT ("all approved")

Objective

Give the Tyrell dev lead (session that took over from codex@rdmsm4x) a signed, verified, clean-provenance artifact of the fd/memory leak fix so the five spokes still running the leaking Build 15 can be rolled. PACKAGE + SIGN + READ-ONLY PLAN ONLY. Nothing installed, launched, deployed, committed; no launchd/TCC/database change.

Why a scratch worktree and not ~/dev/apps/Tyrell

Canonical main working tree is DIRTY (13 lines): Package.swift (+ECSMemory dep), MainShell/Providers/SettingsView.swift, 3 untracked Mem0 sources, a test, .DS_Store, and the four deploy scripts (plan/redeploy/probe/accept). Building there bakes another agent's uncommitted, unreviewed source into a fleet release. The staged bundle already in ~/dev/apps/Tyrell/.build (06:40, build 7) is unsigned (TeamIdentifier not set) and its tree state at build time is unknown.

Provenance (fail-closed, all clean, unchanged after build)

Artifact

/Users/richh/dev/_scratch/tyrell-main-45e976b-sign-20260904/apps/Tyrell/.build/Tyrell.app (79M, 9 files, 0 symlinks) · 0.2.0 · CFBundleVersion 7 · LSMinimumSystemVersion 15.0

Outer Tyrell.app Helper Contents/Library/LoginItems/TyrellBar.app
Bundle ID com.eastcoastscience.Tyrell com.eastcoastscience.Tyrell.TyrellBar
TeamIdentifier ZU2882L4HT ZU2882L4HT
CodeDirectory v=20500 flags=0x10000(runtime), Runtime 15.0.0 v=20500 flags=0x10000(runtime), Runtime 15.0.0
arm64 CDHash (full) 6ff03301a5e122b099a1cd8592a8e03038e44117ab02da2b674d3a67b3109656 f1134577f81aef324674ea9c90cc23b6ba5e79be40be112a18cd336aacac8bf6
x86_64 CDHash (full) 85bd0af993ffbc9bc1851b844b3a1aa6758eff63f23856217d55b751c286c0e9 d008b6b62864c56255a37ea5b10dd95eb0ff726f046802606b0707b1182cbffd
lipo x86_64 arm64 x86_64 arm64
Signed 2026-09-04 18:31:56 EDT 2026-09-04 18:31:56 EDT

Designated requirements (both): identifier "" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Richard Doty (S65Q255HA8)" and certificate 1[field.1.2.840.113635.100.6.2.1] /* exists */ DR sha256 7467a4ae84b198c35fa624c55939276f7ad2989f7dab4e102a71af6f2d7e33dc == recorded TYRELL_APP_DESIGNATED_REQUIREMENT_HASH → app-scoped TCC grants survive reinstall. codesign --verify --deep --strict --verbose=2: rc=0 on both ("valid on disk", "satisfies its Designated Requirement").

SHA-256 (all universal2 x86_64+arm64): 8597c9fc76569c868211337073aa273203d39ef84cff72c0c7e11b11d75284c5 Contents/MacOS/Tyrell (= lifecycle tyrell_app_executable_sha256) 3b057fe2ebde4aa36974396ee41b37b375905ec5ae1eab1f8db9d6bf8d624c05 Contents/MacOS/tyrellbar (= .build/release/tyrellbar) 9ca3df8422a2860eed1ef7be87c3622bc9d8dbcdc914b8da14ae3a604e784604 Contents/Library/LoginItems/TyrellBar.app/Contents/MacOS/tyrellbar dbc440bd54b85a54dd6c4150b23b3e508bff7d8d8080687d81b9ba7ac2cbbcf0 .build/release/tyrelld 4a7ff6aa35d227f6f65f547615ba4bef5f084c60c6e423ef84c55215482c45c8 .build/release/tyrell de0a22aea0951735c6dd687d2f907aa06e10850215b7a80a4da74f4858f6b96c .build/release/tyrell-app 7381f36808c736cbda634017b3f92d8212d792127a4d922580097bb6ca23a194 .build/release/tyrell-mcp

The fix is IN this artifact (the incident script's own gates, run by hand)

Read-only deployment plan (committed scripts/plan_app_deployment.zsh v3.0) — ACCEPTED

rc=0 · mode=canary · hosts=rdmbair15m5 · deployment_state=proposed · candidate_sha256=8597c9fc… · candidate_cdhash=6ff03301…9656 · bundle_id=com.eastcoastscience.Tyrell · team_id=ZU2882L4HT · probe_order=43118,43117

Manifest / checksum / logs (all under /Users/richh/dev/_scratch/tyrell-main-45e976b-sign-20260904/apps/Tyrell/.build/evidence-main-45e976b-20260904-1830)

Blockers / risks for the rollout (not acted on — dev lead's call)

  1. sign_and_stage_after_console_login.zsh depends on UNCOMMITTED edits to scripts/{plan_app_deployment,redeploy_app_fleet,run_tyrell_app_canary_probe,accept_tyrell_app_canary}.zsh on canonical main (38/3/28/34 lines). The committed planner has no --candidate-bundle flag (the incident script's call fails with "unknown argument"). Those edits are the vulnerable verified-and-uncommitted state; commit them by path before anyone rolls out.
  2. The incident script hardcodes REPO=~/dev/apps/Tyrell and REBUILDS there — from the dirty tree. Either clean/commit canonical main first, or point BUNDLE at this clean artifact and skip its build step.
  3. Build number goes backwards on the spokes: canonical main is CFBundleVersion 7; the five spokes run "Build 15" from the build15 worktree lineage. Deploy scripts compare hashes, not versions, so this is a labeling/telemetry confusion risk, not a proven fault — but the fleet dashboard and any "is it newer" check will read 7 < 15.
  4. rdmsm4x's own daemon LaunchAgent runs a DEVELOPER BUILD PATH (ISSUE-20260831-17 anti-pattern), and /Applications/Tyrell.app on the hub is the unfixed build 7 bundle.
  5. rdmpw3265m / rdmpw3275m need their own console login before their LaunchAgents can start the daemon (incident script's note).

Offer / required authority

This Aqua session can run the canary and fleet stages in minutes (signing key proven usable). I did NOT: a canary install is a host-state change and the pipeline it runs on is uncommitted. Give me a clean, committed pipeline (or an explicit "run --canary with this artifact") and I will run it and post the receipt. Undo of everything above: git -C ~/dev/apps/Tyrell worktree remove ~/dev/_scratch/tyrell-main-45e976b-sign-20260904/apps/Tyrell (and the two lib worktrees); nothing else was touched.

Source: fleet msg 20260903-021723-F4684800 (build 13, closed 09-03, Notes filed 09-04 18:26) · TASK-20260904-03 · INC-20260904-01 · session CCD local_0db431ea (takeover from codex)