Proposal block shows a diff against the original #58
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Proposal block shows a diff against the original
Summary
As a coauthor, I can see Claude's pending change-recommendation block (the one
I accept or decline) rendered as a diff against the original text, so that I
can see exactly what is changing rather than eyeballing two full blocks.
Problem / pain
The pending proposal block today renders the original and the proposed text as
two separate full blocks —
<del>the whole "before" followed by<ins>thewhole "after" (
trackChangesModel.ts:715-716) — with no word-level diffbetween them. On anything but a wholesale rewrite this is noisy and hard to
read: a one-word fix shows the entire paragraph struck through and the entire
paragraph re-inserted, and the reviewer has to visually diff the two themselves
to find what actually changed before deciding to accept or decline. The rest of
the track-changes review rendering already shows proper inline diffs
(
wordMergedMarkdown()/diffWords(),trackChangesModel.ts:431-438), so theproposal block reads as inconsistent and lower-fidelity than the surrounding
review.
Who feels it
The human coauthor reviewing a pending Claude proposal — every accept/decline
decision goes through this block.
Desired outcome / value
The reviewer can see, at a glance, precisely what Claude changed in a
proposal — the specific words removed and added in context — so accept/decline is
a fast, confident decision instead of a manual two-block comparison. The proposal
block matches the fidelity of the rest of the review surface.
Acceptance — "done right"
proposed: removed words struck inline, inserted words highlighted, unchanged
words shown once as context (not duplicated across two full blocks).
block" rendering (same struck/inserted styling, ideally the same
wordMergedMarkdownpath).changes.
block replacement, and an insertion (no original) all render coherently.
Scope / non-goals
In scope: how the pending proposal block is rendered in the review preview —
showing a word-level diff against the original instead of two full
<del>/<ins>blocks.
Non-goals:
is what it shows.
already does this.
Assumptions · constraints · dependencies
ProposalViewalready carries bothreplaced(original) andreplacement(proposed) text (
proposalController.ts:81-95), so the diff can be computedfrom existing data — no new state needed.
(
wordMergedMarkdown(),trackChangesModel.ts:431-438); the naturalimplementation is to route
proposalBlockHtml()through it. (Solution hint, nota mandate.)
Source / signal
Self-originated — capture session vscode-cowriting-plugin-0052
(2026-06-15). Dev observation: "the claude change recommendation block (which
user will accept or decline) should show the diff with the original." Current
behavior (two full
<del>/<ins>blocks, no word diff) confirmed by readingtrackChangesModel.tsproposalBlockHtml().Priority (WSJF)
Provisional: Value 6 · Time-criticality 3 · Opportunity-enablement 2 ÷ Size 2 =
~5.5.
priority/P2— directly improves the core accept/decline decision thewhole propose/accept loop hinges on, and is small (reuses the existing word-diff
path).
Decomposition
Single increment (Story). Tasks:
proposalBlockHtml()through the word-level diff(
wordMergedMarkdownor equivalent) usingreplaced→replacement.preview.