Skip to content

v0.4.0

Choose a tag to compare

@robfig robfig released this 21 May 20:30
· 14 commits to master since this release
9802e94

Breaking change defaults

v0.4.0 replaces the DM pairing flow with a simpler, harder-to-bypass model. Operators who had dmPolicy / groupPolicy unset will see behavior change — see Migration below.

Access model

  • Personal Bots (PAT, rmp-) now respond only to their owner, automatically. The plugin discovers the owner from /v1/token.info at startup and drops every inbound where senderId !== ownerId, uniformly across DM and group. An adversary creating a private group and adding the bot can no longer reach it (#24).
  • Org Bots (API key, rmk-) now respond to anyone in the workspace by default. The pairing flow is no longer required (#25). Use allowFrom / groupAllowFrom for opt-in sender allowlists; use dmPolicy: "allowlist" or groupPolicy: "allowlist" for hard per-surface gates.

Both restrictive modes remain available as explicit opt-ins (dmPolicy: "pairing", groupPolicy: "allowlist").

Migration

  • Personal bots: no action needed. Owner-only is the natural enforcement of the old "only you can talk to it" property and is now active automatically.
  • Org bots without explicit dmPolicy: DMs become open to any workspace member (previously: pairing required). If that's not what you want, set dmPolicy: "allowlist" (+ allowFrom: [...]) or dmPolicy: "pairing".
  • Org bots without explicit groupPolicy: the per-group groups map no longer acts as a hidden allowlist (it already didn't at runtime since v0.3.2; the schema default just catches up). If you need a strict per-group gate, set groupPolicy: "allowlist".

Other

  • Removed the SDK's requireChannelOpenAllowFrom guard from the Roam schema — it required allowFrom: ["*"] when dmPolicy: "open", which contradicts the new default. With "open" as the default the conscious choice is to restrict, not expose.

Full Changelog: v0.3.3...v0.4.0