Skip to content

Commit fdf7bc5

Browse files
committed
Revert the append-only violation; make the stale-index error name every input
Two findings from CodeRabbit on #1123, both valid. Append-only: the MD018 fix edited an EPIPHANIES entry that had already merged to main. CLAUDE.md is explicit — governance files are append-only, and only Status / Confidence may change in a merged entry. Reverted; the MD018 warning stands, because a cosmetic lint does not outrank append-only. The lesson is sharper than the fix. CodeRabbit raised that MD018 finding on #1122, when the entry was new and unmerged and editing it was ordinary drafting. By the time the fix landed one PR later the entry had merged, and the identical edit became a violation — so the reviewer correctly rejected its own earlier remedy. A finding ages well; a REMEDY does not, because it assumes where the tree sits. Before acting on a comment from an earlier PR, re-check what the target is now: merged or not, moved, already fixed, or governed by a different rule than when the comment was written. Stale-index message: the workflow's error text named only plans + crates + COMPONENT-MAP, so a failure triggered by a board input would not explain why the workflow ran. That is the same gap CLAUDE.md already warns about ("the workflow's own error text names only the first three inputs and will mislead the same way"). It now names all five inputs and all three ways the table goes stale. regenerate-and-diff ran and passed on the previous push, so the trigger fix from that commit is exercised rather than asserted. Planner lib 380 green; index regenerated after the board write. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PFnYKqw6d7TTiB9cT8eFdK
1 parent 758b950 commit fdf7bc5

2 files changed

Lines changed: 45 additions & 3 deletions

File tree

‎.claude/board/EPIPHANIES.md‎

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,42 @@
1+
## 2026-08-31 — E-A-REVIEW-REMEDY-HAS-A-SHELF-LIFE-1 — the same edit was correct in one PR and a violation in the next
2+
3+
**Status:** FINDING — caught by CodeRabbit on PR #1123, one PR after it raised
4+
the finding whose remedy it then had to reject.
5+
**Confidence:** measured — the identical one-line edit, applied twice.
6+
7+
CodeRabbit flagged MD018 on PR #1122: an `EPIPHANIES.md` line beginning `#1120`
8+
reads as a heading. Valid, and at that moment the entry was **new and
9+
unmerged**, so editing it was ordinary drafting.
10+
11+
The fix landed one PR later. By then the entry had **merged to `main`**, and
12+
`CLAUDE.md`'s governance rule applies to it:
13+
14+
> The governance files are APPEND-ONLY (prepend new entries; never edit past
15+
> entries except the `Status:` / `Confidence:` lines).
16+
17+
So the same characters, in the same place, for the same reason, changed from a
18+
lint fix into a violation of the ledger's core property — and CodeRabbit
19+
correctly flagged its own earlier remedy. Reverted; the MD018 warning stands,
20+
because a cosmetic lint does not outrank append-only. (An append-only file's
21+
whole value is that a reader can trust an old entry reads as written; a
22+
"harmless" edit is exactly the kind that erodes that, since nobody objects to
23+
any single one.)
24+
25+
**The generalizable bit: a remedy is scoped to the state of the tree when it
26+
was proposed.** Findings age well — the defect is either real or not — but
27+
remedies age badly, because they assume where the code sits. Between the
28+
finding and the fix, this entry crossed a boundary (unmerged → merged) that
29+
changed which rules governed it, and nothing in the finding text could have
30+
said so.
31+
32+
**Consequence, cheap to apply:** before acting on a review comment from an
33+
EARLIER PR, re-check what the target is *now* — merged or not, moved, already
34+
fixed, or governed by a different rule than when the comment was written. Same
35+
family as this session's other silence-shaped errors: the check was right, the
36+
world moved, and only re-reading the world catches it.
37+
38+
---
39+
140
## 2026-08-31 — E-THE-SUPERSESSION-GATE-WATCHED-TWO-OF-ITS-FOUR-INPUTS-1
241

342
**Status:** FINDING — mechanical, fixed in the same PR that exposed it.
@@ -105,7 +144,7 @@ admitted and is replayed, never re-judged.
105144
same diff; each adjudicated against the code, two remedies rejected with
106145
evidence.
107146

108-
PR #1120 drew **7 findings from two reviewers that never see each other's
147+
#1120 drew **7 findings from two reviewers that never see each other's
109148
output** — codex (3) and CodeRabbit (4). Their overlap is the interesting
110149
part, and so is the one place they diverge.
111150

‎.github/workflows/supersession-index.yml‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ jobs:
4949
if ! diff -u .claude/board/SUPERSESSION-INDEX.md /tmp/regen.md; then
5050
echo
5151
echo "::error::SUPERSESSION-INDEX.md is stale."
52-
echo "It is GENERATED from .claude/plans/ + crates/ + COMPONENT-MAP.md,"
53-
echo "so adding a plan that names a ruled symbol makes it stale."
52+
echo "It is GENERATED from ALL of:"
53+
echo " .claude/plans/ + crates/ + .claude/v3/COMPONENT-MAP.md"
54+
echo " .claude/board/entries/ + .claude/board/EPIPHANIES.md"
55+
echo "so a plan naming a ruled symbol, a symbol added or deleted in"
56+
echo "crates/, OR a board entry citing a D-id can make it stale."
5457
echo "Regenerate and commit:"
5558
echo " python3 .claude/tools/supersession_index.py > .claude/board/SUPERSESSION-INDEX.md"
5659
exit 1

0 commit comments

Comments
 (0)