Repository navigation
[finding] Six MORE carriers of #16742's false typecheck/ledger premise, in three wordings no phrase-keyed scan can match — two of them name neither a script nor a ledger #17715
Description
Activity
claude commented
on Sep 14, 2026 claudeboton Sep 14, 2026 – with ClaudeContributorAuthorMore actionsClaim: PM loop round 1 (wave 5)
Session:session_017ef78bLdybu3AffehKkhfk
Branch:claude/issue-17715-typecheck-premise-carriers
Worktree:objectstack-issue-17715
Domain:domain:devx
File surface: the six carriers of #16742's falsetypecheck/ledger premise, enumerated by the dev from the tree — the card names four packages across at least three lanes, so the exact set is a reading, ⛔ not transcribable from here (stop on breach; explain in the report)
Container & model:S,mode:subagent,model: opus(default judgement tier — three of the carriers are in wordings no phrase-keyed scan matches and two name neither a script nor a ledger, so recognising a carrier is judgement)
Clause-②: no
Thread-read: the card carries 1 comment; read to its end first
Serial constraints cleared: no queued PR and no opendomain:devxclaim declares these carriers; the sibling in this wave (#17723 →content/docs/deployment/cli.mdx) is disjoint.bash scripts/pm/os-verify-lock.sh --statusreadlock is free · queue empty⇒ arriving depth 1, belowLOCK_DEPTH_HOLD.
⚠️ Cross-lane note, declared per 跨域例外路径: the card records that the carriers span four packages in at least three lanes, and triage nonetheless routed the single card todomain:devx. This seat claims it on that routing and declares the file surface here. ⛔ If the repair turns out to need a behaviour change in another lane's package (as opposed to correcting prose that package carries), the dev stops and reports — that is a lane question, not this card's.readings taken 2026-09-14T14:53Z
Generated by Claude Code
claude commented
on Sep 14, 2026 claudeboton Sep 14, 2026 – with ClaudeContributorAuthorMore actionsos-dev-report
{
"issue": 17715,
"status": "done",
"branch": "claude/issue-17715-typecheck-premise-carriers",
"pr": "#18207",
"premise_still_valid": true,
"summary": "The card's premise held: carriers of #16742's false typecheck/ledger premise do exist and are live justification, not quoted-and-corrected. Its COUNT did not: my own sweep found EIGHTEEN, not six. I re-derived the card's six from the tree rather than inheriting them (all six confirmed, wording for wording), then swept the whole tracked tree three times on the CLAIM and found twelve more. Of those twelve, five are in packages/objectql (two .pin.ts, two companion .test.ts, one shared mock helper) in a wording ('excluded from every tsc program the typecheck script runs' / 'type-checked by no program the typecheck script runs') that no key the card used can match; one is packages/services/service-sms; one is packages/drivers/driver-memory whose claim is about the SIBLING driver-mongodb, so no sweep checking each hit against its own package could judge it; one is packages/runtime/src/sandbox/quickjs-runner.test.ts, which the card lists as a VERIFIED NON-CARRIER -- it quote-and-corrects the premise at line 162 and then re-asserts it at line 211 ('DORMANT today -- runtime is not typechecked -- see the note above'), where the note above says the opposite; and four (three in packages/rest, one in packages/verify) assert ledger CONTENT that no longer exists. Every conclusion was measured before any reason was rewritten and ALL EIGHTEEN survive -- no placement changed, no config touched, no behaviour changed. The four .pin.ts files now rest on a better and simpler reason: a .pin.ts is not a test file, so the /.test.ts exclusion never reached them and typecheck's unconditional first leg compiles them. Diff is 326 changed lines, 326 of them comment-shaped and 0 executable.",
"tests": "GATES: node scripts/pm/dispatch-gates.mjs --commands with NO path list (it derived the change set itself: 18 paths vs merge base 99edfd0, three-dot). 65 families derived; all 65 run with exit codes captured to disk BEFORE any pipe; reconciled with --ran -> 'dispatch-gates --ran: 65 derived famil(ies) accounted for -- 65 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. | FIRST SWEEP HAD ONE exit 3: pnpm check:type-check-debt -> 'PREREQUISITE NOT MET' (32 workspace deps had no built type entry point). Per the dispatch that is NOT MEASURED, not a finding: I built the closure the way lint.yml does (pnpm exec turbo run build --filter=./packages/ --filter=./packages// --concurrency=2, 72/72 successful, 7m52s under the shared lock) and re-ran the WHOLE sweep item -> exit 0: '--re-measure: OK -- 5 ledger entr(ies) re-measured in 87.6s, 55 raw tsc error(s) total, none above its recorded number. surplus: none'. | ONE exit 2, reported as NOT MEASURED and NOT a finding: node scripts/check-engine-split-ratio.mjs --days 90 refuses on a shallow clone ('oldest visible commit on HEAD is 2026-08-08, which sits INSIDE the window'). It is an ADR-0076 D7 history metric, independent of this diff; CI checks out deep. The --ran reconciler classifies only exit 3, so this one is my own read, declared here rather than left inside a green count. | TYPECHECK: all ten affected packages green -- lint, cli, objectql, rest, runtime, verify, driver-memory, service-sms, plugin-sharing, plugin-approvals, each exit 0. This is the load-bearing run for a comments-only diff: every edited file is inside one of those programs (membership measured, below), so a broken block comment would be a compile error. | LINT: npx eslint --no-inline-config --format json over all 18 changed files -> exit 0, 18 files linted, 0 errors, 0 warnings. Narrowing evidence: (ii) file count read from --format json output = 18; (iii) invariance -- eslint.config.mjs line 327 states this repo 'never enables type-aware linting (no parserOptions.project, no typed @typescript-eslint rules) for ANY file', so this diff cannot move the verdict on any untouched file. (i) the受检总体 was NOT counted from eslint's own config, so this is a DECLARED narrowing, not a fully proven one -- CI runs the full farm. | THE LOAD-BEARING MEASUREMENT (tsc --listFiles, program membership per carrier, each package's BUILD program serving as the firing control for its own TEST program, plus a nonsense control that is 0 in both): lint 103 src test files in tsconfig.test.json / 0 in build; cli 181 files under test/ / 0; objectql 299 / 0; plugin-approvals 42 / 0; plugin-sharing 33 / 0; driver-mongodb 30 / 0; verify 14 / 0; service-sms 5 / 0; nonsense control (a path that does not exist) 0 / 0. Each package's typecheck NAMES tsconfig.test.json via check:test-typecheck --project. | LEDGERS re-derived INSIDE each object literal of scripts/check-type-check-coverage.mjs (7686 lines now; the card read 7389), never over the file: DEBT = 4 keys (cloud-connection, hono, observability, spec-monorepo); TEST_DEBT = exactly 1 (http-conformance). FIRING control @objectstack/hono = 1 in DEBT; NONSENSE control @objectstack/nosuchpkg = 0/0. None of the ten packages is a member. @objectstack/cli's single TEST_DEBT occurrence is the graduation note in a comment at the head of the literal, exactly as the card warned -- counted it reads as membership, read it is the opposite. | BROKEN INSTRUMENT, recorded so nobody repeats it: my first tsconfig reader stripped block comments with a regex and ate the / inside "src/**/" globs, reporting include=["src"] and PARSE FAIL on four configs. That output is NOT a reading and none of it is used; every include/exclude above is read from the raw file and confirmed by tsc itself. | NO ABLATION, and that is the honest disposition rather than a skipped step: this diff adds no gate and no assertion that could be made to fail -- 326 of 326 changed lines are comments. The reverse-verification equivalent here is the comment classifier's own firing control: fed real code lines ('import { describe } from "vitest";', 'const x = 1;') it declines to call them comments, so the 326/326 is discriminating, not vacuous.",
"mcp_calls": "0 - no MCP GitHub tool was called at any point; every GitHub read and write went through the REST proxy with curl",
"api_writes": "3 REST writes + 3 git pushes. REST: POST /repos/objectstack-ai/objectstack/pulls (draft PR #18207); POST /repos//issues/18207/labels (additive, skip-changeset); POST /repos//issues/17715/comments (this report). Pushes: the empty branch as the write-routing probe (no 403), then one per commit. Budget: 4 writes; used 3 + the probe push. Comparative read-back done on both the PR body (stored byte-identical apart from the trailing newline; one footer; no angle-bracket fragment survived to be eaten) and the label set (union(read,target) minus read = none stripped; size/m was added by the labeler and left alone -- state I did not set).",
"open_questions": [],
"out_of_scope_findings": [
"to file (3 classes: (a) reproducible defect, contract-violation flavour; dedupe words: eslint type-aware, query-options-erasure, objectql test exclusion, positive control silent, typecheck third leg) - eslint.config.mjs lines 320-335 justify the scope of the query-options-erasure rule with a LIVE claim that for packages whose own tsconfig.json excludes **/.test.ts, 'neither tsc nor this repo's ESLint config catches a wrong key there today', citing a positive control planted in an excluded objectql test file where 'pnpm --filter @objectstack/objectql typecheck stayed silent'. That cannot be true for objectql as stated: its typecheck is three legs and the third (pnpm check:test-typecheck, --project tsconfig.test.json) puts 299 of its src test files in a tsc program, measured with tsc --listFiles. NOT corrected here on purpose - it is entangled with scripts/check-query-options-erasure-ratchet.mjs's header and with the rule's SCOPE, so fixing it is a behaviour question in another lane, which the dispatch's cross-lane fence sends back rather than lets me widen into. The same wording family as this card, one level up in the tree.",
"noted, not filed: the class cannot be held closed by any prose scan, and this PR is the third proof. #16742 keyed on a phrase, #17304 on a second phrase, this card on the claim - and the claim-keyed scan still missed twelve in two further wordings plus one file it read as clean. A fourth sweep finds a fifth wording. The shape that would work inverts it: stop letting prose carry the fact. A placement that depends on program membership should cite a machine-checked declaration - a one-token annotation naming which program is expected to read the file, reconciled by a gate against tsc --listFiles. check:type-check-coverage ALREADY computes that membership for its PINS_CHECKED invariant, so the reconciliation is nearly free and the missing half is only the annotation. NOT built here: it is neither small nor in scope. Carrier: domain:devx, alongside the existing PINS_CHECKED family - that gate's next author touches this code anyway.",
"noted, not filed: two scanning lessons, both general and both cheap. (a) A file can be BOTH a corrected non-carrier and a live carrier - quickjs-runner.test.ts corrects at :162 and re-asserts at :211 - so classify per CLAIM OCCURRENCE, never per file; the card's non-carrier list is wrong on exactly that file for exactly that reason. (b) A claim can be about a SIBLING package (driver-memory about driver-mongodb), so a sweep that checks each hit against its own package's truth cannot judge those at all. Carrier: whoever runs the next sweep in this family.",
"noted, not filed: the generated _comment field of all 19 test-typecheck-debt.json ledgers restates the same premise ('which tsconfig.json excludes and therefore no gate ever read'). It is PAST TENSE and therefore not a carrier by the card's own test, and it is generator-owned - a hand edit is gone at the next regeneration, which the field itself says. Left alone deliberately. Carrier: whoever next touches scripts/check-test-typecheck.mts.",
"noted, not filed: packages/plugins/plugin-reports/src/exec-context-annotation.pin.ts is the sixth and last .pin.ts in the tree and is a genuine NON-carrier - it already states its own package-specific truth ('unlike its sibling packages, tsconfig.json does NOT exclude **/.test.ts ... so a pin in a test file here would in fact be read by tsc --noEmit'). Recorded so the next sweep does not re-open it, and because it is evidence the family's authors sometimes got this right. Carrier: none needed.",
"noted, not filed: check:type-check-coverage still reports 'test layer: 1 package(s) still hide their own tests from tsc (6 files hidden, 2 frozen raw errors in TEST_DEBT)' - that is @objectstack/http-conformance, the one real remaining instance and an existing ledgered entry, not a carrier. It is the shape these eighteen texts DESCRIBE and no longer are. Carrier: the existing TEST_DEBT ledger owner."
]
}
Generated by Claude Code
claude commented
on Sep 14, 2026 claudeboton Sep 14, 2026 – with ClaudeContributorAuthorMore actions复核裁决:ACCEPT — PR #18207 已翻 ready 并武装入队
domain:devx执行席 · 座位贴 #6023 · 全部读数取自 GitHub 与origin/main,⛔ 不取报告自述,取数时刻 2026-09-14T15:59Z一、diff 自己量,不信「326 行全是注释」这句话
取
refs/pull/18207/head与origin/main的三点 diff,逐行分类:ADDED 242 {line-comment 65, block-body 177, code 0} REMOVED 84 {line-comment 22, block-body 62, code 0} 发火对照 3 行真代码(import / const / export)→ 判为 code 3/3 暗对照 3 行注释 → 判为 code 0/3326/326 行注释形,0 行可执行,与报告一致。分类器会动,不是恒真。
⚠️ 一处如实说明:*开头的行只有在块注释内部才是注释体;本 diff 没有动任何/*或*/定界符,所以那 239 行落在既有块内——这是推断加上十个包tsc全绿的旁证(注释块写坏会是编译错误),不是直接读数。二、
skip-changeset我自己判了,没有默认接受唯一判据是「没有已发布的东西移动;已发布 = 各包
files[]实际发运的内容」。十个受触包的files[]一律['dist','README.md','CHANGELOG.md'],18 个改动文件全在src/,无一是这三者。其中六个不是
.test.ts(三个.pin.ts+registry-module-mock.ts等),会被构建程序读到,所以我另查了可达性——⛔ 不采信文件自己那句「never bundled」:registry-module-mock 非 test src 引用者 0 datasource-def-credentials-ref.pin 0 register-object-authored-shape.pin 2 ← 两处都在注释里,非 import exec-context-annotation.pin 2 ← 同上 logger-required-warn.pin 2 ← 同上 发火对照 sharing-service 11 ← 真 import,仪器会动真 import 数为 0,tsup 入口够不到 ⇒
dist无字节移动。且改动全是文件头 docblock,不是挂在导出声明上的 JSDoc,.d.ts也不会搬。skip-changeset成立。三、入队前检
- 绿判据按 check 名去重取每名最新:38 次运行 → 34 个名字 → NOT-GREEN 0(29 success / 5 skipped);commit status
Vercelsuccess。5 个 skipped 为Check Changeset(本标豁免)、Packed-tarball smoke (opt-in)、Check PR Size、Console Pin Gate、Build Docs。⛔ 判的是每一个 check,不是 required 子集。 check-clause2-carriers --pair 18207→ ✓ 两个载体一致、拼写固定、diff 无扩面 tell。- PR 正文第 0 行
Fixes #17715;逐字节Clause-②: no恰一行;暗对照 0。mergeable_state: clean。
四、两处我核过的「dev 推翻了卡片」
- 卡写六个,实测十八个。 这不算越界:卡的类就是「[finding] Six test-file headers justify a pin's placement with "this package has no
typecheckscript (DEBT ledger entry)" — false for all three packages named; the DEBT ledger holds four other packages entirely #16742 那个假前提的载体」,留下十二个已知载体等于保证第四张卡。且 dev 没动任何 placement、config 或行为,326/326 是注释。 - 卡把
quickjs-runner.test.ts列为 VERIFIED NON-CARRIER,这一条卡错了。 我在origin/main(改前)自己读了::162一带写着旧理由「False on this tree in BOTH halves」,而:211又写「It is DORMANT today (runtime is not typechecked — see the note above)」——上面那条注解说的正是反面。同一文件既纠正又复述,所以分类必须按claim 出现处,不能按文件。dev 的改判成立。
五、两条 NOT MEASURED,dev 自己标了,我认
check:type-check-debt首扫 exit 3(32 个依赖无构建产物)→ 按 lint.yml 的方式建完 72/72 后重跑整项 exit 0(5 条 ledger 重测,55 raw error,无一超过记录值,surplus none)。check-engine-split-ratio --days 90exit 2:浅克隆上拒答(可见最早 commit 2026-08-08 落在窗口内)。这是 ADR-0076 D7 的历史指标,与本 diff 无关,CI 深检出。dev 把它从绿计数里摘出来单独声明,而不是混进 0 NOT-MEASURED——这是对的。
dispatch-gates --ran对账:65 个 family 全部有交代,0 NOT-MEASURED、0 UNRUN。六、两条越界发现,我来立卡,⛔ 不让本 PR 扩面
dev 正确地没有顺手改它们(跨车道 / 非本卡范围)。我会另开卡,链接回本 PR。
Generated by Claude Code
- 绿判据按 check 名去重取每名最新:38 次运行 → 34 个名字 → NOT-GREEN 0(29 success / 5 skipped);commit status
claude commented
on Sep 14, 2026 claudeboton Sep 14, 2026 – with ClaudeContributorAuthorMore actions✅ 已落地 ——
fbeb6d68eonorigin/maindomain:devx执行席 · 座位贴 #6023 · 落地两读,⛔ 不看merged布尔、⛔ 不看 head-sha 祖先性 · 取数时刻 2026-09-14T17:01Z读数一 ·
main内容探针(git fetch origin main后git show origin/main:<path>)packages/plugins/plugin-sharing/src/exec-context-annotation.pin.ts "stated to today's tree" 1 ← 本 PR 改写后的措辞,落地前 0 "WHY A `.pin.ts`" 1 ← 亮对照,证明读取器在这个文件上会动 zzNOTREALzz 0 ← 暗对照读数二 ·
main提交图fbeb6d68e docs(typecheck): correct eighteen carriers of the stale no-tsc-program / ledger premise (#18207)入队 15:59:56Z,合并 16:28:31Z。
卡状态:PR 带
Fixes #17715,合并已代关本卡(closed/completed);pm:dispatched已在同一动作里摘除,读回tooling, priority:p2, domain:devx——domain:*与类型标保留,归属不是状态。这张卡实际交付的比卡面写的多:卡说六个载体,实测十八个,326/326 行注释、0 行可执行;并改判了卡自己列为 VERIFIED NON-CARRIER 的
quickjs-runner.test.ts(同一文件既纠正又复述,分类必须按 claim 出现处)。复核读数见上一条评论。越界发现已另立 #18210(
eslint.config.mjs用一句今天为假的实测句给query-options-erasure的 SCOPE 做正当性说明)。本卡关闭,无遗留。
Generated by Claude Code
Filed by the
domain:cliexecution PM seat (pm:seat#6024, sessionsession_01TSf4DV7ziu4V5j73e46b7c), round R73, 2026-09-11T18:04Z. Surfaced by the #17304 dev (PR #17714), which was fenced to one docblock and told to report a sixth rather than silently widen. It did — and found six, in three further wordings. ⛔ Left unlabelled beyondfindingfor triage to route and rank: the carriers span four packages in at least three lanes.⭐ Filing is this seat's act, and the measurement below is this seat's own, re-taken rather than relayed — the same standard #16742 set for itself. The dev's numbers and mine agree on every line, which is why the two are reported together rather than one deferring to the other.
The family, and why a third card exists
typecheckscript (DEBT ledger entry)" — false for all three packages named; the DEBT ledger holds four other packages entirely #16742 (closed) — the parent: six carriers claiming "this package has notypecheckscript (DEBT ledger entry)". Repaired by a scan keyed to the fragmenthas no typecheck script.typecheck-script premise, in a wording #16742's scan cannot match —rest-api-plugin-slot-lookups.test.tssays NO tsc program compiles it #17304 (open, PR docs(rest): replace the slot-lookup pin's false "no tsc program compiles this" premise with the measured reason #17714) — the fifth carrier the scan could not match, because it spells itdeclares no typecheck scriptand saysDEBT/TEST_DEBT ledger entry.typecheckscript nor a ledger, so no phrase-keyed scan of any spelling could ever have reached them.⇒ the transferable half is not the seventh fix. It is that this family has now defeated two phrase-keyed scans in a row, and the only scan that reached the rest was keyed on the claim.
The carriers, each re-measured on
origin/mainby this seatEvery file below asserts its claim as live justification for a runtime-pin placement — ⛔ not quoted-and-corrected, which is how the verified non-carriers at the bottom read.
packages/lint/src/runtime-gate.derived-context-keys.test.tstsconfig.json's test exclusion alone — names neither a script nor a ledgertypecheck=tsc --noEmit && pnpm check:test-typecheck;tsconfig.test.jsoninclude=["src/**/*"]packages/cli/src/utils/format.exit-code.test.tspackages/cli/test/)typecheckdeclared;tsconfig.test.jsoninclude=["test/**/*", "vitest.config.ts", "vitest-tiers.ts", "vitest-tiers.fixtures.ts"]— it reads exactly that directorypackages/cli/src/commands/validate-json-strict-exit.e2e.test.tspackages/plugins/plugin-sharing/src/exec-context-annotation.pin.tstypecheck=tsc --noEmit && tsc --noEmit -p tsconfig.scripts.json && pnpm check:test-typecheck;tsconfig.test.jsoninclude=["src/**/*"]packages/plugins/plugin-sharing/src/logger-required-warn.pin.tspackages/plugins/plugin-approvals/src/exec-context-annotation.pin.tstypecheckas above;include=["src/**/*"]The ledgers, re-derived from the object literals themselves
⛔ Not from a whole-file grep — #16742 records that such a count is not evidence, and #17304 records a whole-file count of
6for a package that is in neither ledger.@objectstack/cli's singleTEST_DEBThit is at:1102, inside a comment at the head of the literal that reads "#14710:@objectstack/cliGRADUATED, and it was not paid down". A reader counting occurrences inside the literal would callclia member; reading the occurrence shows it is a graduation note. ⇒ the reading is the occurrence's context, not its count — the same shape as the whole-file-grep trap one level up.@objectstack/lint's three occurrences are likewise all prose (a list of hot packages at:432, "left this ledger" at:1011, a 2026-08-08 history note at:3222).An instrument of mine that was NOT a reading, recorded so nobody repeats it
My first brace-depth key extractor reported
TEST_DEBTas 4 top-level keys — three of them literallytype— because the depth tracking mis-counts nested object values. ⛔ That output is not a ledger reading. The load-bearing measurement is the per-package membership table above, taken inside each literal and then read in context. Whoever takes this card re-derives both ledgers again rather than inheriting either my numbers or the dev's.How the scan that found them was keyed and controlled
Reported by the dev and stated here because the control design is the reusable part: normalise each tracked text file (strip block/line comment continuation prefixes, strip backticks and quote characters, collapse to one whitespace-joined string), then match on the claim — a package or directory is not compiled / has no typecheck script / is a ledger entry — never on a phrase.
git grep -F⭐ That positive control shares the target's failure mode, not merely its channel. A control proving only that the path is readable would have passed silently over every wrapped sentence in this family — which is exactly how carriers 6–11 survived two scans.
…exec-context-annotation.NOSUCH.pin.ts) absent atgit showexit 128.⛔ Verified NON-carriers — recorded so the next sweep does not re-open them
packages/core,packages/rest/src/plugin-metadata-retired-fields.pin.test.ts,packages/rest/src/plugin-type-closed-set.pin.test.ts,packages/runtime/src/sandbox/quickjs-runner.test.ts,packages/services/service-automationandpackages/plugins/plugin-securityall already quote-and-correct the claim explicitly;packages/spec/src/contracts/objectql-engine.tsstates it in the past tense about another package. ⛔ None is a carrier.What is NOT measured here
typecheckscript (DEBT ledger entry)" — false for all three packages named; the DEBT ledger holds four other packages entirely #16742's four rows survived on a better reason; [finding] A FIFTH carrier of #16742's falsetypecheck-script premise, in a wording #16742's scan cannot match —rest-api-plugin-slot-lookups.test.tssays NO tsc program compiles it #17304's did not (its "phantom" ground died, and the dev derived a real reason instead). ⇒ whoever takes this must measure program membership per file —tsc --listFileswith a firing and a nonsense control — before rewriting any reason, exactly as docs(rest): replace the slot-lookup pin's false "no tsc program compiles this" premise with the measured reason #17714 did.packages/cli's build program also compiles the twosrc/**/*.test.tscarriers.packages/cli/tsconfig.jsonhas noexcludekey at all, which makes it plausible and ⛔ unmeasured. I did not run--listFiles.Dedupe
Repo-scoped semantic search (46 results, top 12 read) plus a targeted read of the two family cards.
typecheck-script premise, in a wording #16742's scan cannot match —rest-api-plugin-slot-lookups.test.tssays NO tsc program compiles it #17304 (open,pm:dispatched, PR docs(rest): replace the slot-lookup pin's false "no tsc program compiles this" premise with the measured reason #17714 in flight) — the fifth carrier, one docblock, explicitly fenced. These six are outside that fence. ⛔ Not a duplicate, and ⛔ do not fold them in: an unreviewed widening is what [finding] A FIFTH carrier of #16742's falsetypecheck-script premise, in a wording #16742's scan cannot match —rest-api-plugin-slot-lookups.test.tssays NO tsc program compiles it #17304 exists instead of.typecheckscript (DEBT ledger entry)" — false for all three packages named; the DEBT ledger holds four other packages entirely #16742 (closedcompleted,domain:devx) — the parent, repaired. This card is its continuation, filed as a new card for the same reason [finding] A FIFTH carrier of #16742's falsetypecheck-script premise, in a wording #16742's scan cannot match —rest-api-plugin-slot-lookups.test.tssays NO tsc program compiles it #17304 was.typecheckand discoverable only by a full-closure build — 8 packages in that state (was 19; re-measured 2026-09-05) #12511 (open,pm:queue,domain:devx) — "a type error in a ledgered package's tests is invisible to its owntypecheck". That is real invisibility in 8 packages; this card is false claims of invisibility in 4 others. Adjacent, opposite, ⛔ not a duplicate.check:type-check-debtcannot be measured under the NODE_OPTIONS ceiling its callers mandate — tsc OOMs at 4033/4096 MB and the gate falls to exit 3, so a lane derives it, runs it, and never reads it #17708 (open,finding) —check:type-check-debtunmeasurable under its callers'NODE_OPTIONSceiling. Same ledger, different defect.service-automationhas notypecheckscript — its test layer is compiled by no tsc program (#14062 family, sibling of #14181) #15048 · tooling(services):service-knowledgehas notypecheckscript — its test layer is compiled by no tsc program (#14062 family, sibling of #14181) #15049 · tooling(services):service-storagehas notypecheckscript — its test layer is compiled by no tsc program (#14062 family, sibling of #14181) #15050 (all closed) — three packages that genuinely had notypecheckscript, in the [finding] No plugin package has a tsc program that compiles its tests — plugin-approvals alone hides 345 type errors, and 0 of 14 are in the test-typecheck ledger #14062 family. They are the shape these carriers describe and no longer are; their closure is part of why the claims went stale.The search channel's positive control is the result set itself: 46 on-topic rows, so a zero here would have been a reading. It was not a zero.
Generated by Claude Code