v0.4.0
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.infoat startup and drops every inbound wheresenderId !== 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). UseallowFrom/groupAllowFromfor opt-in sender allowlists; usedmPolicy: "allowlist"orgroupPolicy: "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, setdmPolicy: "allowlist"(+allowFrom: [...]) ordmPolicy: "pairing". - Org bots without explicit
groupPolicy: the per-groupgroupsmap 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, setgroupPolicy: "allowlist".
Other
- Removed the SDK's
requireChannelOpenAllowFromguard from the Roam schema — it requiredallowFrom: ["*"]whendmPolicy: "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