Uh oh!
There was an error while loading. Please reload this page.
docs(tooling): record the fifth casing-gate recognizer, and who owns a runtime-limbed chain - #10898
Merged
os-zhuang merged 1 commit intoAug 21, 2026
Conversation
… runtime-limbed chain `scripts/check-dispatcher-error-vocabulary.mjs` documents its delegation contract with `check:error-code-casing` by enumerating that gate's recognizers. PR #10760 added a fifth — the OUR-DEFAULT slot of a `||`/`??` fallback chain — and the enumerations were left short by one. Comment-only. Both enumerations now carry the fifth spelling as the owning gate spells it, and the #9568 ALL-OR-NOTHING bound now records who owns a runtime-limbed chain, split by position because the two answers differ: delegated to `check:error-code-casing` at the stamp site, owned by nobody in a local's initializer (filed as #10897). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_c970724d-303c-5614-9d20-a3f92205cfad
os-zhuang
marked this pull request as ready for review
August 21, 2026 16:32
Uh oh!
There was an error while loading. Please reload this page.
os-zhuang
deleted the
claude/issue-10762-delegation-map-fallback-spelling
branch
August 21, 2026 16:47
Contributor
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32503472459 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
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 freeto 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#10762. Verified at
278c9c6856; baseorigin/main=9faa9bc51d.One file, comment-only:
scripts/check-dispatcher-error-vocabulary.mjs. No changeset — CI-internal gate tooling, publishes nothing (skip-changeset, bypr-automation.yml's own prescription: "this PR edits a CI-internal script" is the textbook case).The card's falsification test, run first and last
The card's acceptance criterion is that nothing moves. Captured before the edit and again after, redirect-then-capture so no pipe eats the exit code:
diffof the captured before/after files is empty for both — not "the same numbers", byte-identical output. No self-test case moved, so the delegation is what the comments claim.Comment-only proven two ways rather than asserted: no added or removed line in the diff is a non-comment line, and the file's non-comment byte stream is md5-identical to
HEAD(2e9cfa29e4d03764361b277839eff427both sides).The enumerations were TWO, not three
The card says three. Swept for them rather than trusting the count —
QUOTED,code === 'x',code?: 'x',.code = 'x', and everydelegat/ownsmention in the file. There are exactly two verbatim enumerations of that gate's recognizers:[#9460]declared boundkeep()— the card calls itisMine; the function is namedkeepBoth now carry the fifth. Nothing else in the file enumerates the recognizer set: the neighbouring delegation notes (628, 1323) speak about anchoring on the token
codeand stay accurate after #10760, since the new pattern anchors on the token too.The fifth spelling, in the owning gate's words
Read off
check-error-code-casing.mjsrather than from the card, per the card's own instruction that the owning gate is the truth:So it is written into both enumerations as
code: parsed?.code || 'x'/.code = e?.code ?? 'x'— both positions and both operators, which the card's one-form paraphrase (code: parsed?.code || 'x') leaves half-stated.One discrepancy with the card, resolved in the gates' favour
The card asks for a clause saying a runtime-limbed chain "reduces to nothing here and is therefore delegated, not dropped — owned by
check:error-code-casingrather than by nobody". Measured against both gates' own exported entry points (findViolations,deriveSites), that is true at one position and false at the other, so writing it unqualified would install into the delegation map the exact "two gates, each assuming the other" error the map exists to prevent:check:error-code-casing{ code: p?.code || 'stamp_lower_failed' }fallback)err.code = p?.code || 'stamp_lower_failed'fallback)const code = p?.code || 'local_lower_failed'const code = flag ? 'TERN_A' : 'TERN_B'assignconst)The control row is what makes the zeros readable rather than a broken probe: this gate does reduce and report a local initializer when every limb is a literal (#9568), and rows 1–2 are the matching live control on the casing side.
Two facts follow, and the clause now states both:
objlit/assignneed the quote immediately, so this gate never had a shape there — nothing was "reduced to nothing". Since fix(tooling): check-error-code-casing — reach our default through an ||/?? fallback chain, and stop printing an unqualified clean sweep #10760 that literal is read by the casing gate, so the shape is genuinely delegated. This is the position the two live SSO codes inregister-sso-provider.tsoccupy (checked on disk:{ code: parsed?.code || 'request_domain_verification_failed', … }, no local, noresolveConstant), so the card's exemplar belongs to this row, not to the all-or-nothing rule it is filed under.fallbackpattern anchors oncode:/code?:/.code =, soconst code =is out of its reach too. A typed local does not escape either:const code: string =puts an=in the gap class, which the class refuses.The second row is a behaviour question in a different gate, so it is not addressed here: filed unassigned as #10897, with the measurements above and a tree sweep putting its live extent at 0 (1885 non-test files under
packages/, comments masked with the gates' ownmaskComments). Like this card, it understates coverage and has no victim today.The edit, proven on disk
Anchored marker counts, each asserted to hit exactly once before writing (the script aborts on any other count rather than making a partial write) and re-counted after:
keep()enumeration anchor[#10760] code: parsed?.code || 'x'[#10762] WHO owns a runtime-limbed chainGates
node scripts/pm/dispatch-gates.mjswith no paths, at278c9c6856, clean tree — it derived the change set from the merge base as 1 path and named six families. All six run green:check:dispatcher-error-vocabulary8 shapes + 102 assertions OK·OK — 21 unregistered code-stamping site(s), all classifiedcheck:cross-package-test-inputsAll 104 self-test cases passed.·OK: 13 package(s) read outside themselves, all declaredcheck:entry-guard129 scripts/ file(s) — every entry guard goes through invoked-as.mjs; 87 export bindings, 77 of them inert on importcheck:parse-guardcheck:nul-bytesOK (scanned 6298 text file(s) -- … no raw ASCII control bytes)check-ci-filter-parity.mjsOK: all 82 declared cross-package glob(s) (71 unique) are coveredDeclared narrowing, so the report is not read as more than it is: no
pnpm installwas run in this worktree. Both gates this card concerns import only node builtins plus two local.mjs, so they need none. The one derived family that does need a dependency (check-ci-filter-paritywantsyaml) was run against a single temporary symlink to an already-resolvedyaml@2.9.0, removed immediately after; a broken link would have errored loudly rather than passing quietly, so its green is a real run.Generated by Claude Code
Generated by Claude Code