From fd093dff5ef593ec278d226d446faa3a92d21747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Lohrer?= Date: Tue, 21 Apr 2026 17:08:10 +0200 Subject: [PATCH] docs: markdown-rendering aus snapshot in svelte-build verschoben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Snapshot liefert content_markdown, nicht content_html. Rendering (marked + DOMPurify + highlight.js) passiert im SvelteKit-Prerender- Schritt über das bereits existierende \$lib/render/markdown.ts — keine Duplikation in Deno, kein gemeinsames Policy-Modul nötig. Für Blaupausen-Nutzung ist rohes Markdown portabler: alternative Renderer (Astro, Eleventy) bringen eigenen Markdown-Prozessor mit. Konsequenz für Migration: Schritt 1 ist jetzt \"renderMarkdown Node-kompatibel machen\" (isomorphic-dompurify) statt \"shared/ markdown-policy.ts ergänzen\". Co-Authored-By: Claude Opus 4.7 (1M context) --- .../2026-04-21-prerender-snapshot-design.md | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/docs/superpowers/specs/2026-04-21-prerender-snapshot-design.md b/docs/superpowers/specs/2026-04-21-prerender-snapshot-design.md index 92cfff1..9b16fce 100644 --- a/docs/superpowers/specs/2026-04-21-prerender-snapshot-design.md +++ b/docs/superpowers/specs/2026-04-21-prerender-snapshot-design.md @@ -139,15 +139,16 @@ Neues Deno-Modul. Verzeichnis: `snapshot/` als Geschwister zu `publish/`. schreiben wenn verfügbar. Beide tot: primäre URL trotzdem schreiben + Warnung loggen (Blossom ist content-addressed, URL wird später wieder erreichbar sein). -7. **Markdown-zu-HTML-Rendering.** Body des Events wird mit `marked` - gerendert, dann mit `DOMPurify` gemäß gemeinsamer Policy sanitized, - dann Code-Blöcke mit `highlight.js` hervorgehoben. Gemeinsame - Konfiguration (Allowlist, Syntax-Sprachen) liegt als Konstanten-Modul - in `shared/markdown-policy.ts` und wird von Snapshot **und** SPA - identisch importiert. Ergebnis wird als `content_html` ins JSON - geschrieben. Das rohe `content_markdown` bleibt ebenfalls im JSON - (Debuggability, alternative Renderer, die der HTML-Sanitization nicht - trauen). +7. **Kein Markdown-Rendering im Snapshot.** Body des Events wird als + rohes `content_markdown` ins JSON geschrieben. Das Rendering zu HTML + übernimmt der SvelteKit-Prerender-Schritt mit dem bereits existierenden + `$lib/render/markdown.ts`-Modul (marked + DOMPurify + highlight.js). + **Begründung:** Der SvelteKit-Build führt `renderMarkdown()` ohnehin + aus; eine Duplikation in Deno wäre doppelter Code-Pfad mit identischer + Policy. Für Blaupausen-Nutzung ist rohes Markdown zudem portabler — + jeder andere Renderer (Astro, Eleventy, …) bringt seinen eigenen + Markdown-Prozessor mit und würde fertiges HTML eher als Bürde + empfinden. 8. **Fallback-Politik für fehlende Felder:** - fehlt `summary` im Event → aus `content_markdown` die ersten 200 Zeichen (Whitespace normalisiert, abgeschnitten an Wortgrenze, @@ -198,8 +199,7 @@ Neues Deno-Modul. Verzeichnis: `snapshot/` als Geschwister zu `publish/`. "alt": "Alt-Text", "mime": "image/jpeg" }, - "content_html": "

…sanitized HTML with highlighted code blocks…

", - "content_markdown": "…full markdown, raw, for debugging or alternative renderers…", + "content_markdown": "…full markdown body, raw — Renderer sanitizes und rendert on demand…", "tags": ["Nostr", "Bibel"], "naddr": "naddr1...", "habla_url": "https://habla.news/a/naddr1...", @@ -290,8 +290,11 @@ Die Route rendert den Snapshot-Content statt Relay-Fetch. Im - `