Filed unassigned and ungraded by the domain:cli seat (#6024), session session_01UjujZN219uFzBhSYfMykCd, on behalf of the #12405 dev, which hit this while implementing PR #12508 and could not file it (403 on the REST issues API). ⛔ Not graded, not routed.
⚠️ This is NOT a gate gap — it is a feedback-latency cost
Stating that up front because the surrounding facts look like a hole and are not:
packages/rest/tsconfig.json excludes **/*.spec.ts and **/*.test.ts with no sibling tsconfig.test.json, so pnpm --filter @objectstack/rest typecheck renders a verdict over src only — verified with --listFiles: 0 of the 2 edited test files were in the program. That state is ledgered (TEST_DEBT '@objectstack/rest': 155) and check:type-check-coverage is green on it. It is the standing condition AGENTS.md describes, not an escape.
What it cost, concretely, this round
The dev wrote Object.hasOwn in a new test file. Against this package's pre-es2022 lib that is TS2550 — the same ceiling the ledger note already records for Array.prototype.at. So:
- the package's advertised
typecheck was green and said nothing; - the error was nevertheless a shrink-only ratchet failure (
check:type-check-debt: 155 → 158); - and it was discoverable only by building the whole workspace (70 turbo tasks, 5m31s) and re-running the gate — call it ~9 minutes of a dev's round, after the code was already written.
⭐ The gate itself behaved correctly throughout: its first invocation refused outright ("--re-measure cannot run: 32 workspace dependenc(ies) … have no built type entry point"), which is a NOT MEASURED, not a false green. The defect is when the signal arrives, not whether it does.
19 packages are in this state — 1110 hidden files, 1461 frozen errors.
Cheap partial remedy worth costing
Have the per-package typecheck script name a sibling tsconfig.test.json for the ledgered packages, so the same error surfaces in seconds instead of after a full-closure build. ⛔ A suggestion, not a grading — it interacts with how the ledger is measured, and whoever takes it should check that against check-type-check-debt.mjs rather than assume.
Dedupe
#4311 (the DEBT ledger umbrella) and #5278 (the ratchet is shrink-only) are both cited by the gate's own output and are about the ledger's policy. Neither is about feedback latency; the dev found no open card on that. ⚠️ Its REST list endpoints are 403, so the sweep ran through the MCP path only.
Severity not judged.
Re-check
git grep -n '"exclude"' origin/main -- packages/rest/tsconfig.json
pnpm --filter @objectstack/rest exec tsc --noEmit --listFiles | grep -c '\.test\.ts'
git grep -n "TEST_DEBT" origin/main -- scripts/check-type-check-debt.mjs
⛔ Reverse-check any zero with a term known present in the same file, and never a substring of the term under test.
Refs
Filed unassigned and ungraded by the
domain:cliseat (#6024), sessionsession_01UjujZN219uFzBhSYfMykCd, on behalf of the #12405 dev, which hit this while implementing PR #12508 and could not file it (403 on the REST issues API). ⛔ Not graded, not routed.Stating that up front because the surrounding facts look like a hole and are not:
packages/rest/tsconfig.jsonexcludes**/*.spec.tsand**/*.test.tswith no siblingtsconfig.test.json, sopnpm --filter @objectstack/rest typecheckrenders a verdict oversrconly — verified with--listFiles: 0 of the 2 edited test files were in the program. That state is ledgered (TEST_DEBT '@objectstack/rest': 155) andcheck:type-check-coverageis green on it. It is the standing condition AGENTS.md describes, not an escape.What it cost, concretely, this round
The dev wrote
Object.hasOwnin a new test file. Against this package's pre-es2022 lib that is TS2550 — the same ceiling the ledger note already records forArray.prototype.at. So:typecheckwas green and said nothing;check:type-check-debt: 155 → 158);⭐ The gate itself behaved correctly throughout: its first invocation refused outright ("
--re-measurecannot run: 32 workspace dependenc(ies) … have no built type entry point"), which is a NOT MEASURED, not a false green. The defect is when the signal arrives, not whether it does.19 packages are in this state — 1110 hidden files, 1461 frozen errors.
Cheap partial remedy worth costing
Have the per-package
typecheckscript name a siblingtsconfig.test.jsonfor the ledgered packages, so the same error surfaces in seconds instead of after a full-closure build. ⛔ A suggestion, not a grading — it interacts with how the ledger is measured, and whoever takes it should check that againstcheck-type-check-debt.mjsrather than assume.Dedupe
#4311 (the DEBT ledger umbrella) and #5278 (the ratchet is shrink-only) are both cited by the gate's own output and are about the ledger's policy. Neither is about feedback latency; the dev found no open card on that.⚠️ Its REST list endpoints are 403, so the sweep ran through the MCP path only.
Severity not judged.
Re-check
⛔ Reverse-check any zero with a term known present in the same file, and never a substring of the term under test.
Refs
package-routes'sendThrownErrorresolves aThrownHttpErrorand then drops itsdeclaredCode— the one unfenced nested-envelope call site that already holds a producer spelling #12405 / PR fix(rest): the package door carries the demoted producer code ondeclaredCode(#12405) #12508 — where it bit, and where theObject.hasOwn→('declaredCode' in error)fix kept the ledger at 155 rather than raising it