* Autosave relies on the guarded write instead of pausing restored or moved tabs
Delete the pendingDiskBaselineVerification and pendingLiveDiskVerification
pause flags. Every editor save is already a guarded write; a refusal raises
the changed-on-disk banner, which is what stops autosave until an explicit
save.
A guarded write now succeeds when disk changed but already holds exactly the
text being saved (local/host compare is byte-exact; client-side fallbacks
compare decoded text and refuse when it holds U+FFFD), so a restored draft
that matches disk goes clean instead of showing a banner.
The restore scan only raises the banner early for tabs that arrive dirty; a
watch resync no longer re-checks dirty tabs.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(editor): skip guarded saves when disk is already identical
Return a compatible optional no-op result from hosts and client fallbacks, clean the tab, and clear its provisional self-write stamp without rewriting identical bytes.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(editor): refuse lossy automatic saves, keep identical-skip on older hosts, flag dirty tabs on resync
- Autosave and pre-restart saves refuse when disk text can't be decoded losslessly, so a
baseline that decoded to U+FFFD can't authorize overwriting different bytes.
- New files.write.identical-noop.v1 capability; for hosts with only the v1 guarded write the
client compares first, skips identical saves, then delegates to the host's guarded write.
- Watch resync compares dirty tabs against disk and shows the changed-on-disk banner.
- Local guarded writes check for identical content before the write-only regular-file probe.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(editor): tell non-UTF-8 files apart from disk changes, and quiet false resync banners
- Local guarded writes judge losslessness by bytes, so a valid UTF-8 file containing U+FFFD
autosaves again. A file that really isn't UTF-8 is refused with its own reason, 'not-utf8'
(older clients read it as 'changed'), which pauses autosave for that file with one notice
until an explicit save converts it.
- A watch resync whose disk read fails leaves dirty tabs alone; the guarded save still catches
a real conflict.
- Resync and restored-tab checks treat disk holding the tab's own just-written save as an echo.
- On hosts with only the v1 guarded write, only automatic saves read the file first; explicit
saves go straight to the host's guard.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(editor): lift the non-UTF-8 autosave pause when its edits end, and report disk changes first
- The pause is released once no dirty tab of the file remains (close, reload from disk,
discard), so a reopened or reloaded file's next autosave asks the host again and notifies.
- Client-side precondition checks compare the signature before looking for U+FFFD, so an
external rewrite shows the changed-on-disk banner rather than the non-UTF-8 notice.
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Preview HTML files by default across file-opening flows
* Centralize workspace file opening and HTML preview routing
- Preserve source, diff, and host-safety behavior across all entry points
- Reuse previews within the requested editor group and support branch HTML files
* Respect working tree state when opening HTML previews
* Route HTML links through owning workspaces and editors
* Preserve HTML preview state and refresh changed local files
* Resolve HTML preview hosts from workspace ownership
* Update file-opening tests for HTML preview routing
* refactor(protocol): each area owns its published runtime capability list
RUNTIME_CAPABILITIES now spreads one array per area instead of a flat
hand-appended list, and runtime-capability-constants.ts is split into
the areas that own each constant. The published set is unchanged and
pinned by an exact sorted test.
* test: preserve capability baseline while allowing additions