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>