fix(live): der Client stritt mit sich selbst (D76-Nachtrag 9)
Gemeldet: zwei Browser am selben Dokument, einen Knoten zuklappen, und es kommt "Someone changed the same lines. Whose version should win?". Der Feed beantwortet "was ist seit Version N geschehen" - und wer da mitgeschrieben hat, steht nicht in der Frage. Er liefert also die EIGENE Aenderung zurueck, und wacht er im Moment des eigenen Sendens auf, kommt sie an, bevor die Antwort darauf da ist. Die Schattenkopie steht dann noch auf dem Stand davor: Der Client haelt die eigene Aenderung fuer fremd, sieht sie sich mit dem eigenen Text ueberschneiden und fragt. Die Erkennung hatte recht, falsch war nur, wen sie fuer den anderen hielt. Der zweite Browser ist dafuer gar nicht noetig; das Falten ist nur die kuerzeste Geste, die eine ganze Zeile aendert. Auf localhost liegen PATCH- und Feed-Antwort 7 ms auseinander und die PATCH-Antwort gewinnt - der Fehler tritt dort nie auf. Reproduziert mit im Client um 500 ms verzoegerter PATCH-Antwort (eine Reihenfolge, die uebers Netz jederzeit auftritt): PATCH an 200 / FEED an 200 / KONFLIKT-BANNER. Behoben in feedAction() (live.js) - dort steht ohnehin, wann eine Feed-Antwort angewendet werden darf; Gegenprobe: Sperre entfernt => genau die zwei neuen Zusicherungen fallen. Dieselbe Sperre gehoert in die runFeed-Schleife, sonst fragt sie sofort wieder und dreht eine enge Runde uebers Netz. Dabei gefunden: pushLive() las seine Basis erst NACH dem await und nahm damit an, dass sich dazwischen nichts aendert - der Feed brach genau die Annahme und haette die eigene Aenderung ein zweites Mal aufgerechnet. Jetzt vorher festgehalten. Nachgemessen: Falten erzeugt kein Banner mehr, fremde Aenderungen kommen weiterhin an, und der ECHTE Konflikt wird weiterhin erkannt (A haelt ungesendeten Text auf Zeile 1, B aendert dieselbe Zeile). 525 Tests.
This commit is contained in:
@@ -26,6 +26,7 @@ reverse.
|
||||
- "Put on the server" in the document menu turns a local plan into a shared one and puts the link in the address bar
|
||||
- A service endpoint `/api/v1/info` says which build is running — for deploys and monitoring
|
||||
- One `remote` command drives the server: deploy, log, service state, and a database backup that is read back before it is kept
|
||||
- Fix: folding a node in a shared document could ask whose version should win — the editor was arguing with itself, because the change feed hands your own change back to you
|
||||
|
||||
## 2026-08-25
|
||||
|
||||
|
||||
Reference in New Issue
Block a user