From 8f6e54b19a33ea26324e792e566ebe476a77c976 Mon Sep 17 00:00:00 2001 From: BenStullsBets Date: Thu, 2 Jul 2026 18:18:19 -0700 Subject: [PATCH] docs(plan): record the post-execution review wave (#70) Co-Authored-By: Claude Fable 5 --- ...26-07-02-70-inv5-reject-after-interior-edit.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/superpowers/plans/2026-07-02-70-inv5-reject-after-interior-edit.md b/docs/superpowers/plans/2026-07-02-70-inv5-reject-after-interior-edit.md index 47c97e5..9232a87 100644 --- a/docs/superpowers/plans/2026-07-02-70-inv5-reject-after-interior-edit.md +++ b/docs/superpowers/plans/2026-07-02-70-inv5-reject-after-interior-edit.md @@ -504,6 +504,21 @@ Co-Authored-By: Claude Fable 5 " --- +## Post-execution review wave (not in the original tasks) + +A high-effort multi-agent branch review after Task 4 confirmed 10 findings; all +but one were fixed in a follow-up commit on this branch ("harden the +tracked-span revert per branch review"): pure `shiftTracked` in `anchorer.ts` +(+11 unit tests; insertion-at-span-start lands before the span), tracked spans +cleared on document close, rebuild-only resync at `renderAll`, `guard.isReadOnly` +on `revertInPlace`/`finalizeInPlace`, a "Discard proposal (leave text)" action on +the hard-fail warning, CodeLens pair anchored at the tracked span (+1 E2E), +QuickPick batch menu routed through the reporting commands, and one +`clearProposal` helper (also fixes `reject()`'s stale `applied`/`appliedSpans`). +The remaining finding — `resolve()` accepts a single exact occurrence without a +context check, so a duplicated block can hijack any anchor consumer — pre-dates +this fix and is filed as its own issue. + ## Self-review notes - **Issue coverage:** direction (a) → Task 1 (`appliedSpans` fallback); direction (b) → Task 2 (hard failure, warn, keep); direction (c) explicitly rejected (guessing violates INV-11). The issue's repro sketch is Task 1's test verbatim; the "full-loop E2E deliberately rejects only an un-tweaked proposal" note is retired by Task 4; `rejectAll` (same `revertInPlace` seam) is covered by Task 3.