feat(live): vier Netze gegen stillen Verlust — Zwei-Fenster-Modal, Wachhund, Rettungs-Sicherungen, lokale Stände für Server-Dokumente (D89)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-27 12:51:11 +02:00
co-authored by Claude Fable 5
parent 42d37daf63
commit 408e23f25b
7 changed files with 411 additions and 20 deletions
+8 -1
View File
@@ -148,7 +148,7 @@
- [?] #col.git.diff: Diff between two versions (S)
- [?] #col.git.blame: Who changed this line (S)
- [?] #col.git.branch: A branch per scenario (S)
- [/] #col.live: Live editing, several people at once (XL) :#be.docs
- [/] #col.live: Live editing, several people at once (XXL) :#be.docs
- [^] #col.live.http: Transport over plain HTTP (M) :#be.docs %% no websocket needed
- [^] #col.live.patch: Submit a change as a line diff (S)
- [^] #col.live.feed: Long polling holds the other direction open (S)
@@ -163,6 +163,7 @@
- [^] #col.live.rename: Renaming reaches everyone (S) %% PATCH /title + RENAMED in the feed, see D85
- [^] #col.live.history: Earlier states come from the server (M) %% milestones in the clock menu, rollback for everyone, see D86
- [^] #col.live.name: A self-chosen display name (XS) %% fills "changed by", a claim, not a proof
- [x] #col.live.safe: Unsent work is loud, rescued and never silently discarded (M) %% modal for a second window, watchdog, local backups — see D89
- [-] #col.live.ws: Transport over a websocket (S) %% plain HTTP turned out to be enough
- [-] #col.live.own: A merge algorithm of our own (XL) %% solved problem, do not reinvent
- [?] #mmd: Mermaid plugin (XL)
@@ -983,6 +984,12 @@
Asked once when joining or sharing, kept in the browser, sent with every
patch. Without accounts it is a claim, not a proof.
#col.live.safe
Born from a real loss: two hours of typing that never reached the server
and vanished on reload. A second window raises a modal dialog until one is
closed; a watchdog warns after 30 seconds of unsent changes; and unsent
text is rescued into the local backups before anything overwrites it.
#col.live.cursors
Seeing where the others are. A by-product of the merge layer rather than a
feature in its own right.