fix(cli): wire the test layer into check:test-typecheck — 115 test files no tsc program read - #14833
Merged
Merged
Conversation
Ledger not yet seeded — intermediate commit so the wiring survives a container restart. See the follow-up commit for the measured ledger. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Seeds the measured ledger, graduates the TEST_DEBT and UNCHECKED_SOURCE_DEBT entries, and re-baselines type-source-resolution for the new program. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
…tDir deviation Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Contributor
📓 Docs Drift Check
What this run could not see
Coarse fallback — 22 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Sep 3, 2026
os-trump
marked this pull request as ready for review
September 3, 2026 05:19
os-trump
enabled auto-merge
September 3, 2026 05:19
This was referenced Sep 3, 2026
os-project-manager
disabled auto-merge
September 3, 2026 06:34
os-project-manager
enabled auto-merge
September 3, 2026 07:48
This was referenced Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #14710
packages/cli'stypecheckwas a baretsc --noEmitagainst a config declaringinclude: ["src"], so the 115 test files in the siblingtest/tree were read by no tscprogram anywhere. This wires the package into the shared
check:test-typecheckmechanismand seeds the resulting ledger.
File face
packages/cli/tsconfig.test.jsonrootDironly; strictness inherited and untouched.packages/cli/test-typecheck-debt.json_note.packages/cli/package.jsontypecheckbecomestsc --noEmit && pnpm check:test-typecheck; addscheck:test-typecheckandgen:test-typecheck-debt.scripts/check-type-check-coverage.mjsTEST_DEBTentry (144) and theUNCHECKED_SOURCE_DEBTrow forpackages/cli/test, each documented beside the earlier graduations.scripts/check-type-source-resolution.mjsscripts/regen-artifacts.mjs.changeset/cli-test-typecheck-wiring.md@objectstack/cli.⛔ No test file is edited. Not one
any, not one@ts-expect-error. The sharedscripts/check-test-typecheck.mtsis called, never copied.Measurement 1 — the population, re-measured on current
mainThe card said 112. It is 115: the tree moved between filing and dispatch. Measured at
5a5336b399with the workspace closure built first, viatsc --noEmit --listFiles -p tsconfig.json:packages/cli/test/src/**files (control)src/**(control)The zero is the
includeline, not a blind probe — and the contrast sits inside this onepackage: tests under
srcalways compiled, tests undertest/never did. Directionalcontrol from a package with no test exclusion,
packages/drivers/driver-memory: the sameprobe puts 40 of its 40 test files in the program. Under
tsconfig.test.jsonthe countis 115 of 115 (1416 files total), plus all 3 harness modules and
test/helpers/serve-process.ts.Measurement 2 — the count, attributed in both directions with no remainder
The same file population under the build config's inherited NodeNext reports 144 — and
that reproduces the
TEST_DEBTentry class for class (TS7006 x59, TS2835 x56, TS2339x24, TS2307 x3, TS18046 x2), so the frozen number was still exact on the way out.
relative imports), the TS7006 x59 cascading above them, TS2307 x3, TS18046 x2. Config-tier,
about the CHECK rather than the code.
test/i18n-extract-action-description.test.ts, previously masked by ananyfrom its twounresolved imports of
../src/utils/i18n-extractand../src/utils/i18n-coverage.144 − 120 + 4 = 28, across 3 of the 115 files. The other 112 carry no entry, so any error
they gain is red on arrival. The pile is concentrated:
test/data-model-rules.test.tsis 23of the 28 on its own, all property reads off one lint-diagnostic type.
A second config-tier pile, recorded so nobody re-derives it
This package's tests sit outside the build config's
rootDir(src) — the one placethis differs from the
packages/runtimeprecedent. Inherited, the same program adds 116 xTS6059.
rootDir: "."is not enough either: three tests import fixtures fromexamples/app-showcase/src/**, still 3 x TS6059. SorootDiris../.., exactly theshape
packages/client's test config already uses. It widens the ROOT, never the strictness.A claim in the filing that measurement did not support
The card's sharpest line — a
@ts-expect-errorin those files is a phantom check — is aboutwhat would happen, not an existing dead pin. Measured: this layer holds zero
@ts-expect-errordirectives across all 115 files and the 3 harness modules, and none reportsTS2578. The real cost was the 144 diagnostics nothing read, and the inability to write a
type-level pin here at all.
Red-first proof, both ratchet directions
Each mutation proved on disk (marker count + blob hash), each restore proved by blob-hash
equality with HEAD, under
trap ... EXIT INT TERMon absolute paths.test/commands.test.ts(blob27e2996etoadab66a4, restored to27e2996e)test/i18n-declared-surface-gate.test.ts(blobbb45724ato131eb633, restored tobb45724a)git diff HEADempty for bothVerification
Gate families derived from the real change set with
scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(44 owed by path and kind; 52 commands once the changeset exists). Run on final head
05163f41af, exit codes captured before any pipe. All green except five recordedNOT MEASURED, each by the gate's own explicit prerequisite text, none a finding:
check:i18n,check:i18n-coverage,check:dual-build-cjs-loads— require build output thisworktree does not carry ("Nothing was checked"). This diff changes
package.jsonscriptsonly and cannot move a translation bundle.
check-test-completeness,pm/check-half-states— exit 3, their documentedNOT-MEASURED code (a saved
turbo run testlog; API access).check:type-check-debt: its--self-test(48+68+43+28+19+18 cases) and plain run aregreen; only the
--re-measurehalf is unmeasured — it needs CI's dedicated"Build the ledgered packages' dependencies" step, and it exceeded the container's 10-minute
foreground ceiling even holding the shared lock.
The ratchet family was re-run on the final commit after the last push.
Scope
⛔ Not done here, deliberately: whether the
include-vs-excludegap belongs in AGENTS.md orin
check:type-check-coverageitself. The card's triage explicitly held that back pending ameasurement of how many packages narrow
includethe same way. This gate's own scoreboard nowreads 10 packages still hide their own tests (down from 11), which is the honest count for
that class. Issue #14785 is the
packages/runtimetwin whose shape this follows; it is notaddressed here.
🤖 Generated with Claude Code
https://claude.ai/code/session_016yfqQh2dBgPAymYd7xipza
Generated by Claude Code