rdmsm4x-changelog-20260828-1833-tyrell-typed-node-health
rdmsm4x-changelog-20260828-1833-tyrell-typed-node-health
Implemented Tyrell Task 1's additive typed node-health contract so daemon/control liveness, inventory/index state, manifest and usage freshness, and sync outcomes remain independently observable without treating stale manifests as offline evidence.
Scope
- Host:
rdmsm4x - Project mode: Production
- Worktree:
/Users/richh/dev/_worktrees/tyrell-fleet-menubar-hour-20260828 - Branch:
codex/tyrell-fleet-menubar-hour-20260828 - Commit:
abc3111ee4e5531c8cba2452b6f61b62ed9f4652 - Source only; no live daemon, app, canary, fleet deployment, signing, credential, CloudKit, iOS, ECS0, public service, or canonical Tyrell checkout change.
Files changed
Sources/TyrellCore/StatusModel.swiftSources/tyrelld/DaemonState.swiftSources/tyrelld/Daemon.swiftSources/tyrelld/ClientLoop.swiftTests/TyrellCoreTests/StatusModelTests.swiftTests/TyrellCoreTests/NodeHealthTests.swift- Ignored local SDD ledger updated:
.superpowers/sdd/2026-08-28-tyrell-observability-menubar/progress.md
What changed
- Added optional
StatusSnapshot.healthwith defaultable legacy and future decoding. - Added explicit unknown, healthy, degraded, and offline classification plus typed daemon/control, scan, sync, index, manifest, usage, safe cause, and remediation evidence.
- Kept manifest production separate from coordinator receipt and provider observation separate from Tyrell receipt.
- Required explicit unreachable control plus stale or missing heartbeat for offline; stale inventory, manifest, usage, sync, or index evidence can degrade but cannot infer daemon liveness.
- Extracted
DaemonStateinto its planned file and wired immutable process start, one-second heartbeat, usage source age/receipt, scan/index transitions, and sync attempt/success/failure. - Preserved earlier success timestamps on later failure and ignored delayed scan progress after terminal completion/failure.
Commands and verification
swift test --filter 'StatusModelTests|NodeHealthTests'— observed four intentional RED stages, then 12 tests passed with zero failures.swift test --filter TyrellCoreTests— 152 tests passed with zero failures.swift build --product tyrelld— passed.swift test— 261 tests passed with zero failures: TyrellCore 152, TyrellBarSupport 65 in 14 suites, TyrellAppSupport 44.git diff --check— passed.git status --short --branchafter commit — clean named branch.
Backup and undo
- Git commit
abc3111ee4e5531c8cba2452b6f61b62ed9f4652is the source checkpoint and rollback boundary. - To undo after review, revert that commit on the integration branch; do not rewrite shared history.
- Worktree remains preserved at the path above.
Outstanding owner actions
- Independent code review is required; this implementation is not self-accepted.
- The lead must decide integration and subsequent Task 2 consumption.
- No local runtime, signed artifact, designated canary, fleet rollout, or deployment acceptance is claimed.
- Apple Notes entry is pending because this session's launchd manager
is
Background, notAqua; the durable Markdown file copy is complete and the hourly Aqua autopublisher may publish it later.