From 3f8d3e7592658439443bee383d44da70ab673f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Lohrer?= Date: Sat, 18 Apr 2026 14:30:37 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20handoff/status=20aktualisiert=20?= =?UTF-8?q?=E2=80=94=20delete-event=20erledigt,=20design-todos=20offen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - nip-09-delete-event für duplikat 1744905463975 festgehalten - open-todos ergänzt: kind:5-filter in spa, repo/nostr-konflikt-mgmt, delete-subcommand in pipeline - option 3 (menü+impressum+startseite) als design-todo klargestellt Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/HANDOFF.md | 63 +++++++++++++++++++++++++++++++++++++++++++------ docs/STATUS.md | 6 +++++ 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 529c92d..cf9beef 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -43,17 +43,66 @@ läuft ja schon, ob manuell oder via CI ist für den Cutover egal. Hugo-Altbestand bleibt als Archiv im `hugo-archive`-Branch. -### Option 3 — Menü-Navigation + Impressum in der SPA +### Option 3 — Startseite + Menü-Navigation + Impressum in der SPA -**Unabhängig von allem anderen**, kann parallel gemacht werden. +**Unabhängig von Cutover**, aber Voraussetzung für diesen: ohne Design wäre +die Hauptdomain eine rohe Post-Liste. -- Header-Navigation in `app/src/routes/+layout.svelte` (Home, Archiv, Impressum, - Mastodon-Link) -- `/impressum/`-Route mit rechtlichem Text +- **Startseite** bekommt ein eigenes Design (nicht nur Post-Liste dump) +- **Menü-Navigation** in `app/src/routes/+layout.svelte` (Home, Archiv, + Impressum, Mastodon-Link) +- **Impressum** als Static-Page (SvelteKit-Route `/impressum/`), **nicht** + als Nostr-Event — soll nicht als Blog-Beitrag in Listen erscheinen. + Text ist bereits im `content/`-Ordner (Repo-Quelle); die einzige + rechtlich relevante HTML-Datei, die auf dem Server liegt. -**Aufwand:** 30–60 min. +### Option 4 — SPA respektiert `kind:5`-Deletion-Events -### Option 4 — Pipeline weg von GitHub (self-hosted CI) +**Status:** aktuell filtert die SPA nicht nach NIP-09. Wenn ein Event per +`kind:5`-Referenz gelöscht wurde (z. B. `7f5d08b8…` deletet `89609df5…` +für `d=1744905463975` am 18.04.), zeigen Relays es meist nicht mehr aus — +aber die SPA würde es trotzdem rendern, falls ein Relay es doch liefert. + +**Zu tun:** im `kind:30023`-Loader (`app/src/lib/nostr/...`) einen +Cross-Check auf `kind:5`-Events einbauen. Events, deren Addressable-Pointer +(`30023:pubkey:d-tag`) in einem `kind:5` referenziert ist, werden +gefiltert. Defensive Maßnahme für zukünftige Duplikate / Soft-Deletes. + +### Option 5 — Repo/Nostr-Konflikt-Management + +**Warum:** aktuell ist die Pipeline eine einseitige Straße — Repo → Nostr. +Wenn du via Client (Habla, Yakihonne, Amber) auf Nostr editierst, +überschreibt der nächste Pipeline-Lauf deine Client-Edits mit dem (alten) +Repo-State. Das ist ein echter Datenverlust-Risikofaktor. + +**Zu tun:** +- **Defensiv (`created_at`-Check):** Pipeline liest vor Publish das + aktuelle Event vom Relay und vergleicht `created_at`. Wenn das + Remote-Event neuer ist: Abbruch mit Warnung. +- **Reverse-Sync (`pull-from-nostr`-Subcommand):** liest Events, vergleicht + mit Repo, zeigt Diffs. Manuelle Konfliktauflösung. + +Keine Eile, solange du nicht parallel editierst. Erst relevant, wenn du +dich an Habla & Co. gewöhnst. + +### Option 6 — NIP-09-Delete als Pipeline-Subcommand + +**Status:** heute einmalig per `nak event -k 5 …` mit neu erzeugter Bunker- +URL erledigt (Duplikat `1744905463975`). Das war ein Workaround um das +„already connected"-Problem unserer Pipeline-Signer-Wiederverwendung. + +**Zu tun:** in `publish/src/subcommands/` einen `delete`-Subcommand bauen, +der NIP-09 sauber erledigt und unsere stabile Signer-Identität nutzt. + +``` +deno task publish-delete --slug +# oder +deno task publish-delete --event-id +``` + +Jetzt nicht dringend — nur bauen, wenn der Fall öfter eintritt. + +### Option 7 — Pipeline weg von GitHub (self-hosted CI) **Wann:** Wenn der Optiplex-Server steht und ein zentraler Ort für Dienste existiert. diff --git a/docs/STATUS.md b/docs/STATUS.md index c684056..c2dc0d2 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -120,6 +120,12 @@ Alles in `.env.local` — gitignored, nicht committet. - ✅ **`spa` → `main` gemergt**, GitHub-Actions-Workflow manuell verifiziert (Run #1: signer ok, outbox ok, blossom-liste ok, mode=diff posts=0). **Alle 24 Tasks des Publish-Pipeline-Plans abgeschlossen.** +- ✅ **Staging-Deploy-Infrastruktur:** `scripts/deploy-svelte.sh` mit + drei Targets (`svelte`/`staging`/`prod`), dynamisches `og:url` und + `canonical` via `__SITE_URL__`-Platzhalter. Staging-Subdomain + `staging.joerg-lohrer.de` bedient jetzt `joerglohrer26/` (Cutover-Ziel). +- ✅ **Duplikat-Event `1744905463975` via NIP-09 gelöscht** (Delete-Event + `7f5d08b8…`, auf alle 5 Relays). Nach Migration nicht mehr auffindbar. ## Live-Verifikation