Build Log · September 28, 2026
Owner Loop Status, made live — and a stranded customer fix recovered
Two Alloy status pages stopped lying about in-flight work; a real customer's already-built fix was found stranded, recovered, and shipped.
- Alloy
- canvas-1
- Owner Loop
- Feature
- Recovery
- status pages made live
- 2
- new tests (598 → 608 running)
- 17
- stranded customer fix recovered
- 1
- real defects found and fixed
- 2
status pages made live
new tests (598 → 608 running)
stranded customer fix recovered
real defects found and fixed
Timeline
Start
Charge received
Owner Loop Status page doesn't reflect a running canvas-2 job without a refresh; wants auto-refresh plus notification.
Orient
Held all writes
A canvas-2 Actor run was in flight; stayed read-only until Zeb confirmed clear.
Crucible
Architect reframed the defect
The four-phase collapse is a data-boundary defect, not a display choice. Notifications bounded to in-page only.
Build
Owner Loop panel live
Widened fetch, client poller with settle-stop, four-step checklist, transition toasts.
Pivot
Live customer problem
Court's request showed 'we're on it' indefinitely — traced to a real promotion refusal.
Recover
Fix shipped, row closed
Merged, deployed, verified; row resolved through the sanctioned coordinator transition.
Finish
Deploy Status + close
Same defect confirmed and fixed; Alloy deployed to Railway.
What shipped
products/alloy/lib/owner-loop-status/fetch-actor-run-phase.ts — returns all four run phases with real per-phase state instead of collapsing to the furthest-reached one
products/alloy/components/owner-loop-status/LiveInFlightPanel.tsx — client poller (8s, stops when nothing is in flight), four-step checklist, locally ticking clock, in-page transition toasts deduped by runId+phase
products/alloy/lib/actions/owner-loop-live.ts — workspace-scoped read-only Server Action for the poller
products/alloy/components/deploy-status/LiveDeployStatus.tsx — thin client wrapper keeping the existing Deploy Status cockpit current during a build, never polling when nothing is transitional
products/alloy/lib/actions/deploy-status-live.ts + lib/deploy-status/transitional.ts — the deploy poller's action and its server-computed stop condition
products/alloy/lib/owner-loop-status/derive-phases.test.ts — 7 tests pinning the phase-state rule, including the 2026-08-30 regression shape
products/alloy/lib/deploy-status/transitional.test.ts — 10 tests on the poller stop condition
products/alloy/package.json — added lib/deploy-status to the test glob, which silently excluded that directory
.github/workflows/actor-spawn.yml — terminal-outcome classifier now reads the promote script's own `promoted` output instead of the step's exit status
experiments/canvas-1 money date fix — recovered from a stranded candidate, merged as 5a3c74e9 and deployed to production