47cc733026
Code-review follow-up on the F11 branch (5966907..1564ef5). Three real findings: - CRITICAL — pure-insertion hunks were born-orphaned. A document rewrite that INSERTS text produced a zero-width hunk (start==end) → buildFingerprint yields empty fp.text → anchorer.resolve orphans an empty needle → the proposal could never be accepted (silently). diffToHunks now anchors every zero-width insertion to an adjacent source token (anchorInsertion): the range absorbs the token and the replacement keeps it, so net text is identical but fp.text is non-empty and resolvable. New unit tests: applying hunks always reconstructs the rewrite (substitute/delete/insert/multi); insertions are never zero-width. New host E2E ACCEPTS a rewrite-with-insertion end to end and asserts accept-all reconstructs the intended document (also covers sequential multi-hunk accept). - IMPORTANT — renderPlain cross-block fidelity. The per-block off-mode rendering (SLICE-2) can't resolve a reference-link definition in a separate block. Documented as a conscious tradeoff of the operator-locked block-level mapping (§6.7) — renderReview already rendered per-block, so this keeps both modes consistent — with a characterization test + a docstring note. - MINOR — F11 proposals now carry a turnId (one per Ask-Claude gesture, shared across a document rewrite's N hunks), matching the editor-menu editSelection path so a rewrite groups as one agent turn. 208 unit + 9/9 F11 host E2E green. (The lone red E2E is a pre-existing, F11-independent undoMarks timing flake — proven by isolation: it fails identically with all F11 tests removed.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>