feat(paket c): Frühere Stände eines geteilten Dokuments kommen vom Server (D86)
Der Verlaufs-Knopf zeigt bei Geteilten die Meilenstein-Historie des Servers (GET /history, jetzt samt clientId/displayName); Laden ist ein Server-Rollback (POST /restore, ROLLED_BACK — neue Version für alle, nichts geht verloren, mit Rückfrage). Die Kamera legt einen Server-Meilenstein an (pushLive(true), leeres Diff erlaubt); lokale Momentaufnahmen sammelt snapshotNow() für Server-Dokumente nicht mehr — sie enthielten fremde Arbeit und überschrieben sie beim Laden als eigenes Diff. Dazu der Anzeigename: einmal gefragt, im Browser gemerkt, füllt das 'geändert von' der Historie (Behauptung, kein Nachweis). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
1fb11ceba4
commit
53b48bcd42
@@ -19,6 +19,9 @@ reverse.
|
||||
|
||||
## 2026-08-27
|
||||
|
||||
- On shared documents the history button shows the server's milestones — loading one is a rollback for everyone, as a new version, nothing lost
|
||||
- The camera button turns the current state of a shared document into a server milestone instead of a local snapshot
|
||||
- Joining or sharing a document asks once for a display name — it fills the history's "changed by" and stays a claim, not a proof
|
||||
- Renaming a shared document now renames it for everyone: the pencil patches the server title, and the change feed hands the new name to every open editor
|
||||
- URL documents lost their pencil — their name is the URL, and a local name would not survive the next load
|
||||
- If Werkbaum is open in a second browser tab, a warning says so — both tabs write the same document list, and the last one to save wins
|
||||
|
||||
@@ -7331,3 +7331,45 @@ den Inhalt stehen; Feed samt Titel; veraltete Version ⇒ 409; leerer Titel ⇒
|
||||
BUILD SUCCESSFUL samt Coverage. Werkzeuggrenze wie in D76-Nachtrag 7: Der
|
||||
Automations-Tab meldet sich dauerhaft als verborgen — der Feed lief nur mit
|
||||
gestellter Sichtbarkeit.
|
||||
|
||||
## D86 — Frühere Stände eines geteilten Dokuments kommen vom Server
|
||||
Paket C der Ungereimtheiten-Liste (D84), der schwerste Punkt: Der
|
||||
Verlaufs-Knopf zeigte bei geteilten Dokumenten die **lokalen**
|
||||
Momentaufnahmen — und die enthalten fremde Änderungen; ein alter Stand hätte
|
||||
beim Laden die Arbeit aller als eigenes Riesen-Diff überschrieben. D76 hatte
|
||||
die Server-Meilensteine für genau diesen Knopf vorgesehen; jetzt sind sie da.
|
||||
|
||||
**Der Verlaufs-Knopf zeigt bei Geteilten die Meilenstein-Historie des
|
||||
Servers** (`GET /history`, jetzt samt `clientId`/`displayName` — das
|
||||
„geändert von"). Gelistet werden die Stände **vor** dem aktuellen („Frühere
|
||||
Stände" eben); rechts steht der Anzeigename des Urhebers. **Laden ist ein
|
||||
Server-Rollback** (`POST /restore {version}`, `ROLLED_BACK`, D76): Der
|
||||
Rücksprung geschieht für alle nachvollziehbar auf dem Server — als neue
|
||||
Version, nichts geht verloren — statt als eigenes Diff dieses Clients.
|
||||
Deshalb mit Rückfrage: Er trifft alle Mitschreiber. **Die Kamera** legt bei
|
||||
Geteilten einen **Server-Meilenstein** an (`pushLive(true)`: ein wartendes
|
||||
Debounce-Diff geht mit, und auch das leere Diff ist erlaubt — es bumpt die
|
||||
Version als Meilenstein, genau das ist „Stand jetzt sichern"). Lokale
|
||||
Momentaufnahmen sammelt `snapshotNow()` für Server-Dokumente **gar nicht
|
||||
mehr** — die Historie führt der Server, und im Menü wären sie ohnehin
|
||||
unsichtbar. Für lokale Dokumente ändert sich nichts.
|
||||
|
||||
**Der Anzeigename** (Punkt 9 der Liste, mit hinein gebaut): Beim ersten
|
||||
Teilen oder Beitreten fragt ein Dialog einmal nach dem Namen —
|
||||
`ensureDisplayName()`, gemerkt im Browser, geht mit jedem Patch mit und
|
||||
füllt das „geändert von" der Historie. Auch die **leere** Antwort wird
|
||||
gemerkt (anonym bleiben ist eine Antwort; Nachfragen bei jedem Öffnen wäre
|
||||
Gängelung), nur Abbruch fragt beim nächsten Mal erneut. Ohne Anmeldung
|
||||
bleibt der Name eine Behauptung, kein Nachweis (D76) — die API-Beschreibung
|
||||
sagt das ausdrücklich.
|
||||
|
||||
**Nachgemessen** Ende-zu-Ende gegen das lokal laufende Backend: Leere
|
||||
Historie zeigt den eigenen Leertext; Tippen + Kamera erzeugt den
|
||||
Server-Meilenstein mit `displayName: Anna`; nach einer zweiten Änderung
|
||||
listet das Menü zwei frühere Stände (der aktuelle fehlt, rechts der Name);
|
||||
der Rollback auf den ältesten stellt den Text im Client zurück und steht auf
|
||||
dem Server als `ROLLED_BACK`-Version 4 mit dem Inhalt von Version 1. Ein
|
||||
lokales Dokument zeigt unverändert seine lokalen Stände. Der Namens-Dialog
|
||||
beim Beitreten blockiert nichts (die Automation wies ihn ab — Dokument lädt,
|
||||
nichts gemerkt, nächstes Mal wird wieder gefragt). 531 Frontend-Tests und
|
||||
der Backend-`check` grün.
|
||||
|
||||
@@ -155,6 +155,8 @@
|
||||
- [?] #col.live.cursors: Cursors and who else is here (S)
|
||||
- [ ] #col.live.owner: An owner password guards managing a shared plan (M) %% returned once on creation, admin can reclaim
|
||||
- [x] #col.live.rename: Renaming reaches everyone (S) %% PATCH /title + RENAMED in the feed, see D85
|
||||
- [x] #col.live.history: Earlier states come from the server (M) %% milestones in the clock menu, rollback for everyone, see D86
|
||||
- [x] #col.live.name: A self-chosen display name (XS) %% fills "changed by", a claim, not a proof
|
||||
- [-] #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)
|
||||
@@ -924,6 +926,17 @@
|
||||
and the change feed hands the new title to every client in plain text. URL
|
||||
documents lost their pencil instead - their name is the URL.
|
||||
|
||||
#col.live.history
|
||||
On a shared document the clock button lists the server's milestone history
|
||||
instead of local snapshots - those would contain other people's work and
|
||||
overwrite everyone when loaded. The camera makes a server milestone, and
|
||||
loading an earlier state is a server-side rollback: a new version for
|
||||
everyone, nothing lost.
|
||||
|
||||
#col.live.name
|
||||
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.cursors
|
||||
Seeing where the others are. A by-product of the merge layer rather than a
|
||||
feature in its own right.
|
||||
|
||||
Reference in New Issue
Block a user