Repository navigation
Commit 9b0de7d
docs(tsconfig,tests): prose naming the retired check:type-source-resolution reads in the past tense (#20996)
Fixes #18955
Clause-②: no
`skip-changeset`: measured, not asserted. Nothing this diff touches is
published (see Verification).
Comments, plus one sentence of one test failure message. Prose that
names the retired `check:type-source-resolution` gate in the present
tense ("refuses", "requires", "is the gate", "reports", "states", "is
declared in its registry") now says the gate did those things until it
was retired on 2026-09-18 (#18373). Where a tsconfig `paths` rule's
reason pointed at the gate, the comment now says plainly that no gate
checks the rule. Dated measurements and records of why something was
written are left exactly as they were. The one executable change is that
sentence: the `expect()` failure message in
`packages/cli/src/commands/child-env-source-loader.pin.test.ts`, which
the claim's file surface admitted in comment 5922590244. No other
executable line changes, and no compiler option changes: every edited
tsconfig parses to a config identical to the base, 6 of the 7 edited
`.ts`/`.js` files print to an identical comment-stripped AST, and the
seventh differs only in two string-literal operands of that one message.
## What replaced the gate: nothing that checks these rules
The retirement ruling (#18373, comment 5725045904, item 3) names what
still covers the *risk*, verbatim: "turbo's `^build` ordering for CI;
the content stamp (#16529, batch #151 item 1) for the linked-sibling
case; editor staleness on exception packages is the state ~half of the
programs were already in." None of those reads or requires a tsconfig
`paths` rule. I checked this myself: across `scripts/**`, no script
reads `compilerOptions.paths`. The only readers of `compilerOptions` are
`check-type-check-coverage.mjs` (which reads `include` / `files` /
`typeRoots` / `rootDir`), test fixtures in `check-dev-prereqs.mjs`, and
scripts that write their own configs.
So each rewritten sentence is either past tense ("refused ... until it
was retired") or a true present-tense statement ("no gate checks this
rule now"). No sentence names a guard that does not exist. The `paths`
rules themselves are unchanged and still do what their comments say,
which is to make `tsc` grade against source rather than the last build.
## The rule applied, per line
The card's own criterion, verbatim: 「**现在时的断言**(「这道门禁拒绝
X」)现在为假,该修;**历史记录**(「当年因为 X 才这么写」)不是漂移,⛔ 不该动。这两类在同一个注释块里往往挨着,需要逐行判,⛔
不能整批替换。」
How I applied it:
- **History, left unchanged:** a clause inside a frame that dates it or
declares itself a record. Examples of such frames: a sha, a date,
"measured before this file was written", "this paragraph is the record
of why". Narrative present tense inside such a frame is kept as written.
- **Present-tense claim, repaired:** a clause outside any such frame
that states what the gate does, requires or refuses. Also repaired: a
clause that points the reader at the gate, its file, its registry or its
header as a live authority. That includes the verbless `(pnpm
check:type-source-resolution)` pointers, which present a command that no
longer exists as the check.
The repair changes tense and adds the retirement. It never deletes the
history.
## Measurement
The count is wrap-flattened, not single-line. Each tracked file was read
whole, and a mention was matched across a line break plus a comment
marker between any two segments of the name. Readings are at
`origin/main` `05be35259`:
| class | mentions | files |
|---|---|---|
| `packages/**/tsconfig*.json` | 27 | 18 |
| `examples/*/tsconfig.json` | 3 | 3 |
| test docblocks + `packages/cli/bin/run-dev.js` | 8 | 7 |
| `scripts/**` | 19 | 6 |
| `docs/**` | 3 | 2 |
| `packages/*/CHANGELOG.md` (out of surface) | 5 | 5 |
| **total** | **65** | **41** |
- Wrapped mentions: **0**. So the single-line `git grep` (64 lines / 41
files; one census line carries two mentions) agrees with the flattened
count.
- The card's filing count was 65 / 40. The extra file is one more
carrier that landed after filing; the mention total is unchanged.
- I also searched for other spellings (`type-source-resolution` without
the `check` prefix, and `type source resolution` in any case): no hits
outside the two spellings above.
A control for the repair: before vs after, a single-line scan for the
gate name followed by a present-tense verb
(`refuses|requires|reports|reads|states|is the gate|reds`) reads **19**
lines at `05be35259` and **0** at HEAD.
## Every site, with its verdict
Line numbers are at `05be35259`. "→" gives the new wording in short.
### Rewritten: 35 named sites
| site | was | now |
|---|---|---|
| `examples/app-crm/tsconfig.json:28` | "`pnpm
check:type-source-resolution` is the gate; it wants the `paths` rule" |
"was the gate, and it wanted ... until it was retired on 2026-09-18
(#18373); no gate checks this rule now" |
| `examples/app-multi-package/tsconfig.json:41` | same | same |
| `examples/app-showcase/tsconfig.json:28` | same | same |
| `packages/cli/tsconfig.test.json:136` | "refuses. That gate's registry
is shrink-only ... `paths` is" | "refused until it was retired ...;
registry was shrink-only ... `paths` was ... No gate checks this rule
now." |
| `packages/client/tsconfig.json:15` | "refuses exactly that, and its
header states why the dangerous case is a typecheck that PASSES" |
"refused exactly that, the dangerous case being a typecheck that PASSES
against a stale `dist`, until it was retired ...; no gate checks this
rule now" |
| `packages/client/tsconfig.json:46` | "reports as a NEW dist-resolved
type import" | "the since-retired ... reported as" |
| `packages/core/tsconfig.json:20` | "refuses exactly that" | "refused
exactly that until it was retired ...; no gate checks this rule now" |
| `packages/core/tsconfig.test.json:52` | "refuses" | "refused until it
was retired ..." |
| `packages/mcp/tsconfig.test.json:92` | "the exposure is declared in
`scripts/check-type-source-resolution.mjs`'s shrink-only registry ...
stays visible. That file's #12511 doc-block has the numbers." | "was
declared ... stayed visible until that gate and its registry were
retired ...; the doc-block, which had the numbers, is readable at
`03b7b8187^`" |
| `packages/platform-objects/tsconfig.test.json:83` | same shape | same
shape |
| `packages/plugins/organizations/tsconfig.json:19` | "refuses (its
header states why ...)" | "refused ... until it was retired ...; no gate
checks this rule now" |
| `packages/plugins/plugin-approvals/tsconfig.json:18` | "(`pnpm
check:type-source-resolution` — same fix ...)" | "(asked for by
`check:type-source-resolution`, retired on 2026-09-18 — #18373 — and the
same fix ...)" |
| `packages/plugins/plugin-approvals/tsconfig.json:28` | "(`pnpm
check:type-source-resolution`)" | "(reported by the since-retired
`check:type-source-resolution`)" |
| `packages/plugins/plugin-audit/tsconfig.json:19` | as approvals `:18`
| as approvals `:18` |
| `packages/plugins/plugin-audit/tsconfig.json:29`, `:35`, `:45` |
"(`pnpm check:type-source-resolution`)" | "(reported by the
since-retired ...)" |
| `packages/plugins/plugin-auth/tsconfig.json:24` | "refuses (its header
states why ...)" | "refused ... until it was retired ...; no gate checks
this rule now" |
| `packages/plugins/plugin-auth/tsconfig.json:40` | "which
`check:type-source-resolution` refuses" | "which the since-retired ...
refused" |
| `packages/plugins/plugin-security/tsconfig.json:22` | "refuses exactly
that; its header states why ..." | "refused exactly that ... until it
was retired ...; no gate checks this rule now" |
| `packages/plugins/plugin-security/tsconfig.test.json:57` |
"`check:type-source-resolution`'s header states why ..." | "the
dangerous case is the typecheck that PASSES, as the header of ... argued
until that gate was retired ..." |
| `packages/plugins/plugin-security/tsconfig.test.json:65` | "are
declared instead, in ...'s registry" | "were declared instead ... until
that gate and its registry were retired (readable at `03b7b8187^`)" |
| `packages/qa/dogfood/tsconfig.json:25` | "refuses" | "refused until it
was retired ...; no gate checks this rule now" |
| `packages/qa/dogfood/tsconfig.json:44` | "reads specifiers textually
... so it counts that one" | "The since-retired ... read ... so it
counted that one" |
| `packages/rest/tsconfig.json:25` | as client `:15` | as client `:15` |
| `packages/triggers/trigger-schedule/tsconfig.json:28` | "(`pnpm
check:type-source-resolution`)" | "(asked for by ..., retired on
2026-09-18 — #18373; no gate checks this rule now)" |
| `packages/verify/tsconfig.json:19` | "refuses (its registry is
shrink-only; widening it is not the fix)" | "refused (its registry was
shrink-only; widening it was not the fix) until it was retired ...; no
gate checks this rule now" |
| `packages/cli/bin/run-dev.js:248` | "(`check:type-source-resolution`
requires them)" | "required them until it was retired on 2026-09-18,
#18373" |
| `packages/cli/test/run-dev-cwd-tsconfig-redirect.e2e.test.ts:29` |
same | same |
| `packages/cli/src/commands/child-env-source-loader.pin.test.ts:34` |
"those are mandated by ... The two gates cover ... is covered by
neither" | "those were mandated by ... (retired on 2026-09-18 — #18373)
... covered ... was covered by neither" |
| `packages/cli/src/commands/child-env-source-loader.pin.test.ts:288`
(the `expect()` failure message; surface amended in comment 5922590244)
| "Neither check:type-source-resolution (types axis) nor
check:test-source-alias (vitest axis) sees this; they were both green
while it was broken." | "Neither check:type-source-resolution (types
axis, retired 2026-09-18) nor check:test-source-alias (vitest axis) saw
this; they were both green while it was broken." The assertion is
unchanged. |
| `packages/cli/test/published-subpath-hook-body.pin.test.ts:81` |
"which `check:type-source-resolution` refuses" | "refused until it was
retired ..." |
| `packages/qa/dogfood/test/date-bucket-parity-turso.test.ts:61` | "each
is enforced by its own gate: ... (`check:test-source-alias`) and ...
(`check:type-source-resolution`)" | the alias is "enforced by
`check:test-source-alias`"; the `paths` rule is one
"`check:type-source-resolution` enforced until it was retired ... no
gate enforces that one now" |
| `packages/runtime/src/discovery-realtime-channel.pin.test.ts:42` |
"three of this repo's own ratchets refuse that ...: ... reds ...; its
registry is SHRINK-ONLY ..." | "when this was written three ... refused
...; ... redded ...; its registry was ...", plus "That gate, its
registry and its `paths` mandate were retired ...; this paragraph
records why the stand-in was chosen." |
|
`packages/services/service-automation/src/builtin/notify-zero-delivery-visibility.integration.test.ts:45`
| "is outside ... registry, and ... states that widening it is not the
fix ... Its own remedy ... is" | "was outside ... stated ... was ...
was", plus "That gate and its registry were retired ...; this bullet
records why the arm below was built." |
### Rewritten: sentences in the same comment blocks that point at the
gate without naming it
- `packages/triggers/trigger-schedule/tsconfig.json:17-18`: "the
precondition the gate's failure text names" → "named".
- `packages/triggers/trigger-schedule/tsconfig.json:34-38`: "NOT an
entry in that gate's registry. Widening it is maintainer-only ... its
docblock says ... `paths` is the self-serve route" → past tense, plus
"The registry, that row included, went with the gate." I confirmed that
row existed at `03b7b8187^` (`'@objectstack/trigger-schedule'` entry
naming `@objectstack/types`).
- `packages/triggers/trigger-record-change/tsconfig.test.json:31-34`:
"The remediation it actually asks for ... is a separate card ... this
file does not pre-empt it" → past tense, plus "no gate asks for that
remediation now".
-
`packages/services/service-automation/src/builtin/notify-zero-delivery-visibility.integration.test.ts:180-182`:
"that package is outside this package's shrink-only type-source
registry" → "was outside ..., which has since been retired with its
gate".
### Left unchanged: 30 named sites
| site | why |
|---|---|
| `packages/qa/dogfood/tsconfig.json:56` | "this time caught by
`check:type-source-resolution`" records which gate caught the hazard at
the time. History. |
| `packages/triggers/trigger-record-change/tsconfig.test.json:24` (with
`:26-29`) | Sits inside the bullet "both measured before this file was
written". A dated measurement; its narrative present tense stays. |
| `packages/verify/tsconfig.test.json:30` | "measured under a
trap-restored mutation at 1d67130", and the next sentence already
records the retirement. |
| `scripts/check-ratchet-remedy-authority.mjs:662` | A record of a
measured-and-rejected widening ("turned ... CORRECT remedy into a
reported violation"). |
| `scripts/check-ratchet-remedy-authority.mjs:912` | Already past tense:
the retirement PR recorded the retirement here. |
| `scripts/check-type-check-coverage.mjs:538`, `:5616` | Already past
tense: the retirement PR recorded the retirement here. |
| `scripts/check-type-check-coverage.mjs:936` | "MEASURED as a red
`main`". The paragraph closes "this paragraph is the record of why". |
| `scripts/check-type-check-coverage.mjs:991` | "SINCE MEASURED ... at
e47d5ef". |
| `scripts/check-type-check-coverage.mjs:1107` | Re-measured 2026-09-04,
and the paragraph says "this record is history". |
| `scripts/check-type-check-coverage.mjs:4435` | Dated analysis "as they
stand at e47d5ef" of a sentence since withdrawn. |
| `scripts/check-type-check-coverage.mjs:4466` | Records the retirement.
|
| `scripts/check-type-check-coverage.mjs:6399` | Executable, and correct
as code: a self-test `absent` needle asserting the retired name stays
OUT of a message. |
| `scripts/check-undeclared-dep-imports.mjs:43`,
`scripts/typecheck-configs.mjs:19`, `:210`,
`scripts/workspace-enumerator.mjs:66` | Already past tense: the
retirement PR repaired these. |
| `scripts/pm/dispatch-gates.mjs:7327`, `:7432`, `:7433`, `:7444`,
`:7893` | Recorded measurements in docblocks (pair counts, watch-hint
reach). |
| `docs/audits/2026-09-self-test-shape-census.md:341` (2 mentions) | A
probe-result row pinned to the census's tree; the retirement PR
deliberately left it. |
| `docs/audits/gate-census-2026-09.md:216` | The verdict already reads
`retire · maintainer ruling 2026-09-18 on #18373`. |
| `packages/cli/CHANGELOG.md:10411`,
`packages/drivers/driver-mongodb/CHANGELOG.md:595`,
`packages/services/service-automation/CHANGELOG.md:3494`,
`packages/services/service-knowledge/CHANGELOG.md:766`,
`packages/services/service-storage/CHANGELOG.md:659` | Release-owned and
outside this card's surface. They are also correct records of what those
releases did. |
Tally: 35 rewritten + 30 unchanged = 65.
## The one executable string, rewritten in the patch round
`packages/cli/src/commands/child-env-source-loader.pin.test.ts:288`
(lines 289-290 after this PR's docblock edit) is the same defect class
as this card. Its `expect()` failure message said the retired gate
"sees" what it cannot. The claim's file surface was amended to admit
exactly that message (comment 5922590244), and the message now reads
"(types axis, retired 2026-09-18) ... saw this". The sentence spans two
adjacent string-literal operands of the one message; both operands
changed and nothing else did. `Fixes #18955` now holds for every site.
## Verification (final commit `850ae40280`; the full gate set ran at
`2e3315f7b0` and again at `850ae40280`)
**The diff is comment-only apart from that one message sentence, checked
mechanically:**
- 20 / 20 edited `tsconfig*.json` files parse with TypeScript's own
`parseConfigFileTextToJson` to a config `JSON.stringify`-identical to
`05be35259`. Negative control: an unclosed block comment does set the
parse error.
- 6 / 7 edited `.ts` / `.js` files print to an identical AST under
`createPrinter({ removeComments: true })` at base and HEAD, with zero
parse diagnostics. Controls: a one-literal code change is detected as
different, and a comment-only change prints equal.
- The seventh, `child-env-source-loader.pin.test.ts`, has an identical
code skeleton at base and HEAD once string literals are blanked and
comments removed, with 87 literals on both sides. Exactly 2 literals
differ, and both are operands of the second argument of one `expect()`
call. Controls: an edit to `toEqual([])`, and an edit to the `it()`
title literal, are each refused by the same check.
- 1 parent e161ad3 commit 9b0de7d
27 files changed
Lines changed: 137 additions & 101 deletions
File tree
- examples
- app-crm
- app-multi-package
- app-showcase
- packages
- client
- cli
- bin
- src/commands
- test
- core
- mcp
- platform-objects
- plugins
- organizations
- plugin-approvals
- plugin-audit
- plugin-auth
- plugin-security
- qa/dogfood
- test
- rest
- runtime/src
- services/service-automation/src/builtin
- triggers
- trigger-record-change
- trigger-schedule
- verify
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
42 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
249 | | - | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
250 | 251 | | |
251 | 252 | | |
252 | 253 | | |
| |||
Lines changed: 9 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
285 | 286 | | |
286 | 287 | | |
287 | 288 | | |
288 | | - | |
289 | | - | |
| 289 | + | |
| 290 | + | |
290 | 291 | | |
291 | 292 | | |
292 | 293 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
81 | | - | |
82 | | - | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
83 | 84 | | |
84 | 85 | | |
85 | 86 | | |
| |||
Lines changed: 3 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
30 | | - | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
136 | | - | |
137 | | - | |
138 | | - | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
139 | 140 | | |
140 | 141 | | |
141 | 142 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
46 | | - | |
47 | | - | |
| 47 | + | |
| 48 | + | |
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
0 commit comments