Build Log
Owner Loop Status, made live — and a stranded customer fix recovered
September 28, 2026
Two Alloy status pages stopped lying about in-flight work; a real customer's already-built fix was found stranded, recovered, and shipped.
Timeline
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