Build Log · October 10, 2026

ForgeKit Command, and a Foreman That Can Close What Is Already Live

Alloy now has a cockpit that shows what ForgeKit is made of and what is actually happening in it, and it says plainly where it cannot see. Getting there exposed three places the system had been quietly wrong: discarded reviews, requests counted as closed, and a deploy that never built.

  • Alloy
  • ForgeKit Command
  • Owner Loop
  • Foreman
  • Witness
  • Deploy
risks in the register, each with what is still to prove
13

risks in the register, each with what is still to prove

Witness reviews that had been discarded over missing brackets
266 of 383

Witness reviews that had been discarded over missing brackets

Witness review attempts now stored and readable in Command
515

Witness review attempts now stored and readable in Command

test:os commands passing on a clean tree (the 1 is a pre-existing Alloy test)
105 of 106

test:os commands passing on a clean tree (the 1 is a pre-existing Alloy test)

deploy Railway skipped while the script reported success
1

deploy Railway skipped while the script reported success

Timeline

  1. Night

    Clear the stuck owner requests

    MedinaCHF 521651e3 and the canvas-1 requests, through three real failures in the approval path

  2. Charge 1

    Foreman, narrowed

    One recipe: close a request production already serves, deploy nothing

  3. Charge 2

    ForgeKit Command

    Council said cut scope; Zeb: 'Full initial charge. Proceed.'

  4. Build

    Registry, events, cockpit

    Health only from recorded outcomes; the rest shown as unobserved

  5. Audit

    Independent audit, then Zeb's read of the page

    'I don't see any action to take' became a next step on every gap

  6. Witness

    Reviews get a home

    Classifier fixed, INSERT-only store, 515 rows backfilled

  7. Deploy

    Live, then the skipped build

    Railway ignored a forgekit-os-only merge; script now forces it

  8. Close

    Zeb checked production

    'it looks good in production. deploy is good'

What shipped

  • forgekit-os/command/ — components.json (hand-declared components and integrations), registry.json (generated from git-tracked files only), risk-register.json (R1-R13), test-evidence.json

  • forgekit-os/scripts/command/build-registry.mjs with a --check mode, wired into test:os

  • products/alloy/lib/command/ — events, projection, outcomes, steward (rules S1-S8, reports only), sources for Owner Loop, Vercel, Scout, Witness and Resend

  • products/alloy/components/command/ and the owner-only /command page: eight perspectives, layered architecture graph, replay, risks, tests, Steward

  • products/alloy/app/api/webhooks/resend/route.ts + products/alloy/lib/webhooks/resend.ts — signed delivery webhook that stores a domain and a hash, never an address (not yet enabled: no secret set)

  • products/alloy/lib/db/schema.ts — witness_reviews and resend_events tables

  • forgekit-os/scripts/witness/ — classifier fix (witness.mjs), mirror.mjs, provision-witness-store.mjs; .claude/hooks/witness-stop.mjs kicks the mirror

  • forgekit-os/scripts/lib/railway-watch.mjs + forgekit-os/scripts/deploy-alloy.mjs — force a Railway build when a merge changes only files Alloy reads at runtime; two post-deploy checks repaired on Windows

  • docs/command/ — foreman-role.md, steward-operating-model.md, gaps-and-limitations.md, reliability-assessment.md, witness-and-sterling-records.md

  • Foreman CLOSE_ALREADY_LIVE recipe, granted to MedinaCHF only; owner-loop-coordinator-resolve and owner-loop-backfill-canonical workflows

  • Owner Loop fixes: candidate fetch before promotion, no re-dispatch while a human decision is pending, a resolved block's reason cleared on every success close

  • products/medinaCHF production: foreman_recovery_attempts table provisioned (Zeb approved)

  • experiments/FretHero/frontend/vite.config.js — dev server stops watching 4.6 GB it never imports

“I assume some of this is accounted for on the what command cannot see section, but I don't see any action to take”
— Zeb, on the first version of the Command page