Skip to content

[P3] spec: check:generated fails its own ledger reconciliation — check:strictness-ledger is unclassified #4267

Description

@os-zhuang

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions