Engineering11Engineering11 rooms
Control & compliance

Distribution & compliance

Publishing a policy isn't the end of a compliance process — you still have to hand it to a named audience, track who's read it, and be able to prove it later. That's distribution: a recorded act that says this version went to these people on this date, with each person's acknowledgement tracked against that frozen snapshot. This page picks up where Controlled documents leaves off — you've published; now you roll it out and prove it landed.

The shape of it: create a group once → distribute a published document to it → everyone is notified and acknowledges → you watch coverage on the Compliance dashboard and export the record for an auditor. New here? The overview shows the full path.

Groups — name your audiences once

A group is a named, reusable list of people — all-employees, engineering, uk-staff. You build it once and distribute to it by name. Only admins create and curate groups.

Groups are also the sanctioned way to reach external people — contractors, partners, auditors. A group's membership can include people who aren't on your team, and because only an admin curates the list, distributing to that group is what safely grants those externals read access to the document. (By contrast, if you hand raw individual email addresses straight to a distribution, those addresses must already be company members — an external can't be pulled in that way. This guard keeps an editor from quietly granting outsiders access; externals come in through an admin-curated group or not at all.)

In the web app

Compliance → Groups

Create a group, add or remove members (internal or external), rename, or delete. Setting members replaces the whole list, so you always see exactly who's in it.

With Claude

Describe the list

Name the group and who's in it. Claude tools: createGroup, setGroupMembers, listGroups, listGroupMembers, deleteGroup.

"Create a group called all-employees with everyone on the team, plus our auditor pat@external-audit.com."

Distribute a published document

Once a controlled document is published, an editor distributes it to one or more groups and/or named individuals. Distribution is deliberate and recorded — it's the moment the obligation attaches to people.

In the web app

Govern panel → Distribute

Pick groups and/or people, then distribute. The panel then shows live acknowledgement coverage for this version.

With Claude

Name the audience

Claude tools: distributeDoc (the initial act) and addToAudience (add late joiners afterward).

"Distribute the Security Policy to all-employees and the contractors group."

Distributing does four things:

  • Snapshots the audience — the exact set of people, frozen against this published version on this date, written as a single atomic record. People who later join or leave the room don't change it. That frozen snapshot is precisely what an auditor asks for.
  • Grants access automatically — anyone in the audience who couldn't already open the room is given read access (as a room viewer), so the link works when it arrives. Someone who's already a company admin or editor keeps their higher role — distribution never demotes anyone.
  • Notifies everyone — a Slack DM where connected, email otherwise, each carrying the link, the attestation statement, and any deadline. A distribution can also post one summary to a channel. See Notifications.
  • Opens acknowledgement tracking — from now on the report shows, per person, whether they've acknowledged and how they entered the audience.

To add people after the fact — a new hire, a late-added reviewer — use add to audience. They're recorded as added later so the record still distinguishes the original distribution from top-ups.

"Add the three new hires to the Security Policy audience."

Acknowledgements — the recorded "I've read this"

Everyone in the audience opens the document and sees an Acknowledge bar at the bottom showing the attestation statement you set (for example, "I have read and understood this policy"). Clicking it records their email, a timestamp, and the exact statement text they attested to. Readers see only the document and their own acknowledgement status — never the review/approval workings behind it. Claude tool (for someone acting on their own behalf): acknowledge.

Each person in a distribution is one of these, and the report labels which:

How someone came to be in a document's audience — the source shown on every report row.
LabelMeaning
distributionAdded by a formal distribute act — the core audience.
added-laterAdded after the fact via add to audience.
linkSelf-enrolled by opening a self-enroll link.
liveFor a document that was never formally distributed, the live room audience (everyone who can access the room).
unsolicitedSomeone who acknowledged despite not being in the audience — e.g. a room member who read it anyway. Recorded, but never counted as "outstanding."

Deadlines & reminders

If you set an acknowledge-by deadline (on the Govern panel), the document is flagged overdue once the date passes with people still outstanding. At any point an editor can remind everyone still outstanding — a fresh Slack DM or email with the link, statement, and due date. Reminders skip anyone who can no longer access the room (a reminder they can't act on is just noise); they stay listed as outstanding in the report. Claude tool: remindAcks.

"Remind everyone who hasn't acknowledged the Security Policy yet."
"Who still hasn't acknowledged the Travel Policy?"

Sometimes you need someone to read and acknowledge a single published document without giving them the controlled room. A self-enroll link does exactly that. An editor mints a revocable, document-scoped link and posts it wherever suits — an email, an intranet page, a Slack channel.

When someone opens the link, the server checks they're allowed before enrolling them: they must pass your company's own reader rules (for example, be on your company's email domain) or already be a member. The link alone is not enough — a link that leaks to an outsider on a different domain is refused, and nothing is recorded for them. Anyone who does pass becomes a company viewer (never a member of the controlled room) and is added to the document's audience with source link. They then read and acknowledge from a personal My acknowledgements view — they can see that one document, and only the published version of it, never drafts or the room around it.

In the web app

Govern panel → Self-enroll link

Mint a link, copy it, and revoke it when you're done. Revoking is instant and idempotent — an old link simply stops working.

With Claude

Mint & manage

Claude tools: createAckLink, listAckLinks, revokeAckLink. (People read/ack via getAckDoc and myAcknowledgements; the enroll-on-open step isn't a Claude tool — it fires when the link is opened.)

"Create a self-enroll acknowledgement link for the Code of Conduct so I can post it on the intranet."

Self-enroll links are the one audience type that carries forward across a major re-publish (see below): a posted link behaves like a standing "acknowledge every version" subscription, so each enrollee is re-prompted to acknowledge the new version.

Re-publishing: minor vs major

When you publish a new version of a document that's already been distributed, what happens to the existing audience and acknowledgements depends on whether you mark it minor:

Minor re-publish (a typo, formatting — non-material)Major re-publish (default — a real change)
Existing acknowledgementsCarried forward — nobody has to re-acknowledge.Cleared — everyone must acknowledge the new version.
Distributed audienceCarried forward automatically.Not carried — the new version starts with no audience until you distribute again.
Self-enroll (link) audienceCarried forward.Carried forward (and re-prompted to re-ack).
You'll seeacksCarriedForwardneedsRedistribution — a nudge to re-distribute
Nothing is ever silently re-assigned. A material change to a policy means the old attestations no longer apply, so a major re-publish deliberately starts the audience clean and reminds you to re-distribute. Mark a change minor only when it genuinely doesn't alter what people agreed to.
"Publish the updated Security Policy and re-distribute it to all-employees."

My tasks — everything waiting on one person

Everyone gets a personal My tasks view in the web app: documents waiting for their review, their approval, and acknowledgements they owe — with nothing they've already done or can't act on. It works even for reviewers and approvers who aren't otherwise members of a room, because being assigned is what authorizes them. Every review request, approval request, and distribution notification links straight here. Claude tool: myAssignments (and myAcknowledgements for the acknowledgement queue).

"What's waiting on me to review, approve, or acknowledge?"

The Compliance dashboard (admins)

Admins get a company-wide Compliance view: every controlled document with its lifecycle state, its reviewers and approvers, acknowledgement coverage with overdue flags, and its last distribution — drill into any document for the per-person record. It also hosts an activity feed of recent compliance events and links to group and notification management. It respects room privacy: a private room an admin isn't in doesn't appear. Claude tool: complianceOverview.

"Show me the compliance overview — which policies are behind on acknowledgements?"

Producing evidence for an audit

At any time you can download a per-document acknowledgement report as CSV — the compliance record for that policy. From the Govern panel choose export, or ask Claude. Claude tool: ackReport.

Each row is one person: their email, whether they acknowledged, the timestamp, and their source (how they entered the audience). The summary carries the published version, the document title, the attestation statement in force, the due-by date and whether it's overdue, and the totals — audience size, acknowledged, and outstanding. Because the audience is a frozen snapshot per version, the report answers the auditor's real question: who was asked to read this exact version, and who attested to it, by when.

What's on the permanent record. Every compliance action lands in the same append-only audit log as the review/approval trail and can't be edited or deleted: group_created / group_deleted / group_members_set, distributed, audience_added, ack_reminded, acknowledged, self-enroll ack_link_created / ack_link_revoked / ack_enrolled, and notify_config_set (which records only that Slack was configured and the channel — never the token). Combined with the version history, review, and approval events from the lifecycle, this is the full evidentiary chain for a document.
"Download the acknowledgement record for the Security Policy as a CSV."

How this maps to common compliance controls

rooms doesn't certify you against any standard — that's between you and your auditor — but the controlled-documents workflow is built around the evidence these programs typically ask for. A rough map:

Illustrative mapping — confirm specifics with your own auditor.
You need to show…How rooms supports it
Documented policies with formal approval (SOC 2 CC1/CC5; ISO 27001 A.5.1)The review → approve → publish lifecycle with named, server-enforced approvers and unanimous sign-off; every version retained.
Employees acknowledge policies (SOC 2 CC1.1; ISO 27001 A.6.3 / A.5.4)Distribution to a named audience + per-person acknowledgement with the attested statement, timestamp, and coverage reporting.
Periodic policy review (ISO 27001 A.5.1; SOC 2 CC5)Effective date + review-due date per version; overdue documents surfaced for refresh.
Separation of duties (SOC 2 CC5)Distinct author / reviewer / approver / admin roles, assigned per document and enforced by the server.
Complete, tamper-evident records (SOC 2 CC7; 21 CFR Part 11 §11.10(e))Append-only audit trail of every action with actor and timestamp; records can't be edited or deleted.
Electronic signatures / attestations (ESIGN, UETA; 21 CFR Part 11)Acknowledgements capture identity, intent, and the exact statement. For countersigned contracts with a certificate of completion and content hash, use deal rooms & e-signature.
Identity & security, briefly. Everyone — internal or external — authenticates with their work email and a one-time code through Cloudflare Access; there's no separate account or password to manage, and no identity provider to integrate. Authorization is re-checked in server code on every request regardless of whether it came from the app or from Claude, so the interface can't be tricked into granting access a role doesn't have. Secrets like the Slack token are stored server-side and never appear in any response, audit record, or Claude chat. See Access & people.

Every action, both ways

TaskIn the web appAsk Claude — tool
Create / edit / delete a groupCompliance → GroupscreateGroup, setGroupMembers, deleteGroup
List groups & their membersCompliance → GroupslistGroups, listGroupMembers
Distribute a published documentGovern → DistributedistributeDoc
Add people to an existing audienceGovern → Distribute → addaddToAudience
Acknowledge a documentAcknowledge bar on the pageacknowledge
Remind those outstandingGovern → RemindremindAcks
Mint / list / revoke a self-enroll linkGovern → Self-enroll linkcreateAckLink, listAckLinks, revokeAckLink
My review/approval/ack queueMy tasksmyAssignments, myAcknowledgements
Company-wide compliance dashboardCompliancecomplianceOverview
Export the acknowledgement record (CSV)Govern → ExportackReport
List documents overdue for reviewCompliance dashboardlistOverdue
Connect / configure SlackPeople & access → Notificationsweb app only — never a Claude tool
Distribution notices, review/approval requests, and reminders reach people by Slack DM or email. Set that up once → Notifications — Slack & email.