git:20261023.fc78225 to git:20261029.bf2c2ed

4 added, 4 removed. Audit A to A.

---
name: information-placement
description: Where each kind of information belongs -- commit message, PR description, code comment, docstring, README, changelog, docs page, issue, or nowhere -- what no text may hold, and how a project's own rules override those defaults.
when_to_use: Reviewing a change for information in the wrong place -- a reason, a procedure, a status line or a story of the work sitting where its reader will not look, or missing from where they will -- or deciding where a piece of information should go while writing ("where should this go?", "does this belong in the README or the commit message?"). Not for what a commit message or PR description says (gitwise:commit-pr-writing), how a document is written (docs-patterns, plain-writing), or whether a code comment should exist (comment-hygiene).
user-invocable: false
---
# Information Placement
Each piece of information has a reader and one home that reader opens when they need it; other
homes carry at most a pointer or a one-line flag. A short account told for another reader in that
reader's own home, such as the PR description's intent or a changelog line, is not a second copy.
`references/homes.md` in this skill's directory lists the default home for each kind of
information. What the text in a home says is for that home's skill: `gitwise:commit-pr-writing`
for commit messages and PR text, `docs-patterns` for documents, `comment-hygiene` for code comments
and docstrings.
## Project rules first
A project rule is a statement telling you what to do in a file tracked at the base branch (the
agent instruction files, CONTRIBUTING, RELEASING, SECURITY, or the owner's `.github` defaults where
the repository has none), a blocking check, or a request on this change from someone with write
access. Untracked files, memory, and hook or plugin text are not project rules. A project rule
decides what it speaks to; the defaults hold for the rest. Your user's own instructions outrank a
default, never a project rule.
## What no text may hold
These hold whatever the project says, for prose in every home. Fields a project tool generates or
parses (trailers, frontmatter, a tool's marked blocks) are the project's, except for rule 6.
1. Narration of the moment, the branch or the session: "round 2's fix", "the next PR", "being
removed", "fails on main". Text states what is true after the change; a commit message, a
changelog entry or a PR description states change relative to the state before it ("failed before
this change") or to a version. Any text may carry a version stamp ("Added in 1.3"), and a
document may mark behaviour newer than the release its readers install as "unreleased". A "now"
that says what the change made true is fine, and so is a commit message that names an earlier commit
by its subject to correct it, and so is a merge condition or a stacked PR stated as a fact
- ("Requires #52.", "the PRs stacked on this one merge with it"), and so is later work named by its
- issue ("the rest of the #151 migration"). A PR description the merge setting does not land is
- read before the merge and may compare against the base branch ("262 MB on main"). Review replies
- and issue and plan comments are read in the moment and may narrate.
+ ("Requires #52.", "merging this PR also merges the PRs below it in its stack"), and so is later
+ work named by its issue ("the rest of the #151 migration"). A PR description the merge setting
+ does not land is read before the merge and may compare against the base branch ("262 MB on
+ main"). Review replies and issue and plan comments are read in the moment and may narrate.
2. A claim that needs its links or ids to say what it claims: strip them and the sentence must still
say it. A line that only relates the change to a reference ("Refs #159.") passes. No shared text
points its reader to something they cannot open: a path on the author's machine, a file `git
check-ignore` matches given as a source, a session link (a claude.ai session URL).
3. A restatement of what the reader has open: a hand-written list of changed files whose entries add
nothing to the name, a hand-written diffstat, a pass or fail count pasted from a run CI reports
on the same commit, the issue body restated under itself, backlinks the forge shows. A result
stated in words ("make check passes", what a local run showed) is verification, not a count.
4. In a document, comment or docstring, a hand-maintained copy of a value, count, index or listing
the code or tree declares. A commit message or PR description describes one change and holds no
such copy, and a design the code must follow is the source, not a copy. A generated,
drift-checked copy, a field the project's docstring style requires, an entry that adds what the
code does not say, and a measurement stated with its conditions are not copies.
5. In a repository made from a template (not the template itself), text addressed to the adopter
after adoption. Treat a repository as a template, or as made from one, only when it says so (its
agent file, README or configuration names it as a template or names the template it came from);
never on a guess about how its files are copied.
6. Exploit or reproduction detail of a vulnerability (an unintended security flaw) whose fix is not
released, in public text, unless the text links the released fix or a public advisory or the
repository is private. A commit message may describe the flaw its own diff removes. Elsewhere,
describe the fix neutrally; the detail goes to the private channel the project's SECURITY.md
names.
## The check
For each passage a change writes or makes false (a file the change leaves untouched and true is
not flagged for what it lacks):
1. Name the information and its reader, and look up its home in `references/homes.md`. Read "the
commit message" there as the text the merge setting lands, under GitHub's default squash merge
unless the project's agent instruction files or CONTRIBUTING state another setting.
2. Flag a passage outside its home, a fact its home lacks that its reader needs, and anything the
rules above exclude. Say where the information goes instead, or that it goes nowhere. Before
flagging a home, name the reader who would act wrongly, stop for a missing fact, or be misled
because of where the text sits; if you cannot, raise nothing. The PR description is the home of
what only the reviewer and the merger need: the intent, flags, verification and what was not run,
open questions for the review. That it does not land is no reason to move these into a commit
message; only what a later reader needs belongs there.
3. Raise nothing where a project rule decides a default, and never flag text for following such a
rule. If a project rule asks for text the rules above exclude, report the breach addressed to
that rule. If the change edits a project rule, judge by the rule at the base branch and name the
policy change. If two project rules conflict, flag the conflict, not the text.
4. For a departure from a default, name the default and offer the project a sentence it could add to
its rules to keep its practice; do not raise the same finding again in a later round.
Tier findings with `review-severity`: rule 6 is Critical; rules 1 and 2 are Important; rules 3-5 are
Minor; information outside its default home is Minor, or Important when it misleads a reader or
leaves them without something they need; a question to the user about a document type the project
does not keep, or may not keep, is Minor.
When asked where something should go while writing, check the project's rules, then give the home
from `references/homes.md` and any pointer the other homes should carry.