8 neue Posts aus direkt-auf-Nostr-erstellten Events (Habla/Yakihonne) ins
Repo geholt, mit sauberen ASCII-slugs statt der kaputten d-tags (Umlaute,
Emojis, Doppelpunkte, Trailing-Dashes). Alte Events per NIP-09 geloescht.
Pipeline-Erweiterungen:
- neuer subcommand "delete" publisht NIP-09 kind:5 events via stabilem
bunker-signer (nutzt CLIENT_SECRET_HEX-identitaet, keine re-pairings).
- frontmatter.lang + kind:30023 event tagt jetzt NIP-32 konform mit
["L","ISO-639-1"] + ["l","de","ISO-639-1"] (default: de).
- validate-post deno-task bekommt --allow-env (yaml-parser brauchts).
Vorbereitung fuer spaetere Mehrsprachigkeit: EN-Versionen koennen via
separate markdown-datei mit lang:en als eigenes event publiziert und
spaeter per a-tag-referenz zum DE-pendant verlinkt werden.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
probleme auf der realen amber-infrastruktur behoben:
1. ohne festen CLIENT_SECRET_HEX erzeugt applesauce bei jedem lauf einen
neuen client-pubkey. amber bindet permissions pro client-pubkey, also
sah jeder lauf wie eine neue unberechtigte app aus und bekam
"no permission" als auto-antwort.
→ CLIENT_SECRET_HEX in config + cli, SimpleSigner.fromKey durchgereicht.
2. applesauce wirft bei "already connected"/"no permission" unhandled
rejections, weil response-promises asynchron reagieren.
→ globaler unhandledrejection-handler, der diese benannten fehler
schluckt; connect() im try/catch mit open+force als fallback.
3. timeout auf bunker connect auf 60s erhöht (amber-pairing kann
menschliches tap dauern beim ersten mal).
einzel-post-publish live verifiziert:
- offenheit-das-wesentliche als kind:30023 publiziert
- alle 5 write-relays haben bestätigt
- bild auf beide blossom-server hochgeladen
- SPA rendert das bild von blossom.edufeed.org
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
src/cli.ts dispatcht via @std/cli/parse-args:
- publish [--force-all | --post <slug> | --dry-run]
- check
- validate-post <path>
cmdPublish orchestriert:
1. config laden, signer initialisieren, outbox + blossom-server laden
2. post-dirs resolven (diff/force-all/single per slug)
3. dry-run → liste printen, exit 0
4. für jeden post: processPost aufrufen, logger aktualisieren
5. am ende: logs/publish-<iso>.json, exit-code je nach fehlern
resolvePostDirs schaltet zwischen den drei modi um und findet bei
--post <slug> den passenden ordner über allPostDirs + findBySlug.
smoke-tests aus dem plan (usage → exit 2, validate-post → ✓) gehen
durch. alle 57 tests grün.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>