a73x

ea64b005

Correct the single-revision diff claim in the revision-refs design

a73x   2026-08-09 18:49

Commit message
Correct the single-revision diff claim in the revision-refs design

The spec said only the interdiff path needed fixing because single-revision
diff three-dots through resolve_base_tree. It diffs against
merge_base(base_tip, head), so after a fast-forward merge the merge-base is
the head and the diff renders empty - every merged patch's historical diff
is unreadable. Found while implementing; tracked as 57575b50.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

docs/superpowers/specs/2026-08-09-patch-revision-refs-design.md
Old New
@@ -106,9 +106,16 @@ and there is no way to reconstruct where an earlier revision stood.
106 `interdiff` (`patch.rs:501-525`) is currently a flat tree-to-tree diff between 106 `interdiff` (`patch.rs:501-525`) is currently a flat tree-to-tree diff between
107 two revision trees with no base awareness. When a rebase separates the two 107 two revision trees with no base awareness. When a rebase separates the two
108 revisions, the result includes every upstream commit rebased over, burying the 108 revisions, the result includes every upstream commit rebased over, burying the
109 author's actual response to review. Single-revision `diff` does not have this 109 author's actual response to review.
110 problem — it three-dots through `resolve_base_tree` — so only the interdiff path 110
111 needs fixing. 111 Single-revision `diff` does not have *that* problem — it three-dots through
112 `resolve_base_tree` — but an earlier draft of this spec claimed it was therefore
113 fine, and that was wrong. `resolve_base_tree` diffs against
114 `merge_base(base_tip, head)`, so once the patch is merged by fast-forward the
115 merge-base *is* the head and the diff renders empty. Every merged patch's
116 historical diff is unreadable, which is when a reviewer is most likely to want
117 it. Tracked as `57575b50`; it is a separate defect from the interdiff, not a
118 consequence of it.
112 119
113 With `base` on each revision, there are two cases. 120 With `base` on each revision, there are two cases.
114 121