Found while doing the #4196 retirement. Out of scope there; filing rather than widening it.
Already fixed — closing. #4252 (6e357ed) added the classification to check-generated.ts while this was being written:
check: 'check:strictness-ledger',
why: 'audits the hand-written #4001 strictness ledger against the z.object sites in src — no artifact',
I filed against a main that was minutes stale. Verified on origin/main: check:generated reconciles and runs its gates. Leaving the original report below for the record.
The finding
pnpm --filter @objectstack/spec check:generated — the local "run every gate and report all stale artifacts at once" runner that AGENTS.md §"Touched packages/spec?" tells you to reach for — failed before running a single gate:
✗ check:generated ledger is out of sync with package.json:
`check:strictness-ledger` exists in package.json but is in neither GATED nor NO_GENERATOR.
Classify it: does it compare a checked-in artifact against a generator, or audit source?
check:strictness-ledger was added in #4232 (scripts/check-strictness-ledger.mts, wired into CI at .github/workflows/spec-liveness-check.yml:75) without a matching entry in check-generated.ts's ledger. This is the reconciler working exactly as designed — its own comment says an unclassified check:/gen: script "fails the run rather than quietly dropping out of coverage", and AGENTS.md notes it caught its own package.json entry on the first run. Nothing was broken; the classification was simply missing, and #4252 supplied it in the bucket predicted here (NO_GENERATOR).
Blast radius
Low. check:generated is not in any workflow — CI runs the individual gates in Check Generated Artifacts / TypeScript Type Check / spec-liveness-check, all of which were green throughout. It cost only local time: an agent following the AGENTS.md instruction got a reconciliation error instead of the gate report, and had to fall back to the hand-rolled for c in check:… loop (which is precisely the thing check:generated exists to replace, and precisely the loop the | tail -1 masking trap lives in).
Refs #4232, #4252, #4196.
Found while doing the #4196 retirement. Out of scope there; filing rather than widening it.Already fixed — closing. #4252 (
6e357ed) added the classification tocheck-generated.tswhile this was being written:I filed against a
mainthat was minutes stale. Verified onorigin/main:check:generatedreconciles and runs its gates. Leaving the original report below for the record.The finding
pnpm --filter @objectstack/spec check:generated— the local "run every gate and report all stale artifacts at once" runner that AGENTS.md §"Touchedpackages/spec?" tells you to reach for — failed before running a single gate:check:strictness-ledgerwas added in #4232 (scripts/check-strictness-ledger.mts, wired into CI at.github/workflows/spec-liveness-check.yml:75) without a matching entry incheck-generated.ts's ledger. This is the reconciler working exactly as designed — its own comment says an unclassifiedcheck:/gen:script "fails the run rather than quietly dropping out of coverage", and AGENTS.md notes it caught its ownpackage.jsonentry on the first run. Nothing was broken; the classification was simply missing, and #4252 supplied it in the bucket predicted here (NO_GENERATOR).Blast radius
Low.
check:generatedis not in any workflow — CI runs the individual gates inCheck Generated Artifacts/TypeScript Type Check/spec-liveness-check, all of which were green throughout. It cost only local time: an agent following the AGENTS.md instruction got a reconciliation error instead of the gate report, and had to fall back to the hand-rolledfor c in check:…loop (which is precisely the thingcheck:generatedexists to replace, and precisely the loop the| tail -1masking trap lives in).Refs #4232, #4252, #4196.