97ccbee461b306b00a47b6e9ffb990dc7c430cac
A manual Save during Publish sent a second save with the same base_rev; the loser 409'd against its own tab (and could abort the publish). - useWhpApi: every save runs through one in-flight promise (SaveGuard saveInFlight). A save requested while one is out waits, then sends only if still dirty, with the rev the first returned; payload is read from the editor at send time. Forced (empty/overwrite) saves always send. - Save buttons are disabled while publishing. - Pill: a conflict reads 'Unsaved changes' (modal open) from Save and from Publish alike; a never-saved site (load rev null) reads 'Not saved yet'. - Autosave interval reads runSave through a ref, so editing can't keep restarting it and starve autosave. - Fix stale 'Throws like exportBodyHtml' comment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Languages
TypeScript
75.9%
JavaScript
12.5%
HTML
8.5%
CSS
2.5%
PHP
0.4%
Other
0.2%