---
name: retraction-sweeps-diagnostic-strings
description: "A retracted claim also lives in assert!/panic! messages and log text, not just doc comments — sweep the strings the code PRINTS."
metadata: 
  node_type: memory
  type: feedback
  originSessionId: d35eee0f-40f8-453d-a495-005b948d382e
  modified: 2026-08-03T06:49:17.408Z
---

After retracting a false explanation, I fixed the doc comment and thought the sweep was done. The
same false sentence was still embedded in the `assert!` failure message — so the gate, when it fired,
PRINTED the retracted claim at whoever it was failing for. Diagnostic strings are documentation that
only appears at the worst moment, which makes a stale one worse than a stale comment.

**Why:** IR-18. My Copy-vs-Pointer story about where a service's binary resolves was falsified at the
computed site (`servicehost.rs` takes `install_dir` from `record.source_dir` in BOTH registration
modes; COPY never copies binaries). I replaced it in the doc comment. Mutation A then failed the
derivation check and echoed the false sentence back at me from the assertion text. Precedent: the
empty-stderr retraction, where I named two sites and deployah found six.

**How to apply:** on any retraction, grep the diff for the CLAIM's terms — not the file you
remember — across doc comments, `assert!`/`panic!`/`expect` messages, `eprintln!` evidence lines,
commit text, and any message already routed to another agent. "Naming the sites I remember is not
sweeping." Also: verify a claim at the site that COMPUTES the value, not from the inference you
already published — a fact true of manifests was generalized to binaries without checking that the
consumer agreed. Related: [[correct-by-replacement-not-annotation]],
[[amendment-falsifies-more-than-named]], [[doc-audit-reads-whole-file]],
[[structural-fact-must-survive-rederivation]].

**A FACE WHERE THE STALE STRING IS A CODE COMMENT, AND IT IS THE DEFECT'S TWIN
(2026-08-21, releases#186).** The render said a cross-node knock's answer was
`unknown here (releases#87)` because no wire carried one. The wire had SHIPPED
— and three separate doc-comments still asserted the receipt family was
`unbuilt`, sitting beside the built wire in the same crates. Fixing only the
render would have shipped a contradiction: a corrected sentence on the surface
and three uncorrected ones behind it, each of which is what the next reader
reasons from.

doyle ruled the sweep into the SAME commit rather than a follow-up, on the
grounds that comments carry no pin — the diff read IS their gate, so a lane that
defers them defers them forever. Sweeping `releases#87` across the code found
FOUR sites: three stale, and one that had already retired its own caveat
correctly and had to be left byte-untouched. That fourth one matters: a sweep
that rewrites every hit is as wrong as one that rewrites none.

**How to apply:** when a fix falsifies a BELIEF (not just a string), grep the
belief's citation — the issue number, the feature name — across code, docs and
tests, and classify every hit as stale / already-correct / unrelated before
touching one. Correct the stale ones in the same change, preserve the invariant
each was defending and change only its REASON, and say in the commit which sites
you left alone and why.

