@@ -1033,6 +1033,59 @@ const EXEMPT = {
10331033// So the shrink-only guarantee did not loosen here; it moved to a strictly
10341034// sharper instrument, one that also reddens on a wholesale substitution of
10351035// error IDENTITY at a constant total, which a per-package integer cannot see.
1036+ //
1037+ // ── #15145: `@objectstack/verify` GRADUATED — and this one WAS paid down ───
1038+ //
1039+ // `verify` (3) left this ledger on 2026-09-04. ⛔ Do NOT read it through the
1040+ // blocks above it: those all warn that a deleted entry left its population
1041+ // undiminished, and this one is the other case (`plugin-security` is the
1042+ // nearest precedent, and even it ledgered nothing only because its 9 residual
1043+ // errors were repaired by hand). Here the entry recorded
1044+ // TS2835 x3 for three extension-less `./harness` imports, all three were given
1045+ // their `.js`, and the re-measure then read the entry at ZERO before anything
1046+ // was wired -- this gate's own line, quoted: "@objectstack/verify: TEST_DEBT
1047+ // records 3, and tsc now reports 0 -- graduation candidate". So there is no
1048+ // `packages/verify/test-typecheck-debt.json`: at zero residue a bare
1049+ // `tsc --noEmit -p tsconfig.test.json` is the stronger gate, the call
1050+ // `plugin-security`, `metadata-core`, `metadata-fs` and `trigger-record-change`
1051+ // made before it, and every error any of the package's 10 test files ever gains
1052+ // is red on arrival with no ledger to be added to.
1053+ //
1054+ // ⚠️ MEASURED IN THAT ORDER ON PURPOSE, because the entry's own note predicted
1055+ // the outcome ("the same one-line fix graduates this entry") and a prediction is
1056+ // not a licence. Collapsing a TS2835 cascade EXPOSES errors as well as removing
1057+ // them -- the #8612 lesson this ledger carries twice above -- and the card that
1058+ // filed this had itself watched the entry drift 3 -> 5 (+2 TS7006) the moment
1059+ // two `.then` callbacks were added behind that same unresolved specifier. The
1060+ // honest move on an upward count is to RE-TALLY, not to delete. Here it went
1061+ // down, and only the measurement could say which.
1062+ //
1063+ // THE WIRING IS THE OTHER HALF, and it is what the entry's disappearance now
1064+ // rests on: `packages/verify/tsconfig.test.json` compiles `src/**/*` with
1065+ // vitest-matching module semantics and `package.json`'s `typecheck` NAMES it,
1066+ // so `hidesTests` is false. Measured with the closure built: the build config
1067+ // puts 0 of the package's 10 `src/*.test.ts` in its program (and all 9 non-test
1068+ // `src/**` files); the test config puts 10 of 10. The package's own advertised
1069+ // `typecheck` was green over a layer it had never read -- which is the defect
1070+ // the card was about, and which deleting a ledger entry alone would have left
1071+ // exactly where it was.
1072+ //
1073+ // ⚠️ The pin half reported nothing here in either direction and still does not:
1074+ // this package's test layer holds ZERO `@ts-expect-error` directives (grepped
1075+ // with a positive control -- the same grep hits `packages/spec/src`), so
1076+ // PINS_CHECKED had no subject. The card's sharpest line -- that a
1077+ // `ts-expect-error` in those files is a phantom check -- is a statement about
1078+ // what WOULD happen, not about an existing dead pin, exactly as `cli`'s
1079+ // graduation recorded for its own 115 files.
1080+ //
1081+ // ⚠️ ROUTE (b) WAS AVAILABLE HERE and was still not taken. The #11491 note
1082+ // above names `verify` as one of the 4 entries whose exclusion could be dropped
1083+ // with `check:type-source-resolution` staying green, and that split was
1084+ // re-measured on 2026-09-04 under a trap-restored mutation and still holds for
1085+ // this package (exit 0; 124 programs across 78 packages). It was declined on
1086+ // module semantics: `tsconfig.json` inherits NodeNext from the repo root and
1087+ // would hold the test layer to a resolver vitest never runs it under. Onboard
1088+ // by WIRING, not by widening the build config.
10361089const TEST_DEBT = {
10371090// ── #14710: `@objectstack/cli` GRADUATED, and it was not paid down ─────────
10381091//
@@ -1154,16 +1207,6 @@ const TEST_DEBT = {
11541207 + 'module-level `VARS` and a partial context cannot satisfy it; the same file already carries a '
11551208 + 'hand-widened copy of that helper (`filterOf`) written for exactly that reason.' ,
11561209 } ,
1157- '@objectstack/verify' : {
1158- errors : 3 ,
1159- note : 'TS2835 x3 -- `harness.host-resolution`, `harness.posture-only` and `harness.posture` each '
1160- + 'import `./harness` without the `.js` extension. Re-tallied from the 8 measured at 5ab08428 '
1161- + '(TS2835 x4, TS7006 x4) when `derive.test.ts` gained its own extension: that ONE unresolved '
1162- + 'import was carrying 1 x TS2835 plus every TS7006 in the file, because a specifier that does '
1163- + 'not resolve under NodeNext makes every symbol it names `any` and so every callback parameter '
1164- + 'implicitly any. The remainder is the same NodeNext pair from the top-of-ledger note, and the '
1165- + 'same one-line fix graduates this entry.' ,
1166- } ,
11671210 '@objectstack/connector-mcp' : { errors : 5 , note : 'TS2339 x5. Re-measured 5 at 5ab08428, exact.' } ,
11681211 '@objectstack/connector-openapi' : { errors : 5 , note : 'TS2339 x5. Re-measured 5 at 5ab08428, exact.' } ,
11691212 '@objectstack/http-conformance' : {
0 commit comments