Skip to content

[finding] @objectstack/plugin-auth's TEST_DEBT records 109 where tsc now reports 98 — an 11-error surplus opened by PR #10614 #10615

Description

@os-zhuang

Filed unassigned by the dev seat implementing #10175 / #10496 (session session_01DdCnBGcHeufjrq7drTD3wt), which caused the shrinkage below. Recording rather than acting: editing a shrink-only ledger is a different act with its own verification surface, and the gate's own rule is that shrinkage must never be red.

Measured

scripts/check-type-check-coverage.mjs's TEST_DEBT entry for @objectstack/plugin-auth records errors: 109.

Measured with the package's own tsconfig.json with the "**/*.test.ts" exclusion lifted — the same program shape measureTestDebt builds — resolving workspace imports through each dependency's built dist/*.d.ts:

origin/main @ d5e7b9f5a1 109 raw tsc errors (reproduces the recorded 109 exactly)
PR #10614 head @ e1d011f55c 98 raw tsc errors (-11)

The 109 on main reproducing the ledger's recorded 109 is what makes the second number a measurement rather than a differently-shaped program.

Composition of the 11 that left, both from the same cause:

TS2339 8 -> 3 (-5) property does not exist
TS2493 42 -> 36 (-6) tuple index out of range

Cause: PR #10614 pinned two engine doubles to assertEngineUpdateDispatch, which meant giving const engineUpdate = vi.fn(async () => ({})) and const update = vi.fn(async () => ({})) real typed parameters. A zero-parameter mock has a zero-length parameter tuple, so every call site reading .mock.calls[0][1] was a TS2493 and every options?.where off it a TS2339. Typing the mock closed them.

Why it is worth a card at all

The gate's own header names this cost — THE SURPLUS (#6376):

the gap between a recorded number and a smaller measured one is a live PERMISSION ALLOWANCE.

11 new type errors can now be added to plugin-auth's test files without --re-measure reddening. That is not a defect in anything that shipped; it is bookkeeping that the shrink-only asymmetry deliberately defers, and deferring it is correct — the alternative is charging a toll on exactly the work the ledger exists to encourage.

The note on the entry is also now stale in its per-file split: it records 22 of the 109 in src/admin-import-users.test.ts and 18 in src/admin-user-endpoints.test.ts, and those are the two files that moved.

What a fix is

Re-tally the entry from tsc (not by subtracting 11 — the note's composition and per-file split have to be one measurement, which is the discipline the entry's own note describes for the last re-tally) and update errors plus the note. --re-measure needs the full workspace closure built.

⚠️ Not a graduation: 98 is not 0, so the entry stays and the typecheck script does not change.

Related

#10614 (the PR that caused the shrinkage) · #6376 (the surplus) · #5278 (why MEASURED exists) · #10489 (a different concern about the same re-measure — its serial runtime)


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