blame
An advisory by default: it explains, and blocks nothing, on a person or past work as the subject of a fault, and contempt for code or a decision.
What it catches
A person or past work as the subject of a fault, and contempt for code or a decision.
Dimension
stance: the text reads as a verdict on a person, or as addressed to someone else. A finding is counted on
the dimension of its rule, the cost it names to the reader.
Why
Text loses its tone on the way to a reader, who fills the gap with intent the writer never had. "Whoever wrote this forgot to" reads as an accusation; "the rename left the old key" states the same fact. The first person is left alone, since owning a fault reads as candor. Measured 2026-10-10 before a fix: 85.7% precision on its cases (6 of 7), firing on 0.1% of human AIDev review comments and on 1 magus commit body; of 70 firings read, 30 were wrong. So "should have" counts only before a past participle ("you should have a tests file" is possession, "they should have been kept" a thing), "they" only when it forgot or neglected to, and a contempt word is exempt inside a name ("crazy-max", "dumb-init"), capitalized mid-sentence ("Keep It Simple, Stupid"), and as "go too crazy". Measured 2026-10-11 over the adjudicated labeling round: 52.0% precision (26 of 50) before, 92.9% (26 of 28) after. "lazy" is no longer read (all 7 labeled firings named evaluation on demand), and quoted words, a denied word ("not crazy", "rather than sloppy"), a fault the writer owns ("on my part") and a supposed one ("if they forgot to") are left alone. Labeling round 3 measured 34 of 37, a lower bound of 0.79, which each graded finding weighs.
Default decision
The code is PRF2001. The decision depends on the kind of text judged:
| Kind | Default |
|---|---|
change-description |
advise |
review-summary |
advise |
review-inline |
advise |
review-reply |
advise |
commit-message |
advise |
issue |
advise |
agent-reply |
advise |
Changing it
A decisions table sets this rule to deny, advise or off, for everything judged
or for the files a glob matches. Proofread reads the table from the file its
-decisions flag names:
{
"rules": {"blame": "deny"},
"paths": {"blog/**": {"blame": "off"}}
}
rules applies to every file. A glob in paths applies to the files it matches, and the
last match wins. A rule set to off never reports.
Seeing it
A finding names the rule, its code and the decision that applies, and links here:
{"rule": "blame", "code": "PRF2001", "decision": "advise", "url": "https://eli.gladman.cc/magus/reference/proofread/blame/"}
proofread rules prints this entry with every other rule's.
See also
- All proofread rules - every rule, grouped by what it checks
- Writing rules - how the rules apply to this repository's pages and pull requests
- The findings contract - the fields every finding carries