🤖 spec: the AHEAD table row still said two shapes
§4.1's value table read "Two shapes, one value — the sibling's log stops short of this revision, or the sibling has no row for this item whatsoever", four sections above the rule that says the no-row case is NOT_VISIBLE and why. The table is the thing an implementer reads first, so it was the more dangerous of the two copies. One shape now, with the reason and the date it changed. Found by the suite session reading this branch at the ref — and it nearly reported the opposite: its first pass grepped for a rule that spans two lines, got zero matches, and came within one message of saying nothing had been fixed. That is a rider on "cite the ref, not the claim" and it is in §1.10: a false negative from a correct ref is worse than not checking, because it arrives with the authority of having looked. A count of zero is a claim like any other. One residue left and it is not fixable from here: main's S2 row still requires AHEAD for a no-row item, so an implementer following memoria today still builds the oracle. It closes when this branch merges.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 file changed,
+9
−1
docs/superpowers/specs/2026-09-03-memoria-design.md+9 −1
diff --git a/docs/superpowers/specs/2026-09-03-memoria-design.md b/docs/superpowers/specs/2026-09-03-memoria-design.md| index 800bfa0..1e97590 100644 |
| --- a/docs/superpowers/specs/2026-09-03-memoria-design.md |
| +++ b/docs/superpowers/specs/2026-09-03-memoria-design.md |
| @@ -586,6 +586,14 @@ memoria merge made on something the suite implied. **When you tell another |
| repository a fact about this one, give the commit it is true at. When one |
| tells you, check it before you rule on it.** |
| +**And a rider the suite session earned the hard way an hour later: citing |
| +the ref is not enough if you read it with a tool that sees one line at a |
| +time.** Its check of this fix grepped for a rule that spans two lines, got |
| +zero matches, and came within one message of reporting that nothing had |
| +been fixed. A false negative from a correct ref is worse than not checking, |
| +because it arrives with the authority of having looked. Read the |
| +surrounding lines; a count of zero is a claim like any other. |
| + |
| **One finding was wrong, and how it was wrong is worth as much.** The |
| review could not resolve `6797bbf` or `4aea8f4` and said §13's blocker was |
| therefore not shown closed. The hashes are correct — they are |
| @@ -1023,7 +1031,7 @@ names as the worst available.** |
| | `VISIBLE` | this person may read this revision | render it | |
| | `NOT_VISIBLE` | this person may not read it | omit it silently — correct, and the only value that may be silent | |
| | `STALE` | the item exists and is readable, but the sibling has moved past this revision | **withhold loudly and refetch.** Not a denial | |
| -| `AHEAD` | the sibling does not have this revision at all: memoria holds history the sibling does not. **Two shapes, one value** — the sibling's log stops short of this revision, or the sibling has no row for this item whatsoever | **withhold loudly and re-announce.** Not a denial, and not a reason to delete | |
| +| `AHEAD` | **the sibling's log stops short of this revision, for an item it still admits.** memoria holds history the sibling does not. **One shape, not two:** an item the sibling has no row for at all is `NOT_VISIBLE`, because `AHEAD` there would tell a caller which ids exist (§4.1 below, suite gate 3). This row read "two shapes, one value" until 2026-09-06 and contradicted the rule four sections down | **withhold loudly and re-announce.** Not a denial, and not a reason to delete | |
| | `UNKNOWN` | the sibling did not answer usefully | withhold loudly | |
| **`STALE` is here because draft 2 did not have it**, and mapped a stale |