Uh oh!
There was an error while loading. Please reload this page.
docs(check-console-injection): record why packages/spec is not in ci.yml's console filter - #10442
Merged
Merged
Conversation
…yml's console filter Header-only. A new section beside the existing cache-key economics, recording the measurement that declined a spec-triggered console job: five of this gate's six failure verdicts are pure functions of the restored dist plus its stamp, which a spec-only diff cannot move, and the one that reads the tree needs packages/spec/dist. So the proposed restore-only job would schedule the gate 15 more times per 100 commits (6/100 -> 21/100) and skip the only tree-sensitive assertion on every one of them; and the fully built variant still passes on "spec moved forward since the dist was built", which the cache design accepts by design. #10428 is named as the exit that would reopen the question. No behaviour change, no new flag, no ci.yml change. Refs: #9710 (ruling) - #9667 (cost model) - #9706 (ruling table) - #10428 (the exit) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt
os-zhuang
marked this pull request as ready for review
August 20, 2026 21:17
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 20, 2026
Uh oh!
There was an error while loading. Please reload this page.
github-merge-queueBot
removed this pull request from the merge queue due to failed status checks
Aug 20, 2026
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 20, 2026
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.
Header-only. One file, 44 added lines, zero deletions, no behaviour change.
This lands the PM's ruling on #9710's open question — where to record the
measurement — which was answered C: put it in
scripts/check-console-injection.mjs's header, where #9667's cache-key costmodel already lives, rather than in
ci.yml.Refs: #9710deliberately, not a closing keyword. That card's ruled outcomeis keep B — do not widen the filter, do not build the light job; this commit
implements none of what the card asked for, so it must not auto-close it. The
PM closes it with the ruling recorded.
What the new section records
A sibling of the existing "Adding
packages/specto the cache key wasconsidered and REJECTED" paragraph, placed after the EXPIRY section and before
the failure-response one:
packages/specis absent fromci.yml'sconsolepathsfilter, so a spec-only PR never schedules Console Pin Gate;
verdicts, five are pure functions of the restored dist plus its stamp —
which a spec-only diff cannot move, the cache key being the pin and the build
script and cache entries immutable — and exactly one reads this tree, the
probe-expiry re-check, which needs
packages/spec/distbecausereadSpecBlobresolves the package'sexportsmap;commits (6/100 today, 21/100 with
packages/specadded) and skip the onlytree-sensitive assertion on every one of them;
dist was built" — the headline scenario — which PR fix(ci): verify the RESTORED console dist bundles this tree's spec, not only the built one #9706's ruling table
already calls "not a failure — the ruled cache design accepts lag";
check:console-injectionsilently drops its only tree-sensitive assertion whenpackages/specis unbuilt — and nothing requires the spec blob #10428 is named as the exit: derive the expiry probe frompackages/specsource text, making that assertion buildless, which reopens the trigger
question on different terms.
Full working (paths-filter replay under both picomatch versions, per-commit
attribution) stays on #9710's ruling comment; the header carries the conclusion
plus the numbers that make it checkable.
Verification — all at
c84898aeb(the final commit)node scripts/pm/dispatch-gates.mjsderived three families for this diff, allgreen at head:
pnpm check:console-injection✓ check-console-injection --self-test: 21 assertions over real fixture trees (real evaluate() path)(exit 0)node scripts/check-cross-package-test-inputs.mjsOK: 12 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob.check:nul-bytes(standing, any edit)check-nul-bytes: OK (scanned 6124 text file(s) … no raw ASCII control bytes).pnpm lint—os-verify-lock: VERDICT command-exit 0 · held the lock 58s · waited 171s, ESLint silent. It ran on byte-identical content: the commitchanged no bytes (
git status --porcelain= 0 lines,git diff HEADempty atc84898aeb). Relevant because PR #10429'scomment-swallow/no-code-inside-block-commenttargets exactly this shape —every added line carries the
*prose marker, blank ones included, and theblock contains no
*/sequence (packages/specis written unglobbed for thatreason).
Independently reproduced the ruling's price numbers here before writing them
down, by literal-path replay over the same window (all seven
consolefilterentries are literal paths, so no matcher is needed): 100 first-parent commits
ending
e502a6a8e→ baseline 6/100,+ packages/spec21/100 (+15),+ packages/spec/src16/100, and 5 of the 15 add.describe(textunder
packages/spec. The five-vs-one verdict split was re-derived from thecurrent source, not inherited from the brief — it matches.
Not in this diff
.github/workflows/ci.yml— that was option A and it is ruled out.scripts/**publishes nothing (the root package isprivate), soskip-changeset. Re-derived at diff time by publish surface.Refs: #9710 (the card and its ruling) · #9667 (the cost model already in this
header) · #9706 (the ruling table) · #10428 (the exit)
Generated by Claude Code