Repository navigation
[finding] check-type-source-resolution's (via …) provenance annotation is FALSE for an include entry naming a bare directory — and that annotation is the doc-block's OWN test for which remedy limb an author is on #18373
Description
Filed by the domain:spec execution seat (#6017), session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T05:2xZ, from an os-dev round's out_of_scope_findings. ⛔ Not claimed, ⛔ not dispatched. Grading is triage's. ⛔ This seat did not run a dedupe search (per 「立卡者不查重,只附查重词」).
Measured by the #17396 round (report 5692289800) while it was blocked by this exact gate on PR #18198, with a two-leg control, one variable, restored between legs.
The defect
scripts/check-type-source-resolution.mjs — programFiles() at :1224 maps every include entry through globToRegExp (:1164, applied at :1254). An entry naming a bare directory is therefore matched literally instead of as TS's dir/**/*, and that program's file set reads as empty.
The repro, two legs, one variable
packages/services/service-automation/tsconfig.json ships "include": ["src"]:
include spelling |
the failure row reads |
|---|---|
["src"] (shipped) |
@objectstack/types **(via tsconfig.test.json)** |
["src/**/*"] (only change) |
the same row, bare — no (via …) |
⇒ tsc compiles src/engine.ts under both spellings — measured, 18 × TS6059 under tsc -p tsconfig.json with the shipped bare-src spelling — so the annotation is wrong, not the compiler.
Why it is class (a) rather than cosmetic
The (via …) annotation is the doc-block's own test for telling the re-baseline limb from the plain refusal — 「if you cannot point at the program, you do not have this case」. A false annotation therefore steers an author onto the limb the doc-block forbids, in a gate whose other two routes are both marked maintainer-only. That is the shape where being wrong costs a ratchet.
Second symptom, same subject
The doc-block says the annotation appears 「in --list and in the failure text」. --list emits zero of them. Controlled: 0 occurrences of (via in --list output against 3 in the failure output — same token, same script, same run.
Carrier
The maintainer who rules on PR #18198's check:type-source-resolution red opens this exact file. ⇒ worth grading before that sitting, not after.
Dedupe words
check-type-source-resolution · programFiles · include bare directory · via provenance annotation · TS6059
os-decision-facets
domain:spec execution seat, NOT by this card’s filing seat. H62 measured this body as carrying no marker in either spelling, and the remedy it names is the FILING seat’s — but that seat (os-warren) is out of budget, so the duty cannot be discharged where it belongs and the card would sit unrulable. This seat dispatched the card, read the round’s report and routed it here, so it supplies the block from its own measurements. ⛔ Purely additive — nothing already on this face was removed, reworded or re-ordered. ⛔ This seat states the facets and does NOT grade them.
- ① 项目长远合理性 — the
(via …)provenance annotation is the doc-block’s OWN test for which remedy limb an author is on, and it is FALSE for anincludeentry naming a bare directory. So the instrument that tells an author what to do is wrong about the case it is describing. The fix is proven and ablation-proven on PR fix(scripts): a bare-directoryincludeis tsc's implicit glob, and--listannotates provenance too #18708; the cost is entirely downstream of the fix WORKING. - ② 实际业务拉动 — measured: the repaired gate sees files it previously could not, and the required
Lint & Repo Gatesjob goes 0 → 14 failure rows (first atpackages/services/service-settings, whose tsc program imports 5 workspace packages whose declarations resolve todist/with nopathsrule at source).⚠️ Those 14 rows are pre-existing conditions the old reading could not see — not regressions the fix introduced. - ③ 防 AI 犯错 — decisive and self-referential: the gate’s message hands the author a remedy, and the annotation deciding WHICH remedy applies is the false one. An agent following it lands on the wrong limb with the gate green.
⚠️ The mirror hazard is real too: narrowing the fix so the 14 rows stay invisible would restore exactly the half-blind instrument this card exists to repair. ⛔ Do not buy green that way. - ④ 创业阶段不扩散 — the remedy the gate itself prints is
pathsrules per package or a ledger entry, and its own text says 「that ledger and ⛔ never widen arootDirto make room — both are maintainer-only」. So the 14 rows cannot be cleared by any seat or dev; only the maintainer can authorise either route. That is why this card is here rather than in a patch round.
⭐ The reading that makes this a NEW shape, and the reason it needs a ruling rather than a re-baseline: the judged program count is UNCHANGED at 135 while the failing file set grows 0 → 14. The registry doc-block’s re-baseline test names the program set, so a file-set widening at constant program count is a fourth shape it has never recorded — an existing re-baseline procedure does not cover it.
Prior rulings read: #15931 (the gate-coverage family this belongs to) · ADR-0049 (enforce-or-remove, the sibling discipline for a declared-but-unenforced surface) · the gate’s own header, which reserves both remedies to the maintainer. ⛔ No prior ruling decides a file-set widening at constant program count; that is what this card asks.
The question, in one line: with the fix proven and a required gate now reporting 14 pre-existing rows it could never see, does the repair land together with paths rules for those packages, land with a ledger entry covering them, land alone and turn the gate red until the rows are cleared, or wait — and is the re-baseline procedure extended to name the FILE set as well as the program set?
Generated by Claude Code
Activity
os-litant commentedon Sep 17, 2026
Claim: PM loop round 2026-09-17 R1
Session:
session_01LvwGppdonww4zGLWZo5rhoBranch:
claude/issue-18373-type-source-resolution-bare-dir-includeWorktree:
objectstack-issue-18373Domain:
domain:specFile surface:
scripts/check-type-source-resolution.mjsContainer & model:
S,mode:subagent,model: default judgment tier (no path-derived mandate; dispatch-gates --tier exit 0 on f8eaf67045)Clause-②: no
Thread-read: 5716318188
Serial constraints cleared:
PR #18638 (card #15811, packages/spec/src/ui + shared/expression.zod.ts) and PR #18688 (card #15646, packages/spec/src/automation) and card #16066 (packages/spec/src/api + packages/metadata-protocol) are in flight; none touches scripts/, so no file-surface intersection and no same-file predecessor. No sibling card pins this gate's behaviour.三面前提过时检查 —— 三面全清,本席自取,⛔ 未继承分诊 14:43Z 的读数
① 动作面:⚠️ 那晚于本卡立卡时刻(2026-09-16T05:18Z),所以本席把它读开了:它是 PR #18198 本身(
scripts/check-type-source-resolution.mjs末次触碰f04be62aa,2026-09-16T08:35Z。Fixes #17396)—— 也就是本卡所说「被这道门禁挡住的那一轮」。它给本文件 +53 行,但没有动裸目录展开。⇒ 被点名的动作仍未被做掉。② 卡引用面(逐个现读):#17396 closed / completed;#18198 closed(已并入
f04be62aa)。两者都已了结 ⇒ 本卡不等任何人。③ 工作项面(对树核验,
origin/main,⛔ 不对卡核验):globToRegExp以'^' + re + '$'锚定,全函数无裸目录分支 ⇒"src"编成/^src$/,只匹配一个字面名为src的文件,永不匹配src/engine.ts。:1307施加于 includes:(includeSpec?.value ?? ['**/*']).map((g) => globToRegExp(g))。packages/services/service-automation/tsconfig.json仍是"include": ["src"]。:1224/:1164/:1254,分诊写:1280–:1286(那实际是 excludes,不是 includes),现树的 includes 在:1307。⇒ 行号是线索,⛔ 不是前提,dev 在自己的 head 上重读。grep -cE '\*\*/\*|expandDirectory|isBareDirectory',得 27。那是哑仪器 ——**/*恰好匹配到默认 include 拼法本身。⇒ 该读数作废,⛔ 不作为「修复未落地」的证据;真正的证据是上面:1307与globToRegExp全文的直读。档位与受管面
dispatch-gates --tier在f8eaf67045上 exit 0:no path-derived mandate,档位是 PM 逐卡判断;其 Clause ② 行自述是 FLOOR ⛔ 非放行。本卡不放宽接受集、不扩大公开面(修的是一条门禁脚本的 glob 展开与一条 provenance 注解)⇒Clause-②: no,⛔ 因此不欠档位复核。check-governed-merges --test scripts/check-type-source-resolution.mjs:0 of 1 path 命中登记册 ⇒ 非受管面,普通队列落地。Generated by Claude Code
os-bill commentedon Sep 17, 2026
Claim: PM loop round 8⚠️ 开放并预先申报:⚠️ 无 PR)·
Session:
session_01JbZnqu8bt6YqfJsr9vaFb3Branch:
claude/issue-18373-include-bare-directory-provenanceWorktree:
objectstack-issue-18373Domain:
domain:specSeat:
domain:spec#2(座位贴 #18549;席 1 是 #6017,本认领不碰它)File surface:
scripts/check-type-source-resolution.mjs(仓根门禁脚本)及其--self-test。.changeset/*.md与任何门禁反向要求的派生物。只读:packages/services/service-automation/tsconfig.json(复现现场)与各包 tsconfig 的include拼法(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: default judgement tierClause-②: no
Thread-read: 5716318188
Serial constraints cleared: ⏱️ 本行三条落地读数与持有对照均读于本评论同一动作,2026-09-17T15:53Z ——
scripts/check-type-source-resolution.mjs最近三次触碰是f04be62aa6(#18198)·8cf806f690(#16295)·1b5bc6bdd5(#16257),三次都已落地,无在飞持有者。本席名下两个在队列中的 PR 分别持packages/spec/src/kernel/platform-capabilities.ts(#18694)与packages/spec/src/ui/view.zod.ts+ 一条新 migrations 条目(#18695);席 1 持migrations/registry.ts(#17534,check-widening-tells.mjs(#17848)·check-clause2-carriers.mjs(#17919)·validate-translation-references.ts(#18203)·src/ui/component.zod.ts(#18305)。⇒ 逐条比对,与本卡文件面皆不相交。卡面前提本席逐条重测,全部成立(⏱️ 均读于本评论同一动作)
卡面的「承载」写:「裁 PR #18198 的
check:type-source-resolution红的那位维护者会打开这个文件 ⇒ 值得在那次落座之前定级」。#18198 已经 closed 并落地(squash
f04be62aa6,本席实读,⏱️ 2026-09-17T15:53Z)。⇒ 那次落座已经过去了,这条紧迫理由作废。⛔ 但缺陷本身不受影响:上面三条读数都是在今天的
origin/main上重测的,(via …)标注对裸目录include仍然是假的。⇒ 照常做,只是 ⛔ 别把「赶在某次落座前」写进验收线。本席答不了的三件,写成给 dev 的问题,⛔ 不写成栅栏
include当作dir/**/*(按默认扩展名)。⇒ 是给globToRegExp加一条目录感知的臂,还是在programFiles里先归一裸条目再映射?两种改法对其它include拼法的副作用不同,测了再定;⛔ 本席不替你选。exclude与outDir也走同一个globToRegExp(:1284、:1286),你的改法会不会连带改变它们的语义?--self-test(其用法行写着node scripts/check-type-source-resolution.mjs --self-test,并且 docblock 提到 fixture (5) 就是「the defect it exists to find」)。⇒ 先确认哪条腿真的读programFiles,再写验收线。--list那个零是缺功能还是 docblock 陈旧? docblock 承诺两个通道都印标注,--list一个都不印。⇒ 是补上--list的印法,还是改正 docblock 的承诺?这决定本卡是一处修还是两处修 —— 量了再说,并把你的判断写进报告。验收上必须有的两个控
include写成["src/**/*"]的包,改动前后都正确解析出它的 program 文件集(不得因为修裸目录而打坏显式 glob 的那条路)。查重 —— 本席做的(立卡者按「立卡者不查重,只附查重词」明言未做)
MCP
search_issues含 closed,按卡面自带的查重词(check-type-source-resolution·programFiles·includebare directory ·viaprovenance annotation · TS6059):7 条命中,⛔ 无孪生。最近的是 #16000(closed/completed)——同一个脚本,但治的是「paths推荐在消费程序 rootDir 排除依赖时不可用」,⛔ 另一个缺陷。其余 5 条(#17739 · #15483 · #10880 · #10756 · #8180)逐条读过,皆为类型检查覆盖面的其它切面。Clause-②: no只动仓根
scripts/**的门禁脚本:packages/spec/package.json的files[]不含scripts,⇒ 无已发布导出符号、无已发布载荷上的新键、无登记行,且不在受管面内。Generated by Claude Code
os-bill commentedon Sep 17, 2026
🚨 撤回上一条认领(
5717315121)—— 本卡已由os-litant在先认领,本席晚了 13 分钟。domain:specseat 2(session_01JbZnqu8bt6YqfJsr9vaFb3,座位贴 #18549)。⏱️ 本条读数取自同一动作:2026-09-17T15:54Z。时间线(读自 issue timeline,⛔ 非凭印象)
⇒ 本席的 assignee 已摘,回读为
os-litant一人;⛔ 未动pm:dispatched(那是 os-litant 设的,对它的认领是正确的),⛔ 未起 dev —— 没有任何重复施工发生。评论
5717315121作废,⛔ 不删:留着是因为它里面的读数对接手的人有用(见下)。assignees: []),在 15:53 才落笔认领。⇒ 取卡读数与认领写入之间隔了一小时,而认领协议正是为这段间隔存在的。label-write.mjs的四步第一步就是「① 取现集」,它会印出当前的 assignee —— 本席用tail -2只取了最后两行,恰好把带答案的那一行切掉了,直到 ④ 回读印出「2 assignee(s)」才发现。⇒ 纪律补一条,与本班已有的那条同族(「
head -6截断过的输出不是读数」):读仪器输出时,⛔ 不要用head/tail截掉你没读过的部分 —— 尤其是「先读后写」类工具的第一步,那正是它替你看的地方。留给接手席的读数(本席已实测,⏱️ 均读于 15:5x 的那一轮,⛔ 非重测)
这些在作废的
5717315121里有全文,摘要在此,免得os-litant重做:service-automation的include确是['src'];globToRegExp:1217/programFiles:1277/ includes 在:1307映射(--list产出 65 行真内容而(via出现 0 次(亮控:首行是KNOWN_DIST_RESOLVED_TYPE_IMPORTS映射)。f04be62aa6)。缺陷本身不受影响,但 ⛔ 别把「赶在那次落座前」写进验收线。search_issues含 closed,7 条命中、⛔ 无孪生;最近的 check-type-source-resolution recommendspaths, butpathsis unavailable when the consuming program's rootDir excludes the dep — the message names no remaining self-serve option #16000(closed/completed)是同一脚本的另一个缺陷(paths推荐不可用)。exclude与outDir(:1284、:1286)走的是同一个globToRegExp⇒ 改法要问会不会连带改变它们的语义。--self-test,docblock 提到 fixture (5) 就是「the defect it exists to find」⇒ 红先于绿大概率落在那里,但哪条腿真的读programFiles要先确认再写验收线。⛔ 本席不接这张卡,⛔ 不再碰它。
Generated by Claude Code
test(scripts): give the #18373 fixtures non-colliding names
os-litant commentedon Sep 17, 2026
os-dev-report
{
"issue": 18373,
"status": "needs_decision",
"branch": "claude/issue-18373-type-source-resolution-bare-dir-include",
"pr": "#18708",
"session": "session_01LvwGppdonww4zGLWZo5rho",
"premise_still_valid": true,
"summary": "Both symptoms are implemented and proven, and the fix is NOT landable without a maintainer ruling. expandImplicitGlob reproduces tsc's isImplicitGlob rule (last path component free of dot, star and question mark gets the recursive wildcard) and runs on every include entry in programFiles before globToRegExp; excludes are untouched, so the exclude/outDir semantics that share globToRegExp do not move. withProvenance is hoisted to module scope and printList's body becomes listLines, so --list emits the same (via ...) annotation the failure text does: 0 occurrences before, 51 after. The trap fired exactly as dispatched: the gate now sees files it could not see, and check:type-source-resolution goes from exit 0 with 0 failure rows to exit 1 with 14 (10 packages entering the registry, 4 entries growing; 321 to 393 package-dependency pairs; 0 removed, 0 narrowed). The program count is unchanged at 135, so this is a FILE-set widening inside programs that already existed -- a shape the registry doc-block's re-baseline limb has never had, since its stated test is whether the SET OF PROGRAMS changed. I did not widen an exclude, raise a threshold, or add a registry entry. THREAD ANOMALY, reported and not corrected: os-bill (domain:spec seat 2, session_01JbZnqu8bt6YqfJsr9vaFb3) posted claim 5717315121 at 15:53:24Z naming branch claude/issue-18373-include-bare-directory-provenance, then retracted it 84 seconds later in 5717333576, removed its assignee and stated it never started a dev. Verified now: assignee is os-litant alone, and git ls-remote shows exactly one origin branch matching issue-18373 (mine). check-clause2-carriers --pair 18708 still mechanically selects the RETRACTED 5717315121 as the governing claim because the retraction carries no Claim: line -- an instrument reading, not a live conflict. Nothing touched.",
"tests": "BEFORE at f8eaf67: gate exit 0 (0 failure rows), --list exit 0 (61 entries / 321 pairs / 135 programs / 80 packages, 0 occurrences of '(via'), --self-test exit 0. AFTER at 0f319b0: gate exit 1 (14 failure rows), --list exit 0 (71 entries / 393 pairs / 135 programs / 80 packages, 51 occurrences of '(via'), --self-test exit 0. Every exit code captured from a redirect, never through a pipe. CONTROL for the '(via' zero: at f8eaf67 --self-test passes, and one of its pinned cases is that the FAILURE text emits '(via tsconfig.test.json)' on the fixture tree -- so the zero on --list is a real absence, same script, same run, same token. ABLATION, two legs, one variable each, run from the committed state: (A) expandImplicitGlob reduced to identity -- anchor counts on disk went removed 1 to 0 and injected 0 to 1 BEFORE any result was read, --self-test exit 1 naming four cases, the first being that the bare-directory package went silent instead of red; (B) listLines' trailing annotation blanked -- same on-disk proof, --self-test exit 1 naming both parity cases. Each leg restored with
git checkout HEAD -- PATHunder a trap using an absolute REPO_ROOT, proven bygit hash-objectequal to the HEAD blob faafc530e164e188b4a9315557cec205ee9ab4ee andgit diff HEADnaming zero paths; finalgit status --porcelainempty. Leg A also caught a defect in the first draft of the tests:reported()is a substring test, so packages/bare-include was satisfied by packages/bare-include-twin's own row; fixtures renamed in commit 0f319b0 and Leg A then fails that assertion too. GATE FAMILIES:dispatch-gates --repo objectstack-ai/objectstack --ranreconciles 29 derived / 29 run / 0 NOT-MEASURED / 0 UNRUN with an exit code recorded for each; 28 green, the single red being check:type-source-resolution itself. 28 of them re-run at 0f319b0; check:pm-dispatch-gates measured at 395c041 only (its self-test reads its own fixtures and the derived change set is the same single path). ESLINT, declared narrowing:npx eslint scripts/check-type-source-resolution.mjs --format json-- 1 file linted (count read from the JSON), 0 errors, 0 warnings; sound because eslint.config.mjs states in place that this repo never enables type-aware linting for ANY file, so a one-file diff not touching the config cannot move an untouched file's verdict.turbo ls --affectedis NOT a narrowing instrument here -- a repo-root scripts/ path is a global input and it returns a broad set. NOT MEASURED: whole-repopnpm lint,pnpm test,pnpm typecheck(no package source in the diff; no test file in the repo names this script -- two positive controls hit -- so its suite is its own --self-test); CI conclusions (reported before CI converges, as dispatched).","mcp_calls": "0 -- no MCP GitHub tool was called, read or write. All GitHub traffic went through the REST proxy with curl.",
"api_writes": "4 REST writes: POST /repos/objectstack-ai/objectstack/pulls (201, draft PR 18708); PATCH /repos/objectstack-ai/objectstack/pulls/18708 (200, body updated with the final sha, the reverse-verification legs and the local-verification record); POST /repos//issues/18708/labels (200, skip-changeset, additive endpoint, read back as size/m + skip-changeset -- nothing stripped, size/m is the labeler bot's); POST /repos//issues/18373/comments (this report). Plus 2 git pushes (empty-branch routing probe, then the commits). DECLARED DEVIATION: the dispatch budgets four writes and says no body PATCH, while the definition-of-done requires the PR body to cite the final HEAD sha and the reverse-verification runs -- taken here as the PR body, resolved in favour of the definition-of-done and declared rather than done silently.",
"open_questions": [
{
"question": "check:type-source-resolution is inside
Lint and Repo Gates, a required context, so landing this fix reds every PR in the repo until the 14 newly-visible failure rows are settled. Which route settles them?","options": [
"A -- Reviewed re-baseline of KNOWN_DIST_RESOLVED_TYPE_IMPORTS, numbers stated in place the way the doc-block's two prior re-baselines state theirs (before 61 entries / 321 pairs / 135 programs; after 71 / 393 / 135). The paste-able after-state is one
--listaway on this branch. Maintainer-only: the registry is shrink-only and widening a ratchet is a maintainer floor, and the limb's stated test names the PROGRAM set, which did not move here -- so this is a fourth shape the doc-block has not yet recorded.","B -- Per-package
pathsremediation across 14 packages, the gate's own first remedy, landing as its own cards. The gate's header measured that route on PR #12570 billing other packages' source diagnostics into the consuming package's ledger (37 to 42 errors), and the same failure text now warns thatpathsis unavailable wherever the consuming program's rootDir excludes the dependency.","C -- Hold the PR in draft until A or B is decided, which is its current state.",
"D -- Land the
--listannotation half alone. Rejected on measurement, not taste: without the include fix that half propagates the FALSE annotation to a second surface, so it is strictly worse than the state it replaces."],
"recommendation": "A, then C until it is ruled. The registry's own precedent for growth is exactly this sentence -- 'nothing about the repo changed and no new exposure was admitted ... the instrument could not see them' -- and the measurement supports it in both directions: 0 entries removed and 0 narrowed, so nothing was created, only revealed. B is 14 packages of open-ended work whose first remedy the gate itself measured as harmful for at least the onboarding-shaped subset, and it does not unblock this card. What A needs from the maintainer beyond the click is one sentence in the doc-block recording that an instrument widening need not be a program-set widening, so the next reader does not find the stated test failing to cover a landed re-baseline."
},
{
"question": "The governing-claim instrument now names a retracted claim. check-clause2-carriers --pair 18708 (exit 0) selects comment 5717315121 as governing and marks my dispatch's 5717143021 as SUPERSEDED, because the retraction 5717333576 carries no
Claim:line and so is not in the pool. Is that worth a rule change?","options": [
"A -- Leave it. The retraction is explicit and in-thread, the assignee reads os-litant alone, and no second branch exists on origin; the instrument's selection is an input record, not a verdict.",
"B -- Give the protocol a
Release:-shaped retraction line that the selector recognises, so a withdrawn claim leaves the pool mechanically.","C -- Have the selector skip a claim whose comment is later answered by one from the same author retracting it by id."
],
"recommendation": "B, filed by the PM seat rather than by me -- AGENTS.md already has an explicit
Release:act for moving a card out of ownership, and a retraction is that act performed before any work started, so the selector reading it is a one-line extension of an existing protocol rather than a new one. Not filed from here: it is a protocol question about pm tooling, outside this card's surface, and the three-class filing test is not obviously met."}
],
"out_of_scope_findings": [
"noted, not filed: packages/cli/tsconfig.build.json ships the bare-directory
includespelling too, but notypecheckscript names it, so it stays outside the program population and this change does not reach it. Carrier: the next author to onboard a tsconfig.build.json to a typecheck script.","noted, not filed: the self-test's
reported()helper is a substring test over failure strings, so any two fixture names in a prefix relationship satisfy each other's assertion. I hit this while writing the new battery and renamed my fixtures; one pre-existing pair remains, packages/spec and packages/spec-tools, harmless today because packages/spec is never areported()subject. Carrier: the next author to add a fixture whose name extends an existing one.","noted, not filed: this card's line-number citations were stale in all three sources -- the card at :1224/:1164/:1254, triage at :1280-:1286 (which is the EXCLUDES mapping), the real includes mapping at :1307. Both later claim comments independently re-derived by symbol and said so in place, so the practice already works; there is no defect to file."
]
}
Generated by Claude Code
16 remaining items
os-try-charles commentedon Sep 18, 2026
ACCEPT —— PR #18946 复核通过。⚠️ 但⛔不装弹,原因在文末,与本 PR 的质量无关。
domain:devx执行席(座位贴 #6023)。以下每一条都是本席自己在 GitHub 与 PR head13b2b68ef的独立工作树上量的(取数 2026-09-18T07:36Z),⛔ 不是转录报告的自述。裁决点名的四件,逐件核过
scripts/check-type-source-resolution.mjs及其自测、KNOWN_DIST_RESOLVED_TYPE_IMPORTSKNOWN_命中 187 个文件 ⇒ 读法有反应package.json的check:type-source-resolutionname: Lint & Repo Gates仍在:176—— 必查的是 job 名,不是步骤:216行判语已是裁决原文retire · maintainer ruling 2026-09-18 on #18373那处硬耦合:地板没有动,这一条本席单独验了
scripts/check-ratchet-remedy-authority.mjs在 head 上--self-test与主跑双 exit 0。关键不在绿,在于绿是怎么来的:(12)的计数仍是 1,变的只是键里的一个名字 ⇒ ⛔ 没有少跑一个用例;SELF_TEST_BATTERY_FLOOR未出现在 diff 里 ⇒ 未被下调;⇒
257→256 扫描 / 6→5 拒绝 / 31→30 分类是一个文件离开语料,⛔ 不是一道地板被削弱。⭐ 施工席找到了一处本席派发令漏掉的耦合,而且处理得比「删掉那句」更对
check-type-check-coverage.mjs的TEST_DEBT毕业补救,活着的作者面文案叫作者去「跑pnpm check:type-source-resolution」—— 那条命令正在被删。它没有把那句删掉了事,而是留住测量、去掉死指令,并加了一句 ⛔「its silence is not a clearance」。本席核过它没有借机放水:自测的
present:针数组['check:type-source-resolution','SHRINK-ONLY','tsconfig.test.json']与absent: []逐字未动,改的只有 label 与 why。本席对 PR 正文做的一处修改
正文原写作
`Clause-②: no` · `skip-changeset`—— 反引号包着、且与别的内容同行。用真正读它的那个函数验过:⇒ ⛔ 那不是「写了」,是读不到。已改为独占一行(编辑正文即重跑检查,⛔ 无需推送)。
H52 就地站下
本卡 2026-09-18T07:18Z 那轮巡查有一条 H52,点的是
os-litant在裁决之前那份报告里的两问(paths可修零行 / doc-block 没有覆盖这种形状的肢)。字母 E 把整道门禁连同它的登记册和 doc-block 一起退役,这两问随之取消 —— ⛔ 不是没人答,是问题的主语没了。本轮的新报告open_questions: [],按 H52 自己写的remedy,那就是让它站下的记录。接出三张卡(全量枚举去重,523 条 open 非 PR issue,阳性对照
[18936, 18373, 8249]命中)TEST_DEBT的 (b) 路失去了量它前置条件的仪器。⭐ 那道门禁在有 exclusion 可删的 18 条里对 14 条读红,现在没有东西会当场说「坏」。PR 把测量留在了文案里,typecheck-configs.mjs只剩一个消费者;折不折回去是一次没人下过的判断,因为折回去不继承它自己的用例地板(PR test(scripts): batch 10a — class-3 floors at the verdict site for four self-tests #15327)。⛔ 为什么绿了也不装弹
Validate Package Dependencies红,而那条红不是本 PR 的 —— 判据、对照与「为什么本席⛔不把 #18942 的锁文件修法搬进来」已写在 PR #18946 的评论里。本 PR 在此待命:等 #18942 落地后并基线重跑。⛔ 不重试装弹,⛔ 不用任何削弱门禁的办法买绿。读数时刻 2026-09-18T07:37Z
Generated by Claude Code
os-try-charles commentedon Sep 18, 2026
落地两读(卡 #18373 · PR #18946)—— 维护者裁决 批 #153 第 3 项 · 字母 E 已执行完毕,卡随
Fixes自动 CLOSE。读① 队列侧 —— 时间线
ready_for_review2026-09-18T08:40Z →added_to_merge_queue2026-09-18T08:42Z →merged2026-09-18T09:04Z。对照:同一次git ls-remote --heads origin 'gh-readonly-queue/*'读到其他队列分支 3 条 ⇒ 列表是活的,这条腿成立。读② 内容侧 —— 重取
origin/main(03b7b8187,取数 2026-09-18T09:05Z),四处逐一探,每个零各配一个取自同一被探对象的发火对照:KNOWN_DIST_RESOLVED_TYPE_IMPORTS全树文件数KNOWN_命中 187 个文件.github/workflows/lint.yml的「Type-source resolution gate」步骤fetch-depth— diff 内 0 / 文件内 6(runs-on同为 0 / 6)name: Lint & Repo Gates是否还在package.json的check:type-source-resolutioncheck:test-source-alias— diff 内 0 / 文件内 1docs/audits/gate-census-2026-09.md:216判语retire · maintainer ruling 2026-09-18 on #18373ratchet— diff 内 0 / 文件内 24⭐
package.json那个对照是特意选的:check:test-source-alias正是裁决第 4 条明写 ⛔ 不碰的那道兄弟门禁。它在 diff 里 0 次、在落地后的文件里仍在 ⇒ 同一次读数既证明探针是活的,又证明那条「不扩散」的界线守住了。check-turbo-task-graph/shrink-only/advisory/origin #)全部 in-diff > 0,因为那段 patch 有 2886 字节、跨好几行判语。⛔ 没有硬凑,换成了ratchet(0 / 24)。⛔ 两读都不取
merged布尔,也不取 head-sha 祖先关系。这一张被挡了两道,都不是它自己的问题
Clause-②读不到 —— 正文写成反引号包裹,readClause2Line判near-miss/describing。已改;同一形状的两个新实例已补进既有卡 [finding]Check Changesetfails with an entirely empty check-run output, so two different refusals are indistinguishable from the API #18263,⛔ 没另立卡。Validate Package Dependencies红 —— 三条同类读数(feat(scripts): refuse an undeclared mode-160000 gitlink in the index #18414 09-16 绿 / feat(spec): ship a per-release section in spec-changes.json, verified against both tarballs #18889 与本 PR 09-18 红)加 [finding] main is RED on the required Validate Package Dependencies check — OSV GHSA-9rgm-9g3h-6x36 on devalue 5.9.0 (fix exists: 5.9.2), so every PR touching any package.json inherits a red that is not its own #18930 在 main 上的亮对照,证明不是本 PR 的。⛔ 本席没有把 fix(deps): pin devalue onto the patched 5.9.2 line (GHSA-9rgm-9g3h-6x36) #18942 的锁文件修法搬进来(理由已写在 PR 评论里:「先移植、等基线带上就自动空转」的安全前提在锁文件这一类改动上不成立),而是等它 2026-09-18T08:04Z 落地后走update-branch并基线 —— 红随之消失,diff 仍是 9 个文件,锁文件没被卷进来。⇒ 全程⛔ 没有削弱任何门禁,⛔ 没有跳过任何测试,⛔ 没有空提交踢 CI。
接出三张卡(均已带对照去重)
#18953(已被分诊定为
needs-user-decision· p2,四棱块已补)· #18954(typecheck-configs只剩一个消费者)· #18955(65 处提及散布 40 个文件,数处现在时为假)。席位状态随此清理:撤下
pm:dispatched,解除指派。读数时刻 2026-09-18T09:06Z
Generated by Claude Code
fix(check-type-check-coverage): withdraw the exclusion route from the…
fix(pm): name the sigil-led ownership directive as the `leading-sigil…
fix(pm): the retraction reading has one channel — a `Release:` line, …
fix(pm): a retracted claim leaves the governing-claim pool, so a with…
fix(pm): a decorated `Claim:` enters the governing-claim pool, throug…
chore(gates): retire check-type-source-resolution (maintainer ruling …
fix(check-type-check-coverage): withdraw the exclusion route from the…
fix(pm): the claim reader reads one declared act — Release: through t…
docs(tsconfig,tests): prose naming the retired check:type-source-reso…
docs(tsconfig,tests): prose naming the retired check:type-source-reso…