Repository navigation
fix(webview): announce a rejected draft that an external write replaces - #458
Merged
Merged
Conversation
A draft the host answered with edit-rejected stays on screen without a carrier in edit-sync, so when a version-advancing external write reseeded the view, both the draft and the Cannot save banner vanished with no notice. applyDocument now raises the existing discard notice for that reseed, excluding the two reseeds that lose nothing: bytes edit-sync still holds on a leading lineage (a readonly Document rewinds the view only) and an EOL-only difference. The real-host test harness gains only what the repro needs: a failing validator switch, edit-rejected delivery and an external write.
7 of 8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When the host rejects an edit ("Cannot save" banner), the draft stays on screen only. If another writer then changed the file, the editor swapped in the new content and dropped both the draft and the banner without telling the user. The editor now shows the existing "local edit discarded" notice in that case.
Changes
src/webview/editor.ts(applyDocument): raise the existing discard notice when a reseed replaces a rejected draft. The predicate is computed before the replace, because the shell clearsserializeErrorright after the snapshot is applied.cm/edit-sync.ts, so a throwing notifier cannot leave the reducer behind the view.test/webview/shell.test.ts: the real-host harness gains a failing-validator switch,edit-rejecteddelivery, an external write, and a way to mark a posted Edit as lost. No new message or notice kind.Related
edit-rejecteddelivery fails, the webview has neither a holder norserializeError, so this notice does not fire. Dropping theserializeErrorcondition would mis-announce ordinary external updates.Test Plan
pnpm compile,pnpm lint, fullpnpm vitest rungreen