# Manual smoke — F4 propose/accept (live turn) Pre-req: Claude Code installed + signed in (the `claude-code` provider rides that login — the extension holds no credentials, INV-8). Run on a real machine, not CI. 1. `npm run build`, then F5 (the EDH opens the committed `sandbox/` playground). 2. Open `playground.md`, select a sentence → right-click → **Ask Claude to Edit Selection** → give an instruction. 3. ✅ A **proposal** appears: the selection gets an amber tint and a "Claude proposes" comment thread shows a `diff` of current → proposed. **The document text is unchanged** (INV-10). 4. Click **✓ Accept Proposal** in the thread title. ✅ The replacement lands and renders Claude-tinted (the F3 attribution substrate); the proposal disappears. 5. Repeat with another selection and click **✗ Reject Proposal**. ✅ The document is untouched; the proposal disappears. 6. Propose again, then save and reload the window. ✅ The pending proposal is restored at its re-resolved range. 7. Failure path: edit the proposed-on text, then try Accept. ✅ Refused with a warning ("target text changed"); undo your edit → Accept works.