ForgeKitFORGEKIT

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.

Alloycanvas-1Owner LoopFeatureRecovery
2
status pages made live
17
new tests (598 → 608 running)
1
stranded customer fix recovered
2
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