feat: bot-sends-DM delivery (@pub-search.waow.tech)
bsky chat convos require two distinct members — you can't DM yourself.
switching to a dedicated bot account that DMs subscribers.
changes:
- new src/bsky_bot.zig: app-password login + cached session + chat.bsky
sendMessage via atproto-proxy. self-healing on 401.
- notifications delivery now always DMs the subscription owner (the
subscriber), sent FROM the bot account
- oauth SCOPE drops transition:chat.bsky (not needed anymore — the bot
has its own bsky session via app password)
- subscriptions CRUD drops destinationKind/destinationValue from the
client-facing contract; lexicon makes them optional
- frontend no longer asks for recipient
fly secrets to set: BSKY_BOT_HANDLE (default pub-search.waow.tech),
BSKY_BOT_APP_PASSWORD (staged).
Co-Authored-By: Claude Opus 4 (1M context) <noreply@anthropic.com>