Commit Graph

3 Commits

Author SHA1 Message Date
Jörg Lohrer 7186c32067 feat: nostr-reimport von 8 client-posts + delete-subcommand + nip-32 lang-tag
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>
2026-04-18 17:50:37 +02:00
Jörg Lohrer db61149924 publish(tasks 19+20): signer-stabilisierung für wiederholte runs
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>
2026-04-18 06:42:28 +02:00
Jörg Lohrer 18d9dad56e publish(task 18): cli-entrypoint mit subcommand-dispatch
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>
2026-04-18 05:45:54 +02:00