From c6f42f8da1c37ad65b7ef038d33bd09d0031fac9 Mon Sep 17 00:00:00 2001 From: mhoennig Date: Sat, 22 Aug 2026 19:34:00 +0200 Subject: [PATCH] docs: Beispiel-Dokument zeigt die neuen Features (INITIAL, D27-Nachtrag) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das mitgelieferte „Example" führt jetzt alles vor: eingeklapptes Concept-Kapitel (>) mit "-Hinweis am Wurzelknoten, Knoten-ID #cms mit Langbeschreibung hinter ---, eine Abhängigkeit samt bewusster Diskrepanz (Landing page [x], effektiv geplant — Farbe + [x]-Marke + gepunktete Kante), eine Zugabe (+ Dark mode) und die Hosting-Wahl als =-Gruppe. Damit Bestandsnutzer die neue Fassung sehen, zieht seedShippedDocs das Beispiel jetzt wie das Werkbaum-Dokument per Fingerabdruck nach (werkbaum-seeded-example, D27-Nachtrag) — nur bei unverändertem Text, der Reset setzt beide Merker. 21 Knoten, 0 Warnungen. Co-Authored-By: Claude Fable 5 --- docs/DECISIONS.md | 11 +++++++++++ frontend/CLAUDE.md | 5 ++++- frontend/src/app.js | 33 ++++++++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 6ca2993..2d38038 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -698,6 +698,17 @@ Der Altwert `'1'` aus der ersten Fassung sagt nichts über den Textstand; dort wird bewusst nichts überschrieben, nur der Merker ersetzt. Wer aus dieser kurzen Zwischenfassung kommt, holt den aktuellen Stand über den Reset. +**Nachtrag — das Nachziehen gilt jetzt auch für das Beispiel-Dokument.** Als +das Beispiel die neuen Notations-Features (IDs, Abhängigkeiten, `=`, Falten, +Beschreibungen) vorführen sollte, stand es vor demselben Problem wie damals +der Werkbaum-Plan: Ohne Merker erreicht eine neue INITIAL-Fassung +Bestandsnutzer nie — ihr unverändertes Beispiel sieht nur wie „bearbeitet“ +aus. Ein zweiter Fingerabdruck (`werkbaum-seeded-example`) überträgt die +D27-Regeln wörtlich: nachgezogen wird nur, solange der Text exakt die zuletzt +ausgelieferte Fassung ist; bearbeitete Texte werden nie angefasst; ein +gelöschtes Beispiel wird vom Nachziehen nicht wiederbelebt (das macht bei +Bedarf `deleteDoc`/Reset). Der Reset setzt beide Merker mit. + ## D28 — „Was ist neu?": neu in Produktion, gelber Strahlenkranz Dokumente von außen (mitgeliefert, D27; per `?sourceUrl=`, D23) ändern sich, ohne dass der Betrachter es merkt. Sie zeigen deshalb, was sich seit seinem diff --git a/frontend/CLAUDE.md b/frontend/CLAUDE.md index 6efd3d5..7abdc92 100644 --- a/frontend/CLAUDE.md +++ b/frontend/CLAUDE.md @@ -102,7 +102,10 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der - Beispiel-Dokument (D22): reservierte id `EXAMPLE_ID = 'example'`, fester englischer Name `EXAMPLE_NAME = 'Example'` (nicht lokalisiert). `loadDocs()` adoptiert einen Alt-Zustand (zufällige id, „Beispiel") nur, wenn dessen - `text === INITIAL` (nie echte Nutzerinhalte). `resetToDefaults()` setzt **nur** + `text === INITIAL` (nie echte Nutzerinhalte). Eine neue INITIAL-Fassung wird + wie beim Werkbaum-Dokument per Fingerabdruck nachgezogen + (`werkbaum-seeded-example`, D27-Nachtrag) — nur bei unverändertem Text; der + Reset setzt beide Merker. `resetToDefaults()` setzt **nur** das Beispiel-Dokument (id `example`) auf `INITIAL`/„Example" zurück und verwirft `werkbaum-ui`/`werkbaum-lang`/Update-Flags — **andere Dokumente bleiben stehen** (nicht mehr pauschal alle `werkbaum-*` löschen!). Das letzte gelöschte Dokument diff --git a/frontend/src/app.js b/frontend/src/app.js index 7f50e4c..968d584 100644 --- a/frontend/src/app.js +++ b/frontend/src/app.js @@ -12,7 +12,8 @@ import WERKBAUM_DOC from '../../docs/examples/werkbaum.werkbaum?raw'; const INITIAL = `%% Project structure – Sprint 14 [~] Website relaunch (XL) https://wiki.example.com/relaunch - - [x] Concept (M) + " Folded chapters are done — click the ▸ to peek inside. + - > [x] Concept (M) - [x] Audience analysis (S) - [x] Sitemap (XS) - [~] Implementation (XL) @@ -23,13 +24,20 @@ const INITIAL = `%% Project structure – Sprint 14 - [ ] Android (M) - [ ] iOS (M) - [!] Backend (L) @ben @carla - - [ ] CMS integration (M) + - [ ] CMS integration #cms (M) | [ ] WordPress | [?] Headless CMS | [-] Custom build %% too much effort - - [?] Hosting (M) - | Cooperative Community Cloud https://hostsharing.net - | On-premise`; + - [x] Landing page (S) :#cms %% done, but effectively waiting for the CMS + + [?] Dark mode (S) %% nice to have, never on the cheapest path + - [?] Hosting (M) %% exactly one of these, hence = + = [ ] Cooperative Community Cloud https://hostsharing.net + = [?] On-premise + +--- +#cms + The articles live in the CMS, so everything that shows content + depends on it — the dotted arrows point at what is needed.`; const src = document.getElementById('src'); const out = document.getElementById('out'); @@ -2029,6 +2037,7 @@ fsBtn.addEventListener('click', () => { const LS_UI = 'werkbaum-ui', LS_SRC = 'werkbaum-src'; const LS_DOCS = 'werkbaum-docs', LS_ACTIVE = 'werkbaum-active'; const LS_SEEDED = 'werkbaum-seeded'; /* mitgelieferte Dokumente schon angelegt? */ +const LS_SEEDED_EXAMPLE = 'werkbaum-seeded-example'; /* Fingerabdruck der ausgelieferten INITIAL-Fassung (D27-Nachtrag) */ let restoring = false; /* unterdrückt Speichern während des Wiederherstellens */ let hadStoredUI = false; /* gab es beim Laden schon gespeicherte GUI-Einstellungen? */ @@ -2094,6 +2103,19 @@ function seedShippedDocs(){ doc.text = WERKBAUM_DOC; } try{ localStorage.setItem(LS_SEEDED, fp); }catch(_){} + /* Dasselbe Nachziehen für das Beispiel-Dokument (D27-Nachtrag): Ohne den + Merker erreichte eine neue Fassung von INITIAL Bestandsnutzer nie — + ihr unverändertes Beispiel sähe nur wie „bearbeitet" aus. Nachgezogen + wird nur, solange der Text exakt die zuletzt ausgelieferte Fassung ist; + ein gelöschtes Beispiel wird hier nicht wiederbelebt. */ + const exFp = fingerprint(INITIAL); + let exSeen = null; + try{ exSeen = localStorage.getItem(LS_SEEDED_EXAMPLE); }catch(_){} + const ex = docs.find(d => d.id === EXAMPLE_ID); + if(exSeen && exSeen !== exFp && ex && fingerprint(ex.text) === exSeen){ + ex.text = INITIAL; + } + try{ localStorage.setItem(LS_SEEDED_EXAMPLE, exFp); }catch(_){} /* Nur vergleichen, solange der Text der ausgelieferte ist — hat der Nutzer ihn bearbeitet, gibt es keine saubere Vergleichsbasis (D28). */ const shipped = docs.find(d => d.id === WERKBAUM_ID); @@ -3162,6 +3184,7 @@ function resetToDefaults(){ /* Merker auf den jetzt ausgelieferten Stand setzen (D27) — sonst hielte ein Altwert die spätere Nachzieh-Logik davon ab, den Text je zu aktualisieren. */ try{ localStorage.setItem(LS_SEEDED, fingerprint(WERKBAUM_DOC)); }catch(_){} + try{ localStorage.setItem(LS_SEEDED_EXAMPLE, fingerprint(INITIAL)); }catch(_){} activeId = EXAMPLE_ID; persistDocs(); logUpdate('🔄 Mitgelieferte Dokumente und Einstellungen zurückgesetzt');