Skip to content

Closing references: a feature PR's Fixes line is inert, and a negated keyword still fires #1265

Description

@ptr727

Two related gaps in how issue auto-closing works on this repository's two-branch model. Both bit during one session, and neither is written down anywhere in GOVERNANCE.md, AGENTS.md, drive-pr, merge-and-release, or comment-and-doc-style.

1. A feature pull request's Fixes #N is inert

GitHub registers a closing reference only for a pull request targeting the default branch. Every feature pull request here targets develop, so its Fixes #N line never becomes a closing reference at all.

Measured across the thirteen feature pull requests promoted in #1263:

gh api graphql -f query='{ repository(owner:"ptr727",name:"ProjectTemplate"){
  pullRequest(number:1255){ closingIssuesReferences(first:10){ nodes{ number } } } } }'

returns an empty set for all thirteen, despite each carrying a Fixes #N line that renders as a link in the UI.

The consequence is that the promotion pull request must carry a Closes #N line for every issue in the batch, or the promotion merges and closes nothing. Nothing states this. An agent that writes Fixes #N on the feature pull request, sees it link correctly, and then writes a promotion body without the lines, ships a promotion that silently leaves nineteen issues open.

2. A closing keyword fires inside a sentence that negates it

The keyword is matched adjacent to the reference, and no surrounding wording disarms it. Both of these register a closing reference:

  • Fixes #1261 is deliberately not claimed here.
  • Narrowed with evidence rather than closed: #669

The second was live on #1263 and would have auto-closed #669 on merge, an issue that had just been deliberately narrowed and left open with a comment explaining what remained. It was caught only by querying closingIssuesReferences after opening the pull request, not by reading the body.

The full keyword set is close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved. Prose about an issue reaches for several of these naturally, which is what makes it a trap rather than a rarity.

What a fix would have to address

  • State, wherever the promotion recipe lives, that the promotion body owns the closing lines and the feature pull requests cannot.
  • State that a closing keyword must never sit adjacent to an issue reference unless the closure is intended, and give the safe rewriting (, #669, rather than closed: #669).
  • Make the check mechanical rather than a matter of care: after opening a promotion, compare closingIssuesReferences against the intended list. Reading the body does not work, which is the whole point of both halves above.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    proseA defect in rule or procedure text

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions