Uh oh!
There was an error while loading. Please reload this page.
fix(devx): enumerate and triage the invisible half of the bare-root species - #10906
Merged
Merged
Conversation
…pecies A gate whose population literal carries no separator builds no watch hint at all -- `looksPathy` drops it before `hintCovers` is consulted -- so it is unnameable by any dispatch brief and leaves no residue saying so. That half is invisible to the derivation AND to ESCAPABLE_LITERAL_LEDGER, which #10890's comment says in the source and names #10840 for. Adds scripts/pm/bare-root-worklist.mjs: the sweep, derived at runtime from the derivation's own exported predicates, plus one recorded verdict per row. Its self-test pins the triage to the tree in both directions -- a verdict cannot outlive its row, and a new row cannot land unjudged -- and proves the recogniser both speaks and discriminates. Lands three per-gate declarations, the only rows clearing precision >= 85% and blast radius <= 300 files: check:driver-conformance packages/drivers/** 259/291 (89%) check:skill-frame-sync skills/** 48/50 (96%) check:skill-compatibility skills/** 49/50 (98%) Each pins the coupling in its own self-test, derived from the population constant rather than re-spelled, and pins its REFUSALS by name too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt
…visible-bare-root-worklist
This was referenced Aug 21, 2026
os-zhuang
marked this pull request as ready for review
August 22, 2026 03:56
Contributor
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32550935031 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Uh oh!
There was an error while loading. Please reload this page.
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#10840
Observation-class card, and the deliverable is the worklist and its triage — not 33 fixes. The card's own words: "What is missing is the worklist" and "this wants triage as a batch, not 33 self-dispatched one-liners."
Every number on the card was stale. Re-measured on this tree.
The card was measured on
a7ea3289eb;scripts/pm/dispatch-gates.mjshas moved three times since (#10839, #10873, #10890).a7ea3289eb)The counts held up; the family spread of the wide sweep did not (52 to 44). One methodological correction accounts for most of the drift, and it matters: invisibility is decided by the extractor itself, by putting each literal back through
extractWatchHintsalone in a module body and requiring it to build nothing — not by a hand-copiedlooksPathy. The dotted top-level roots (.claude,.changeset,.github) clearlooksPathyon its second branch and were never in this species; a copied separator test sweeps them in and inflates both counts.Non-vacuity check on the probe: it independently recovers all four landed precedents as already-covered —
check:role-word skills(#10114),check:examples-live-imports examples(#10314), andcheck:doc-authoring/check:doc-formula-expressions(#10662 / #10687).The triage split, measured
The card predicted the
join(...)-path-component kind would dominate. That is true of the wide sweep and false of the restricted one — which is the empirical justification for the constant-name restriction the card was unsure about. Of the 32 undeclared triples, 29 name a root the gate really does walk; only 3 are literals that are merely path components.But precision is not what decides the remedy. Two structural facts do, and between them they account for 30 of the 32 rows:
collapseHintstrips globs, sopackages/spec/src/data/*-conformance.tscollapses to a path naming nothing. A gate whose population is a file-KIND or FILENAME filter has no honest declaration available — the only spellable claim is the whole subtree, false for most of what it would name. Measured examples: workspace manifests only, 73 of 4903 (1.5%); one named config per child dir, 3 of 238 (1.3%); test files only, 2510 of 4903 (51%).packages/**is already declared wholesale by three families,scripts/**andskills/**by four each.check:error-code-casingreally does read 4408 of 4903 files underpackages(90%) — the declaration would be true, and would add one more identical line to every card in the repo, restating "run the farm" on the one column whose whole value is precision.So the useful conclusion is not "here are 33 gates to fix". It is: the #10114/#10314 escape only works when the population is a subtree, and most of this species' populations are not. That is what stops this class being re-found one gate at a time.
Landed: 3 declarations, the only rows clearing precision ≥85% and blast radius ≤300 files
check:driver-conformancepackages/drivers/**check:skill-frame-syncskills/**check:skill-compatibilityskills/**Each pins the coupling in its own self-test, derived from the population constant rather than re-spelled, and each pins its refusals by name too —
check:driver-conformancerefuses both the bare root andCASE_SETS_DIR,check:skill-compatibilityrefuses all threePACKAGE_ROOTS, following #10314's shape of pinning the refusal so a later author meets an assertion instead of prose.Verified end to end, both directions: a driver card now names
check:driver-conformanceand apackages/corecard still does not; a skills card now names both skill gates and apackages/spec/src/datacard names neither.Nearest miss, recorded rather than taken:
check:engine-double-contract examplesat 199/238 = 84%.The durable home:
scripts/pm/bare-root-worklist.mjsThe card asked for the worklist "somewhere durable and re-derivable", and warned that a 73-row ledger would be "an allowlist nobody re-reads rather than a debt list". So the two halves are separated:
--wideruns the unrestricted contrast sweep, kept runnable purely so the restriction is justified by measurement, and never triaged.DECLARED-NARROWER/REFUSE-WIDE/REFUSE-UNSPELLABLE), each carrying its measured reason. The self-test pins the two halves together in both directions: a verdict cannot outlive its row (the shrink), and a new row cannot land unjudged. So it cannot rot into an unread allowlist — it fails when the tree moves.⛔ No recognizer was added to
dispatch-gates.mjs, per the card and the triage comment. Nothing in the derivation reads this file, and no verdict in it reaches a dispatch prompt. What runs per-PR is only its--self-test.hintCovers':920refusal is untouched; the +139084 measurement stands.Verification
77d6bbbe38, including the brand-newcheck-step-collectors.mjs(fix(ci): collect every self-test verdict in a step, instead of masking after the first failure #10887) which parses thelint.ymlblock I edited.dispatch-gates --self-test: 506 cases pass.check:type-check-debtwas skipped locally — it requires a built workspace closure this container lacks. Proven environment-caused, not change-caused: red at the merge base with an identical message, and this change contains no TypeScript. CI builds the closure and runs it for real.packages/core(the fabricated lead). Prediction deviation, recorded: I predicted 2 failing cases; 4 fired, because the bare root also swallows the case-sets path, so both refusal pins are more tightly coupled than expected..mjsrun directly by node, with nodist/in the resolution path.skip-changeset: tooling and workflow only, nothing published.Generated by Claude Code