Skip to content

[finding] TEST_DEBT for @objectstack/lint records 20 where tsc now reports 19 — the open gap lets one new test-layer error land silently #8922

Description

@hotlong

Observed while running pnpm check:type-check-debt --re-measure for an unrelated card (#8868 / #8833, PR #8921). Filed unassigned, recording rather than starting — this is not the card's subject and was not fixed there.

What was measured

On the merged head f9811727d (branch merged with origin/main @ 85f5e7868), with the workspace closure built as lint.yml builds it:

check-type-check-coverage --re-measure: OK — 33 ledger entr(ies) re-measured in 211.5s,
1926 raw tsc error(s) total, none above its recorded number.
ℹ @objectstack/lint: TEST_DEBT records 20, tsc now reports 19 (-1) -- the entry can be
lowered. Not an error: an improvement must not have to pay a bookkeeping toll to land.

The gate passes, and correctly so — the ratchet only fails on drift up.

Why it is worth recording anyway

The gate's own message states the harm, and it is not hypothetical by its own citation:

But the gap is not bookkeeping while it is open: nothing else reads this layer, so 1 new error(s) can land here and this gate will report success (#6376 -- driver-mongodb's 33 swallowed a whole signature reversion).

So while the entry sits at 20 against an actual 19, @objectstack/lint's test layer has exactly one error of free headroom: a genuine new type error there lands green through this gate, and #6376 is the precedent for that headroom swallowing something real rather than staying theoretical.

Disposition

Observation-class, hence the finding label and no pm:queue:

  • the remedy is the gate's own advertised affordance, pnpm check:type-check-debt --lower, which writes the measured number itself;
  • lowering a ledger entry is the permitted direction (raising a ceiling is maintainer-only), so this needs no ruling — only someone's hands;
  • it is pre-existing and unrelated to the card that observed it, and the drift may be a side effect of any recent @objectstack/lint change rather than a single identifiable PR.

⛔ Deliberately not fixed as a rider on PR #8921: that PR's declared region is diffMetaItem in packages/metadata-protocol, and a ratchet-ledger write for an unrelated package is exactly the kind of scope creep that makes a diff unreviewable.

Not a duplicate

Searched open issues for the TEST_DEBT / lint / lowered-entry wording before filing; no match. The only related artifact is #6376, cited by the gate itself as the precedent for the harm, not as this condition.

Backlink: observed on PR #8921 (#8868 · #8833).


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions