NoteSurge Changelog

v1.59.0

v1.59.0

August 29, 2026

Added

Discord agent surface — your bot talks back to NoteSurge

Discord joins Telegram as a conversational agent surface (A4 stage 1). Bring your own Discord bot (no OAuth app on our side — same BYOK class as Telegram): connect in Settings, Team, Discord with a bot token + application id, then @ your bot in any channel it can see and it replies via the same Notey engine. Slash-command deferred responses, follow-up message delivery, and the same role-check + connection-verification flow as Telegram. Bot tokens are encrypted at rest; the application id resolves the account from interaction payloads.

Slack agent surface — talk to Notey in Slack

Slack joins Telegram and Discord as a conversational agent surface (A4 stage 2). Bring your own Slack bot (no OAuth app on our side): connect in Settings, Team, Slack with a bot token + signing secret + team id (verified via auth.test before saving), then DM or @ your bot and it replies via the same Notey engine. Slack Events API signature verification (X-Slack-Signature HMAC), url_verification challenge handshake, and fire-and-forget deferred generation so retries never race with generation. Bot tokens and signing secrets are encrypted at rest.

WhatsApp agent surface — talk to Notey on WhatsApp

WhatsApp joins Telegram, Slack, and Discord as a conversational agent surface (A4 stage 2). Bring your own Meta App with WhatsApp Business API access: connect in Settings, Team, WhatsApp with an access token + phone number id + verify token + phone number (verified via Graph API before saving), then message your business account and it replies via the same Notey engine. Webhook challenge-response verification (verify token is hashed, never stored plain) and fire-and-forget deferred generation so retries never race with generation. Access tokens are encrypted at rest; the phone number id and phone number are stored plain like Discord application ids.

Quote cards are now reviewable and editable — fix the AI draft before you publish

Asset generation stage 2: a rendered quote card is no longer a one-shot. The AI writes a draft subhead + body, then the card shows as a real at-a-glance image on its Library piece — click it (or "Review & edit quote card" in the ⋯ menu) to open an edit modal where you fix a weak hook or clunky line and Save. Saving re-renders the card through the deterministic satori template (same brand geometry, zero AI spend on the edit) and updates the stored marker + asset audit trail in one transaction. The original card is never touched on render failure, and empty/oversized/no-change edits are refused honestly instead of double-writing.

  • Review & edit is offered only on pieces that already have a quote card; "Make quote card" disappears once one exists, so the two actions are never both present.
  • Edited copy is persisted on the marker (subhead + body) so the creator-audit trail and the asset row stay in sync across piece and source.

Fixed

Native X posting — notes targeting X + another platform no longer skip X silently

A regression introduced when native X OAuth shipping landed caused notes that targeted X alongside Threads/Bluesky to never publish to X at all: the schedule-time guard keyed off the note-level typefullyDraftId (which also exists for non-X drafts), so the X connection was skipped and the reconciliation pass then marked the whole note published once its Threads draft went out. The gate now keys off the note's resolved X connection row — native OAuth connections publish direct regardless of other platform drafts. If the connection resolves to an error, it fails honestly with ConnectionNotFoundError instead of silently dropping X.

← v1.58.0v1.60.0 →
← All versions