ForgeKitFORGEKIT

Build Log

Recover Stranded Signals Work, Reduce Smith's Instruction Load

September 23, 2026

Recovered a prior session's stranded ownership claim and uncommitted Signals work, then ran a Council-amended instruction-load reduction that self-corrected two real defects under review.

alloysignalsos-engineinstruction-loadconcurrencyengine-guard
Commits, all pushed
Alloy tests passing
Real defects found and fixed under review

Timeline

Start
Stale main-checkout ownership claim found on session start
Prior session ended without releasing; force-released after human confirmation
Recovery
Signals Cockpit ranking fix verified and landed
tsc, full suite, RSC boundary check, real production build — then found findings.ts was dead code, not wired to the UI as the prior handoff claimed
Redirect
New Charge arrived: reduce Smith's default instruction load
Zeb flagged tokens being consumed faster than normal mid-session
Investigation
Baseline measured, Council-reviewed plan narrowed twice
Model switched to Opus; scope cut from a full rewrite to a single bounded Archived Traps extraction after a subagent report was found unreliable
Execution
Archived Traps moved, guard hardened, fixture-tested
Real defect (silent-zero on missing archive) found and fixed as part of the move, not just documented
Close
Council review caught 2 real defects in the just-shipped commit
Duplicate rows across Active/Archived, and an incomplete before/after measurement — both fixed same session

What shipped

Committed Signals Cockpit ranking fix (04fe6072): occurrencesLast10 replaces lifetime painScore as the sort key for "Needs a Charge", RECENCY_WINDOW moved to categorize-spin.ts to fix a real RSC-boundary production build error, Owner Loop Lifecycle CATEGORY_COHERENCE entry (11 spins, corrected twice under review), UI Layout classifier-contamination fix

Corrected the Signals Cockpit handoff Charge (66d00d63) to state plainly that findings.ts is dead code and the two-section UI split was never built, replacing a prior session's inaccurate claim that it only needed verification

Moved Archived Traps out of ignition-core.md into forgekit-os/archived-traps.md (e3a5c0aa), closing a real false claim ("archived traps are not loaded by default" while physically loaded every session)

Reviewed all 13 archived rows for live operational content before moving them; promoted 2 (UTC-drift dates rule, Clerk-auth timebox stop condition) back to Active after grep confirmed zero coverage elsewhere; demoted 2 verified duplicates of eagerly-loaded gate checklists to make room

Fixed a real latent defect in engine-guard.mjs: countTableRows() returned 0 for both a missing file and a missing header, which would have silently disabled the archived-row cap forever if the archive file were ever lost or malformed. Missing/malformed now hard-fails.

Fixture-tested all 4 archive failure paths (missing, malformed, over-cap, warn-at-18) plus exit codes against temp copies, without touching the real archive

Individually rebaselined the 3 hard-rule-baseline.json entries affected by the line shift, verified by phrase/order/text rather than regenerated wholesale

Added 'Where an instruction belongs' maintenance guidance to HOW_TO_WORK_WITH_ZEB.md

Found and fixed, under the same review pass, a real defect in the just-shipped e3a5c0aa commit: the Dates and Auth/Clerk-timebox rows existed in BOTH the Active table and the archive after being promoted — the commit's own message had claimed 'no rows lost or duplicated'. Fixed in d610d7c8; row totals now reconcile exactly (20 active + 13 archived = 33, matching the starting count)

Corrected the reported byte-reduction figure in the same fix: the original 3,161-byte claim counted only the .claude/rules/ surface and omitted +1,139 bytes added to HOW_TO_WORK_WITH_ZEB.md (a mandatory orientation read). True net reduction is 1,938 bytes (~0.6%), not 3,161 (~1.1%)

Committed findings.ts (9068ecf6) explicitly labeled as known-unwired, rather than left stranded in the working tree or silently implied to be shipped

Restarted Alloy dev server cleanly on port 3911 (.next wiped, confirmed serving via curl)