Skip to content

docs: a PR body is history too — findings belong in issue bodies, and a PR that finishes a ticket says Closes - #423

Merged
TortoiseWolfe merged 2 commits into
mainfrom
docs/issue-hygiene-pr-bodies
Jul 29, 2026
Merged

docs: a PR body is history too — findings belong in issue bodies, and a PR that finishes a ticket says Closes#423
TortoiseWolfe merged 2 commits into
mainfrom
docs/issue-hygiene-pr-bodies

Conversation

@TortoiseWolfe

@TortoiseWolfe TortoiseWolfe commented Jul 29, 2026

Copy link
Copy Markdown
Owner

The rule had a hole, and I fell through it

CLAUDE.md's Issue Hygiene section says "the issue BODY is the finding. A comment is not." It says nothing about PR bodies or commit messages.

So this session obeyed the letter and broke the rule anyway. Four real findings from the 3a–3d reskin went into PR bodies and commit messages — which are one level further from a reader than the comments the rule already bans. Nobody greps merged PRs to learn how the system works today.

What that cost, concretely:

The change

Two bullets in the Issue Hygiene list:

  • a PR body and a commit message are history too — a finding that outlives the PR belongs in an issue body, and the PR points at it
  • a PR that finishes a ticket says Closes #N, not Refs #N

Both cite the specific issues that prompted them, so the rule carries its own evidence rather than reading as a preference.

Also in here: the litter that prompted half of it

Checking the tree for stray work turned up CLAUDE.md.bak-2026-07-28 (23KB) sitting untracked in the repo root from the #417 session — and .gitignore turned out to have no backup pattern at all: no *.bak, *.orig, *.rej, *~, *.swp. One git add -A would have committed it.

Nothing has slipped through yet, but this repo has already been bitten by the same shape once — #392, where a local root build rewrote public/manifest.json and the only mitigation was remembering not to stage everything. The .gitignore rule is the version that does not depend on remembering.

The backup file was a strict subset of the current CLAUDE.md, so it was deleted rather than kept. Verified the new patterns catch real backups, and that no tracked file is shadowed by them.

Docs and ignore rules only; no code paths touched.

Closes #424. Refs #376.

The Issue Hygiene section already said "the body is the finding, a comment
is not." It said nothing about PR bodies or commit messages, so this session
obeyed the letter and broke the rule anyway: four findings went into PR
bodies and commits, which are one level further from a reader than the
comments the rule bans.

Two additions:

- a PR body and a commit message are history; a finding that outlives the
  PR belongs in an issue body (#421, #422 are the two filed as a result)
- a PR that finishes a ticket says `Closes`, not `Refs`. #381, #382 and
  #383 sat open behind their own merged PR, reading as pending work that
  had already shipped.
.gitignore had no backup pattern at all — no *.bak, *.orig, *.rej, *~, *.swp.
A CLAUDE.md.bak-2026-07-28 left over from the #417 session was sitting in the
repo root as untracked-but-not-ignored, one `git add -A` from being committed.
It was a strict subset of the current CLAUDE.md, so it was deleted rather than
kept.

Nothing has slipped through yet. Closing it anyway because this repo has been
bitten by the same shape once already: #392, where a local root build rewrote
public/manifest.json and the mitigation was "remember not to stage everything".

Verified the patterns catch real backups, and that no tracked file is shadowed
by them.
@TortoiseWolfe
TortoiseWolfe merged commit 191b7af into main Jul 29, 2026
2 checks passed
@TortoiseWolfe
TortoiseWolfe deleted the docs/issue-hygiene-pr-bodies branch July 29, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

.gitignore has no backup-file pattern, so a stray *.bak is one 'git add -A' from being committed

2 participants