Build Log
Unsticking Two Owner Loop Requests, a Parallel Admin Avenue, and Closing the Gate-Churn Loop
September 6, 2026
Recovered two MedinaCHF requests stuck at 'ready, waiting for review' with no visible cause, root-caused why the recovery path failed silently, built a way to do admin work without colliding with the Owner Loop, and finally built the gate-churn reduction the earlier Charge never actually delivered.
Timeline
What shipped
forgekit-os/scripts/fix-promotion-blocked-desync.mjs — first-ever script for the execution_state/dispatch_status desync shape, exact-match guarded, refuses on any other mismatch
forgekit-os/scripts/inspect-admin-intent.mjs — read-only diagnostic (SELECT-only), added --since=YYYY-MM-DD mode
.github/workflows/inspect-admin-intent.yml — inspect / finalize / fix-desync jobs, dispatched with real repo secrets server-side
.github/workflows/manual-deploy.yml — wired resolver-db-url credential for all 5 apps (same case-block pattern as actor-spawn.yml), fixing false Gate B parks on redeploys of already-resolved commits
finalize job's checkout given fetch-depth: 0 — a shallow clone caused git rev-parse on a genuinely-reachable older candidate SHA to fail
.claude/hooks/lib/concurrency.mjs — checkActorSpawnLiveness(): warns (does not hard-block) a push when an Actor Spawn run is in_progress/queued/pending
.claude/hooks/gate-dispatch.mjs — pushTargetsMaster() (fixed a real bug: any git push origin <branch> was wrongly treated as targeting master) wired into checkPushGate, exempt inside worktrees
forgekit-os/scripts/owner-loop-pause.mjs — checkOwnerLoopPause/pauseOwnerLoop/resumeOwnerLoop against a committed (not gitignored) forgekit-os/owner-loop-paused.json, so toggling requires a real commit+push
forgekit-os/scripts/dispatch-owner-loop-requests.mjs — wired checkOwnerLoopPause() into main() before the circuit-breaker check
14 new regression tests: .claude/hooks/tests/actor-spawn-liveness.test.mjs (9), forgekit-os/scripts/tests/owner-loop-pause.test.mjs (5)
forgekit-os/scripts/write-gate-marker-test-registration.mjs — narrow helper that verifies named test file(s) exist + pass node --check, then writes a correctly-shaped Dependency/Env-Config Gate marker in one call
“you are looking at the wrong thing. you should be looking at this... Reduce the time, tool calls, tokens, and Actor attention ForgeKit wastes repeatedly rediscovering how to satisfy its own established gates.”