Phase 1 als erledigt markiert (bcd3585), verifikation durch die echten
messwerte ersetzt statt der vorab-erwartung. Deploy-schritt nach oben
gezogen, weil der fix ohne ihn nicht wirkt.
Neu dokumentiert: die falsche annahme zu warum-dein-ki-gedaechtnis-luegen-muss
(liegt auf keinem relay, outbound-problem), lang=de bei englischem post,
bootstrap-relay ohne events, fehlende fmt-durchsetzung. Messdaten pro relay
angehaengt, damit spaetere laeufe vergleichbar sind.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Der post 'protocol-anthropology' erschien in der uebersicht, lieferte unter
/protocol-anthropology/ aber 404: das event liegt nur auf relay.primal.net,
waehrend nos.lol und relay.tchncs.de die uebrigen 27 posts halten und primal
diese nicht liefert. loadReadRelays nahm bisher die NIP-65-liste ODER den
fallback — je nach codepfad fehlte damit entweder der neue post oder fast
alle alten. Jetzt vereinigungsmenge beider listen, normalisiert (trailing
slash, case) und dedupliziert.
FALLBACK_READ_RELAYS um 'primal.net' und 'relay-rpi.edufeed.org' ergaenzt:
das sind andere hosts als 'relay.primal.net'/'relay.edufeed.org', keine
schreibweisen — sie stehen so in der echten NIP-65-liste.
Das 60%-antwort-quorum ersetzt durch eine untergrenze von 2 relays MIT
events. Zwei gruende: der fetcher resolved bei timeout mit leerem array und
zaehlt damit als "geantwortet" (die quote mass erreichbarkeit, nicht daten),
und mit der groesseren union-liste liefern regulaer mehrere relays 0 events
(gemessen: 6 von 11) — das haette ohne echten fehler hard-gefailt.
Verifiziert: snapshot schreibt 28 statt 27 posts, prerender erzeugt
build/protocol-anthropology/index.html mit korrektem titel und inhalt.
36 tests gruen.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Alle 6 etappen umgesetzt, live auf joerg-lohrer.de seit 2026-04-28.
README im archive aktualisiert, alter prerender-plan (2026-04-21,
nicht umgesetzt) als "abgeloest durch 2026-04-28" markiert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bei der umsetzung von task 4.2 stellte sich heraus, dass svelte
<svelte:head> nicht in einem {#if}-block stehen darf. Plan-code
korrigiert von
{#if snapshot}<svelte:head>...</svelte:head>{/if}
zu
<svelte:head>{#if snapshot}...{/if}</svelte:head>
Semantisch identisch (head-content erscheint nur wenn snapshot da ist),
aber svelte-konform.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
User-feedback: <script type="application/ld+json"> kann svelte direkt
rendern. Kein @html-Notausgang noetig, sauberere variante mit
auto-escape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Frischer plan gegen die ueberarbeitete spec (fallback_url raus,
OG-default joerg-profil-2024.webp, prerender+runtime-fallback klar
als adapter-static-default). Sechs etappen, jede einzeln testbar
und rollback-bar:
1. renderMarkdown auf isomorphic-dompurify (node-faehig)
2. Snapshot-modul (deno) mit 9 testbaren cores + cli
3. Snapshot in CI
4. Detail-route auf prerender mit runtime-fallback
5. Runtime-fallback entfernen (snapshot ist quelle)
6. lftp mirror in drei phasen (optional, nicht-blockierend)
Alter plan bleibt im archive als geschichte.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Alle 6 plaene unter docs/superpowers/plans/archive/. Davon 5 abgearbeitet
(SPA, publish-pipeline, 3x multilingual), 1 eingefroren (prerender-snapshot).
Checkboxen wurden waehrend der umsetzung nicht gepflegt — verbindlicher
stand ist STATUS.md und die jeweilige spec, das archive/README.md macht
die zuordnung sichtbar.
plans/ bleibt mit .gitkeep als verzeichnis bestehen, damit neue plaene
sofort wieder dort landen koennen.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- neue sprach-variante content/posts/en/bible-selfies/ verweist auf dt. original
- dt. bibel-selfies verweist zurück auf bible-selfies
- plan 2/3: npm test → npm run test:unit (existing script name)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- spec publish-pipeline aktualisiert: blossom-only (rsync-legacy-pfad raus)
- plan publish-pipeline (24 tasks in 12 phasen), blaupausen-tauglich:
alle projekt-konstanten via env (BUNKER_URL, AUTHOR_PUBKEY_HEX,
BOOTSTRAP_RELAY, CONTENT_ROOT, CLIENT_TAG, MIN_RELAY_ACKS)
- spec bild-metadaten-konvention (phase 1, yaml-basiert)
- wiki-entwurf deutsch + englisch: inline-markdown-konvention zur
bildattribution mit mapping zu nip-92 imeta-tags. konvention für
menschen, parser passt sich an; bei ambiguität eskalation zur
redaktion statt stillem raten
- redaktions-checkliste für bild-durchgang (abgearbeitet, bleibt
zum abgleich bei späteren migrationen)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deckt die vollständige SPA-Spec ab: Setup + adapter-static, Daten-
ebene (Relay-Pool, Loader, Profil, Markdown, Signer), Routing mit
Legacy-URL-Normalisierung, Tag-Filter, Reactions, NIP-07-Kommentare.
TDD für pure Transformationen (URL-Parser, naddr, Markdown), E2E mit
Playwright für Happy-Paths.
Deploy-Ziel: svelte.joerg-lohrer.de. spa.joerg-lohrer.de bleibt als
Vanilla-Mini-Spike-MVP erhalten (Referenz-Verhalten).
Publish-Pipeline hat eigene Spec und bekommt separaten Plan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>