Section 19 · Safety, Deliverability & Governance
19.4Consent and privacy tracking
Built — needs DMA's data- No.
- 19.4
- DMA's reference
- Decision Book p.34
- Phase
- Phase 1
- Autonomy
- L1 · Recommend
- DMA's decision
- Yes
What DMA asked for · Decision Book p.34
Know why DMA has each contact's details, and respect the privacy and marketing rules that apply.
Why it matters to DMA: A legal requirement: it decides what the reactivation engine may do, contact by contact.
In our words, from DMA's Product Decision Book v3, page 34.
How we do it
- Every contact gets a consent record: the country and region, the legal basis DMA relies on (for example a past customer relationship), where that basis came from and its date, and when it expires.
- A consent matrix, a versioned rule set, says per jurisdiction and channel what each basis allows. It is approved like every other rule; the one in the POC is a clearly marked starter set until DMA's counsel approves the real one.
- The send governor checks consent at the moment of every send, so an email a person approved still can't go to someone who may not be contacted. Today shows how many contacts the gate currently blocks, and why.
- Website chats record the visitor's consent when they leave an email or book, with the page and the notice shown.
The flow
It plays on its own while it's on screen; hover or use the controls to pause or step through.
A contact
A former client in Ontario.
- Nutshell
- Stored data
- Rule in code
- Routing
- Screen
Where the data goes
The same six stages on every page. Nothing reaches Nutshell except through the write gate.
- 1Nutshell + chat
Source
Contacts, their history, and consent given in the chat.
- 2Sync
Copies Nutshell changes into the bridge database
Keeps contacts current.
- 3Bridge database
A copy of the CRM data, plus what the AI works out
One consent record per contact; the approved matrix.
- 4AI
Claude models, only through DMA's own gateway
Not needed: rules.
- 5Write gate
The only way back into Nutshell: checked, approved when needed, sent once
Blocks sends in code; do-not-contact can go to Nutshell under its field rule.
- 6Nutshell
The system of record
Unchanged unless a person marks do-not-contact.
The tables behind it
Drawn from the POC's database catalogue: structure only, no data.
PK primary keyFK reference the database enforces (solid line)ID reference kept by id (dashed line)
| Table | What it holds | Columns |
|---|---|---|
| ctrl.consent | One consent record per contact: jurisdiction, legal basis, its source and expiry, and the result. | 18 |
| ctrl.consent_matrix_rules | The approved rules per jurisdiction and channel. | 19 |
How the tables connect (1)
| Column | Points to | Kept by |
|---|---|---|
| ctrl.consent_matrix_rules.version | ctrl.consent_matrix_versions | The database (foreign key) |
Worked example
Synthetic demo data: every name, business and number is made up.
The consent gate: the screen and the system
What you see
1.On Today
How many contacts the gate blocks right now.

What happens in the system
- Bridge database
ctrl.consentConsent records evaluated against the active matrix version.
Three contacts through the gate (synthetic example; the real matrix comes from DMA's counsel).
Consent decisions
| Contact | Basis | Result |
|---|---|---|
| Former client, Ontario | Past customer relationship (2023) | Allowed until the basis expires |
| Lead from a 2019 trade show, Germany | None on record | Blocked: no basis |
| Chat visitor who booked a call | Asked to be contacted (booking form) | Allowed for the reply |
In the running POC

1 / 2Today: the consent gate, and how many records it blocks.
- 1Blocked by the consent gate: how many records, from which countries, and a link to see why.
Dashboard · Today, the consent gate. Captured from the running POC on September 25, 2026; synthetic data.
See it live
Opens the exact screen in the running POC, in a new tab.
| Open | Where | What to try |
|---|---|---|
| Consent rules | DMA AI dashboard | The matrix and its approval status. |
Status
Built — needs DMA's data. This capability runs in the POC today. It needs DMA's own content or data to go live; no code change is needed for that.