test(devx): pin the merge-queue triage comment's operative guidance prose - #14550
Merged
Conversation
…rose check-merge-queue-triage-outcome.mjs asserted only the fenced excerpt and the cross-PR aggregation; the timeout-vs-assertion rule, its named exception, and the boundary sentence that lives in the same posted body were readable by nothing in the suite, so deleting them left every gate green (#13967). Adds a whole-body accessor (guidanceProse, built on postedBody, deliberately not excerptLines -- see its docblock) plus one assertion per operative claim in scenario E1, and three matching MUTATIONS rows (M17-M19) so --self-test proves each new assertion can go red.
…iage-guidance-pin
baozhoutao
marked this pull request as ready for review
September 2, 2026 11:54
baozhoutao
enabled auto-merge
September 2, 2026 11:54
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 free
to 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 #13967
What
scripts/check-merge-queue-triage-outcome.mjspinned the fenced excerpt and thecross-PR aggregation, but nothing in its 73 assertions read the merge-queue triage
comment's operative guidance prose — the timeout-vs-assertion heuristic, its named
exception (PR #13966), and the boundary sentence saying the re-queue allowance is
governed elsewhere. Deleting all three from the workflow's
bodyarray left thewhole derived gate family green.
This adds:
guidanceProse(r)besideexcerptLines(r), built onpostedBody(r)(the wholeposted comment) rather than through
excerptLines— its docblock states why:excerptLinesis deliberately scoped to code-fence content, and the guidanceprose lives outside every fence, so going through it would leave the prose
unreadable by design, not by omission.
E1(the timeout scenario — the body is composedonce, so one scenario carrying all three is enough), one per operative claim.
MUTATIONSrows (M17-M19) so--self-testproves each new assertioncan go RED, with
A1as thekeepGreencontrol (it posts the same comment butnever reads the prose, so it should not move).
lint.yml's step comment, and a correction ofits mutation count (measured 20 after this change; it previously said "fourteen"
against a measured 17 — both numbers are fixed in this edit).
.github/workflows/merge-queue-triage.ymlis the SUBJECT being pinned and isnot touched by this PR.
Pinned sentences (mandatory per the triage)
One assertion per operative claim, each on the shortest substring that carries
the claim and would not survive a deletion — never the whole sentence:
负载/时序and真实的行为改变实验自身的有效性前提and时长、一个时间戳、一个耗时计数后者由别处管Deliberately NOT pinned: the wording around these fragments — the framing
prose, the two worked examples (
AssertionError: SecurityPlugin.init().../...second-precision stamps could have differed too...), and markdown emphasis.Quoting more than these fragments is exactly the failure mode the card names: "a
prose pin that quotes too much turns every wording improvement into a two-file
edit, and that is how pins rot into copy-paste."
Tests
node scripts/check-merge-queue-triage-outcome.mjs --self-test→104 assertions, 20 mutations of the shipped script each driven to red.node scripts/check-merge-queue-triage-outcome.mjs→OK (76 assertions over 20 scenarios...)(73 + 3 new; 20 scenarios unchanged, confirmed with--list).committed baseline, blanked the rule pair and the boundary sentence directly in
merge-queue-triage.yml(restored viagit checkout HEAD -- .github/workflows/merge-queue-triage.ymlunder atrap ... EXIT INT TERM,confirmed clean by
git diff HEADafter). The battery went RED naming exactlythe two mutated assertions:
green — confirming the three assertions are independent.)
eslint scripts/check-merge-queue-triage-outcome.mjs --no-inline-config --format json: 1 file, 0 errors, 0 warnings. Repo uses one flateslint.config.mjswith noparserOptions.projectfor any file (no type-awarelinting anywhere in the repo), so this file-narrowed run is a measurement, not
an assumption — it cannot move any unrelated file's verdict.
origin/main(no conflicts,unrelated files) — both green on the merged tree at
4e61df652.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands scripts/check-merge-queue-triage-outcome.mjs .github/workflows/lint.yml→ 35 commands; all 35 run, reconciled with--ran(35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN). 33/35 passed; 2 exited
PREREQUISITE-NOT-MET locally (not a red —
check-test-completeness.mjsneeds asaved
turbo run testlog CI produces;check:type-check-debtneeds the fullworkspace
dist/*.d.tsclosure built) and are unaffected by this diff. See theos-dev-reportcomment on [finding] The merge-queue triage comment's operative guidance prose is unpinned — its own gate suite reads only the excerpt and the aggregation #13967 for the full per-command list.Changeset
None.
scripts/**+.github/**only, publishes nothing from any package —skip-changesetlabel applied and confirmed by reading it back.Generated by Claude Code