perf+fix(speicher): Tastendruck schreibt nur den Spiegel; Quota-Fehler werden gemeldet (D82)

saveSrc() serialisierte bei jedem Tastendruck ALLE Dokumente in
werkbaum-docs. Jetzt schreibt der Tastendruck nur noch den Spiegel
werkbaum-src (ein Text); das volle Array schreiben die Flush-Punkte
(Wechseln/Anlegen/Löschen/Umbenennen, pagehide, verborgener Tab). Beim
Laden gewinnt der Spiegel für das aktive Dokument — zwingend VOR dem
Nachziehen mitgelieferter Fassungen, sonst dreht er sie zurück.

Und: persistDocs schluckte Speicherfehler still — bei voller Quota lief
der Editor scheinbar normal weiter, der Verlust fiel erst beim Neuladen
auf. Jetzt meldet die persistente Warnung storeFailed (9 Sprachen),
zuoberst, bis ein Schreiben wieder gelingt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-27 06:43:10 +02:00
co-authored by Claude Fable 5
parent ca4c6f98d8
commit 4f34454075
5 changed files with 142 additions and 7 deletions
+12 -1
View File
@@ -144,11 +144,22 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
- Zustand wird im `localStorage` gehalten (Server-Dokumente ausgenommen): `werkbaum-lang`
(Sprache), `werkbaum-docs` (JSON-Array der Dokumente `[{id,name,text}]`),
`werkbaum-active` (id des aktiven Dokuments), `werkbaum-src` (Spiegel des
aktiven Texts, Abwärtskompatibilität), `werkbaum-ui` (JSON: Modus, verworfene,
aktiven Texts), `werkbaum-ui` (JSON: Modus, verworfene,
günstigster Pfad, Split-Zustand inkl. `--col`/`--drow`, Zoom, Vollbild). Neue
GUI-Einstellungen in `saveUI()`/`restoreState()` mitführen; `saveUI` liefert
während `restoring===true` nichts, damit das Wiederherstellen nicht sofort
zurückschreibt.
**Persistenz ist geteilt (D82):** Der Tastendruck schreibt über
`persistActiveText()` NUR den Spiegel `werkbaum-src`; das volle Array
schreibt `persistDocs()` an Flush-Punkten (Wechseln/Anlegen/Löschen/
Umbenennen, `pagehide`, verborgener Tab) — es serialisiert ALLE Dokumente,
nie wieder in einen Tastendruck-Pfad hängen. Beim Laden **gewinnt der
Spiegel** für das aktive Dokument (`loadDocs`), und zwar zwingend **vor**
`seedShippedDocs()` — danach drehte der ältere Spiegel eine frisch
nachgezogene Fassung zurück und das Dokument gälte für immer als
bearbeitet. Scheitert ein Write (Quota), meldet die persistente Warnung
`storeFailed` (`noteStore()`, rendert nur an der Flanke) — nie wieder
still schlucken.
- Dokumente (D22): mehrere umschaltbare Notationstexte. `loadDocs()` migriert bei
fehlendem `werkbaum-docs` den bestehenden `werkbaum-src` (oder `INITIAL`) in
**ein** Dokument; `initDocs()` (Aufruf **nach** `applyLang`) holt den aktiven