Uh oh!
There was an error while loading. Please reload this page.
feat(pm): flag a Part of PR whose body also carries a closing keyword for the same card (#8293) - #8475
Merged
Conversation
…ord (#8293) The close mechanism was GitHub's closing-keyword parser matching a sentence written to PREVENT the auto-close, not a development-sidebar link. H7 detects that contradiction on open PR bodies, report-only.
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
hotlong
marked this pull request as ready for review
August 13, 2026 15:38
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.
Part of #8293
Part of, not the closing keyword. The suppression half of this card is protocol text outsidescripts/pm/**and is left open on purpose — see "What is NOT in this PR". What lands here is the investigation result plus the report-only detector.The card's diagnostic premise is falsified, and that correction is the main deliverable. The close was performed by GitHub's ordinary closing-keyword parser reading the PR body. It was not a development-sidebar link.
The mechanism, measured
PR #8277's body opened with
Part of #8131and then carried this sentence — the one written to prevent the auto-close:The keyword plus the reference is all GitHub's parser reads. It ignores the modal "should", ignores the negation in the clause before it, and ignores the entire paragraph arguing the card must stay open. The card's author scanned for closing keywords and reported none, because the scan was looking for a sentence asserting closure — not for a warning against it.
Four live readings pin the parser's actual behaviour. Each is a self-test fixture:
Part of+ reference alone — PR #8261, the same round's other partial deliveryReading 2 is what refutes the sidebar hypothesis. One body, one merge, two issue references, opposite outcomes — and the second card's
closed_by_pull_requestsis empty while the first names the PR. No development-link theory discriminates between two references in the same sentence. The keyword parser does, precisely.Reading 3 dissolves the non-uniformity the card flagged as its strongest lead: the other
Part ofcard stayed open because its PR body simply contained no closing keyword. Nothing else differed.Reading 4 changed the implementation. Open PR #8454 says "the dispatch asked for
Fixes ..." inside backticks while its card carries no closing link at all — so GitHub does not fire inside a code span. A body regex without that step would have flagged that PR, which is correct. Stripping markdown code is what keeps this guard off the careful authors it would otherwise punish.What landed
H7inscripts/pm/check-half-states.mjs— report-only, in the file's existing character:Part ofa card while also carrying a closing keyword bound to that same card. Contradictory by construction.Part ofcard A and legitimately closes card B is a normal shape and stays clean — open PR ADR-0123 + enforcement: an authenticated session with no active organization — reads resolve to nothing, tenant-scoped writes are refused loudly #8471 is the live specimen.This is the only item in the file that reads pull requests rather than issues, because the PR body is the surface where the fact is still fixable. Drafts are included — a draft is where this is cheapest to fix.
Verification
node scripts/pm/check-half-states.mjs --self-test— 79 cases pass (58 before; +21 for H7). Exit 0.--probeexit 3 (PREREQUISITE NOT MET) in this container both before and after the change — the file's own documented "class 3" transport verdict, unchanged by this diff. This container cannot run live mode, which the script says in its header.Part of, 0 findings. No false positives on the real board.stripMarkdownCodemade a pass-throughPart ofA + closes B case goes redA first attempt at the strip ablation edited only one of two call sites and produced 0 red — recorded here because that is precisely the false-green shape an ablation must not be allowed to have. It was redone at a single point that certainly ablates.
pnpm check:nul-bytes— green (7637 files).npx eslint scripts/pm/check-half-states.mjs --no-inline-config— clean.node scripts/pm/dispatch-gates.mjs scripts/pm/check-half-states.mjsreports no check family naming this path, confirming the dispatch's judgment set. Nothing added.What is NOT in this PR
scripts/pm/**— reported, not implemented, per the card's scope boundary. This is the half that keeps this PRPart ofrather than a closing declaration.references/landing-operations.md), moved to the references sweep card at claim time.Generated by Claude Code