Build Log · September 25, 2026

Two stuck requests, six manual interventions

Courtney's change was finished and not live. The fix existed, was correct, and had never once been able to execute.

  • owner-loop
  • foreman
  • recovery
  • medinachf
  • canvas-1
  • witness
real customer requests recovered and closed
2

real customer requests recovered and closed

manual interventions they needed between them
6

manual interventions they needed between them

most recent terminal results carrying the field recovery depended on
0 of 8

most recent terminal results carrying the field recovery depended on

hypotheses Smith promoted to diagnoses before checking
6

hypotheses Smith promoted to diagnoses before checking

real median gap on a cron declaring 5
233 min

real median gap on a cron declaring 5

Timeline

  1. Start

    ignite v2

    Stale checkout-ownership claim force-released with Zeb's confirmation

  2. Drift

    v1/v2 instruction fork

    Zeb caught the Crucible sync gap; Witness caught a dangling ignition.md pointer

  3. Turn

    Courtney's request: finished but not live

    Smith probed URLs for several turns until Zeb said: query the damn database

  4. Cause

    Two Actors collided

    The base_diverged guard refused the push correctly, then the run died with no requeue

  5. Recover

    Both requests closed

    canvas-1 resolved/deployed/finalized; medinachf promoted/published/finalized

  6. Prevent

    Four defects fixed

    Each traced to a failure that actually happened today

  7. Review

    Witness found four more

    Including a safety check that matched [object Object]

  8. Close

    Wake-up fixed at the root

    workflow_run on Actor completion; cron demoted to backstop

What shipped

  • forgekit-os/scripts/dispatch-owner-loop-requests.mjs — readPreRunShaFromRunLog(); recovers the authoritative pre-run base from actor-spawn.yml's own pre_run step output instead of guessing at commit shape

  • forgekit-os/scripts/promote-app.mjs — files the pending-acceptance record BEFORE refusing a Gate A/B deploy, so the recovery command the refusal names has an input to act on

  • forgekit-os/scripts/foreman/recovery.mjs — new module: Foreman runs existing recovery before escalating, with authority limits encoded as refusals

  • forgekit-os/scripts/foreman/notify.mjs — narrow high-severity opt-in, scoped to the post-recovery escalate set

  • forgekit-os/scripts/foreman/sweep.mjs — recovery step wired between persistence and notification

  • forgekit-os/scripts/foreman/tests/recovery.test.mjs — 11 authority-limit tests

  • forgekit-os/scripts/foreman/tests/recovery-acceptance.test.mjs — 9 end-to-end acceptance cases

  • SmithV2/.claude/rules/ignition.md — the missing pointer file five v2 files referenced

  • forgekit-os/scripts/quota-pressure.mjs — labels corrected to what it measures