fix(editor): „nur ansehen" gilt jetzt dem Dokument, nicht nur dem Textfeld — auch das Diagramm faltet dort nicht mehr
Nutzer-Einwand, folgerichtig aus dem Vorgänger-Commit: Wenn Falten eine Änderung ist, muss der Nur-Ansehen-Modus auch das Diagramm stillstellen — im haltenden Fenster natürlich weiter nicht. Es war schlimmer als eine fehlende Sperre: `readonly` hielt gar nichts auf. `replaceTextUndoable` fällt auf `src.value = neu` zurück, wenn `execCommand` scheitert, und eine Zuweisung an `value` schreibt auch in ein schreibgeschütztes Feld. Nachgemessen: Ein Klick auf das Falt-Zeichen im Nur-Ansehen-Fenster setzte `- > Ast A (M)` in Textfeld UND Speicher — der Modus war nur eine Beschriftung. Gesperrt wird jetzt an der Schreibstelle: eine Zeile in `replaceTextUndoable` weist jeden programmatischen Schreibzugriff ab (Falten, Durchschalter, „aus Taiga übernehmen", früherer Stand, ID-Kurzform). Dazu ruhen die Gesten selbst, damit nichts still ins Leere geht — toggleFold und der Durchschalter kehren früh um, Falt-Zeichen und Knopf treten zurück und nehmen keinen Klick an (body.viewonly), und im Knoten-Fenster entfallen die Aktionen, die in die Zeile schreiben. „Nach Taiga schreiben" bleibt: Es fasst den Plan nicht an. Ansicht bleibt Ansicht — Zoom, Modus, Pfad, Export, Sprünge unverändert bedienbar. Nachgemessen mit zwei Fenstern: Chip, Tastatur und Durchschalter lassen im Nur-Ansehen-Fenster Text und Speicher unangetastet; im haltenden Fenster faltet dieselbe Geste weiter; verlässt es das Dokument, wird das andere von selbst wieder beschreibbar und faltbar. SPEC §9, D94-Nachtrag 3 und CHANGELOG nachgezogen; 666 Tests grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2a58951138
commit
2d78baf407
@@ -25,6 +25,7 @@ reverse.
|
||||
- The other-window warning now names the document and says whether it is open in the app or in the browser — and stays silent when nothing collides
|
||||
- Fix: in the "open in another window" dialog the list of other documents squeezed its buttons until the names ran into each other — picking one is a dropdown now, one line tall however many documents you have
|
||||
- The two-window warning says "whichever change is saved last wins" now instead of "the last keystroke" — folding a branch in the diagram writes to the text too, so it joins the same race
|
||||
- "View only" really is view only now: while the document is held by another window, the diagram's fold marks stay put too — folding writes to the text and used to slip past the read-only text area; the window holding the document folds as before
|
||||
- An MCP server for AI agents recorded as planned: it lives in the backend, runs the one JS parser through GraalJS, hands plans to Claude Code and other agents as resources and tools over streamable HTTP, and writes changes as conflict-safe line diffs — no new runtime, spelled out in an RFC before it is built
|
||||
|
||||
## 2026-08-28
|
||||
|
||||
@@ -9040,6 +9040,48 @@ Sauber wäre, auch dort im Hintergrund zu warten (`waitInBackground`) und
|
||||
die Warnung zu räumen, sobald die Sperre ankommt — dieselbe Mechanik wie
|
||||
bei „nur ansehen", nur ohne den Schreibschutz.
|
||||
|
||||
**Nachtrag 3 — „nur ansehen" galt nur dem Textfeld; jetzt gilt es dem
|
||||
Dokument (2026-09-02).** Folgerichtiger Nutzer-Einwand aus Nachtrag 2:
|
||||
Wenn Falten eine Änderung ist, muss der Nur-Ansehen-Modus auch das
|
||||
Diagramm stillstellen — „in dem ersten Fenster soll das natürlich weiter
|
||||
funktionieren."
|
||||
|
||||
**Es war schlimmer als eine fehlende Sperre: `readonly` hielt gar nichts
|
||||
auf.** `replaceTextUndoable` fällt auf `src.value = neu` zurück, wenn
|
||||
`execCommand` scheitert (D14: „der richtige Zustand geht vor der
|
||||
Rückgängig-Historie") — und eine Zuweisung an `value` schreibt auch in ein
|
||||
schreibgeschütztes Feld. Nachgemessen im Nur-Ansehen-Fenster: Ein Klick
|
||||
auf das Falt-Zeichen setzte `- > Ast A (M)` in Textfeld **und** Speicher.
|
||||
Der Modus war also nur eine Beschriftung.
|
||||
|
||||
**Gesperrt wird jetzt an den Schreibstellen, nicht am Feld.** Eine Zeile
|
||||
in `replaceTextUndoable` weist im Nur-Ansehen-Modus jeden programmatischen
|
||||
Schreibzugriff ab — das deckt Falten, Falt-Durchschalter, „aus Taiga
|
||||
übernehmen", das Laden eines früheren Stands und die ID-Kurzform in einem
|
||||
Griff. Dazu ruhen die **Gesten** selbst, damit nichts still ins Leere
|
||||
geht: `toggleFold` und der Durchschalter kehren früh um, die Falt-Zeichen
|
||||
und der Knopf treten zurück und nehmen keinen Klick an (`body.viewonly`),
|
||||
und im Knoten-Fenster entfallen die Aktionen, die in die Zeile schreiben —
|
||||
Story/Task anlegen, Ticket verknüpfen, „übernehmen". **„Nach Taiga
|
||||
schreiben" bleibt**: Es fasst den Plan nicht an.
|
||||
|
||||
**Alles, was nur die Ansicht ändert, bleibt bedienbar** — Zoom, Modus,
|
||||
Pfad, der Faltzustand aus dem Text, Export, Sprünge. Der Modus sagt
|
||||
„dieses Dokument nicht ändern", nicht „nichts tun".
|
||||
|
||||
**Nachgemessen** mit zwei Fenstern: Im Nur-Ansehen-Fenster lassen Chip,
|
||||
Tastatur (←) und Durchschalter Text und Speicher unangetastet (5 Knoten
|
||||
bleiben 5, `pointer-events: none`, Deckkraft 0,45); im haltenden Fenster
|
||||
faltet dieselbe Geste unverändert und schreibt `> Ast A`; verlässt das
|
||||
haltende Fenster das Dokument, wird das andere von selbst wieder
|
||||
beschreibbar **und** faltbar (`> Ast B` geschrieben). Vorher, zur
|
||||
Gegenprobe: derselbe Klick schrieb im Nur-Ansehen-Modus in den Speicher.
|
||||
|
||||
**Benannt, nicht behoben:** Menüwege, die in den Text schreiben (früheren
|
||||
Stand laden, „Original wiederherstellen"), sind im Nur-Ansehen-Modus zwar
|
||||
wirkungslos — die Sperre greift —, ihre Einträge stehen aber weiterhin da.
|
||||
Sie auszugrauen ist der nächste kleine Schritt, wenn es jemanden stört.
|
||||
|
||||
**Offen bleibt die Handarbeit** (RFC §10): installierte PWA neben einem Tab,
|
||||
Firefox, Safari, ein Browser ohne Locks-API. Werkzeuggrenzen wie gehabt —
|
||||
die Browser-Fläche war verborgen, getippt wurde per `value` + `input`
|
||||
|
||||
+4
-2
@@ -963,8 +963,10 @@ Verlustfall hält jedes Fenster, solange ein nicht-`live:`-Dokument vorn
|
||||
ist, eine **Sperre** (Web Locks API) auf es — atomar, und sie fällt von
|
||||
selbst, wenn das Fenster schließt. Bekommt das zweite Fenster sie nicht,
|
||||
zeigt es einen Dialog mit drei Auswegen: anderes Dokument öffnen, hier nur
|
||||
ansehen (Textfeld schreibgeschützt, wird von selbst beschreibbar, sobald
|
||||
das andere Fenster loslässt) oder trotzdem hier bearbeiten — dann gewinnt
|
||||
ansehen (**das ganze Dokument ist dann schreibgeschützt**: Textfeld wie
|
||||
Diagramm — auch die Faltmarken lassen sich dort nicht umklappen, denn das
|
||||
schriebe in den Text; es wird von selbst wieder beschreibbar, sobald das
|
||||
andere Fenster loslässt) oder trotzdem hier bearbeiten — dann gewinnt
|
||||
die **zuletzt gespeicherte Änderung**, und die Warnung nennt das Dokument.
|
||||
Änderung heißt dabei nicht nur Tippen: Auch das Falten im Diagramm schreibt
|
||||
in den Text (§9, `>`/`<`) und nimmt an diesem Wettlauf teil. Das andere
|
||||
|
||||
Reference in New Issue
Block a user