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

status pages made live

new tests (598 → 608 running)
17

new tests (598 → 608 running)

stranded customer fix recovered
1

stranded customer fix recovered

real defects found and fixed
2

real defects found and fixed

Timeline

  1. Start

    Charge received

    Owner Loop Status page doesn't reflect a running canvas-2 job without a refresh; wants auto-refresh plus notification.

  2. Orient

    Held all writes

    A canvas-2 Actor run was in flight; stayed read-only until Zeb confirmed clear.

  3. Crucible

    Architect reframed the defect

    The four-phase collapse is a data-boundary defect, not a display choice. Notifications bounded to in-page only.

  4. Build

    Owner Loop panel live

    Widened fetch, client poller with settle-stop, four-step checklist, transition toasts.

  5. Pivot

    Live customer problem

    Court's request showed 'we're on it' indefinitely — traced to a real promotion refusal.

  6. Recover

    Fix shipped, row closed

    Merged, deployed, verified; row resolved through the sanctioned coordinator transition.

  7. 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