ForgeKitFORGEKIT

Build Log

The ForgeKit Necessity Audit — from a real doubt to four shipped fixes

July 31, 2026

Zeb asked whether ForgeKit's ceremony was earning its keep after MedinaCHF shipped fast without touching the shared packages. What followed was a multi-round adversarial design process, a real 254-instance evidence-based audit of 9 control objectives, and four concrete OS fixes shipped and tested the same session.

OSAuditGatesEvidence
254
real gate_checks instances individually adjudicated across 9 control objectives
4
OS fixes designed, built, and tested this session
3
full design-revision rounds before the audit methodology was approved

Timeline

Start
MedinaCHF built fast, zero packages imported
Zeb's real doubt: is ForgeKit's ceremony necessary, or is the discipline what matters and the paperwork is dead weight?
Design
Three full revision rounds on the audit design
Each round of Zeb's feedback caught a real methodological gap — flat vs. hierarchical inventory, census vs. sampling conflation, unverified frequency counts, blinding leaks, premature Lite freezing
Execution
Audit A run for real against 9 control objectives
Candidate-generation scripts, frozen xorshift128+ sampling, 254 individually-read adjudications, real Wilson confidence intervals
Build
4 fixes designed, built, tested, committed
Concurrent-HEAD-move check, env-precedence script, Deploy Gate verification requirement, one investigation resolved with no fix needed

What shipped

forgekit-os/scripts/check-env-precedence.mjs — new script, redacted connection-string comparison across .env* files, tested against 3 real scenarios

.claude/hooks/pre-commit-check.mjs — added concurrent-HEAD-move detection (snapshot HEAD before and after the check plan runs, block on mismatch)

.claude/hooks/tests/commit-gate.test.mjs — added 4 new tests, including a real non-mocked git race

.claude/rules/gates.md — Environment & Config Gate checklist item + Deploy Gate checklist item + 2 updated 'what this prevents' entries citing real audit evidence

keep going

Zeb, on whether to continue full adjudication after the single-context independence limitation was flagged