Skip to content

docs(plans): Slack as the second installable connector — design note (TASK-006) - #1535

Merged
lilyshen0722 merged 16 commits into
mainfrom
docs/slack-installable-connector
Sep 4, 2026
Merged

lilyshen0722 merged 16 commits into
mainfrom
docs/slack-installable-connector

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

Summary

Design note for TASK-006, written against ADR-025 (D1–D17) and the merged Telegram plan as built by #1527 and #1531.

Slack is Telegram with two substitutions:

  • The OAuth state is the connect code and the callback is the enable command. Activation mints the same 128-bit, 10-minute, single-use code; the page renders an Authorize in Slack link carrying it as state; the unauthenticated callback verifies it before the exchange and binds team, Slack user and the bot DM. Identity is stamped at projection, as today.
  • The per-workspace bot token makes ADR-025 D6 a prerequisite. Application-level envelope encryption behind config.botTokenRef (a ConnectorSecret row, AES-256-GCM under a key from the api-keys ExternalSecret); never returned by any route; revoked on uninstall.

Everything else — manifest shape, claim/activation lifecycle, projectors, reconciler, dispatcher selection, page states, #1297 security carry-over — is reused unchanged. The one change Slack forces in #1527's code is the dispatcher no longer naming Telegram.

Also covers: DM-only binding (D8/D15), threads as D11's router, a single /commonly slash command for the control plane, Slack's 3-second ack and event_id dedupe, acceptance seeds for Vera's plan including the stranger smoke, sizes and sequence.

Verification

Docs only. Sequence: Vera's verification plan on this note → Kai builds (one backend PR, one page PR, stacked).

…(TASK-006)

Telegram with two substitutions: the OAuth state is the connect code and the
callback is the enable command; the per-workspace bot token makes ADR-025 D6's
secret reference a prerequisite. Everything else in #1527/#1531 is reused.
…d the one secret that enters outside the activation CAS
…he right one: session nonce + confirm-in-Commonly before any bind routes (Vera)
…the uncited same-token claim from the crash path
…processes) and a key ring with a re-wrap path (Vera)
lilyshen0722 and others added 7 commits September 4, 2026 03:14
… time — no digest

Matches #1537 b801a6e. The hashed cookie was CodeQL's js/insufficient-password-hash
(#1779) on every digest variant, and the hash defended against nothing: a row reader
already holds state in the same document. Confirm is the wall.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@lilyshen0722
lilyshen0722 merged commit 54d2983 into main Sep 4, 2026
13 checks passed
@lilyshen0722
lilyshen0722 deleted the docs/slack-installable-connector branch September 4, 2026 20:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant