When running banner-style sweeps (e.g., updating “Session 1 of 2 hardening pass” → “Sessions 1+2 + project-level CLAUDE.md complete”), the same banner phrase often repeats further down in subsections. A single-pass sweep on the top-of-file occurrence will miss the buried ones.

Why: Real incident 2026-04-28T18:30 on code-inheritv2-test-suite second /review-plan verification. The original doc-reconciliation pass (commit 22fe87d) updated:

  • README.md top-of-file banner (“Current status — Phase 0 scaffolding … Session 1 of 2”) ✓
  • but missed the same framing in §“Build plan” subsection at line 92 (“BUILD-PLAN.md v1.0 … Session 2 of 2 will land BUILD-PLAN.md v1.1”) ✗
  • and missed THIRD-PARTY-DEPENDENCIES.md line 14 (“Phase-0 scaffolding commit; Session 1 of 2 hardening pass”) ✗

The second /review-plan pass caught both as NEW-A + NEW-B; cleared in commit 501440c. Without the second pass, both would have shipped to Sprint S1 with stale framing.

How to apply:

When updating any recurring banner phrase or version stamp:

  1. Grep for ALL occurrences first: grep -n "phrase" path/to/file or grep -rn "phrase" repo/ — get the full list of hits
  2. Update every hit in the same commit, not just the first one
  3. Specifically watch for:
    • Status banners (“Session 1 of 2”, “Phase 0 scaffolding”)
    • Version stamps in version-pin lines AND in body-text references
    • File-renamed references (when a file is git mv-ed, grep all occurrences of the OLD filename across the repo)
    • “Last updated” / “as of” lines that often appear in multiple files
  4. After commit, re-grep to verify zero stragglers
  5. The 2-pass /review-plan pattern is the safety net — but the discipline should catch it on first pass