How to stop receiving letters
Opt-out handling process (APPROVED 2026-08-27, was v2)
Renamed 2026-08-20 (ticket 869em1n5x), and the contact address followed on 2026-08-27 (869ee2apd): the trading name changed from Plan & Post to Just Granted, and the address to write to is now hello@justgranted.co.uk on Dan's instruction. The controller is unchanged — Blueworkz Ltd, company number 13258077. hello@planandpost.co.uk is the same mailbox and still receives, so a letter or an objection sent to the old address is not lost.
APPROVED BY DAN, 27 August 2026 (869eqx27v): "I have read the complete GDPR pack, I approve all of it." The draft banner is lifted on every document in this pack at once, which is what he asked for. What his approval is not: it is not legal advice, no solicitor has read any of it (his decision of 2026-08-19, 869ef85a2), and it did not create the DPIA that §12.6 of the LIA says is needed before the first bulk-file sale — that DPIA was written on 2026-08-29 at his instruction (869eqy933 Q2), is at docs/gdpr/DPIA-BULK-DATA-FILE.md, and he signed it off separately on 2026-08-30 (869erd3f6 §3.1, "sign it off as written") — a different act from the pack approval above, and one that cleared a single condition (C8) rather than opening a sale: no bulk data file has ever been sold, offered for sale, or produced. The history below is kept as written.
History — status was: DRAFT v2 (2026-08-07). Ticket D6, revised against Dan's 7 Aug review. This is the operational runbook for honouring objections. Dan approves the commitments (especially the 10-working-day SLA) before the first real letter.
Changed in v2: real contact details in place of placeholders; Kestrel → Plan & Post.
Commitments
1. Every letter carries: "To stop letters like this, email hello@justgranted.co.uk, quoting reference {application reference}." (Enforced by the send pipeline, not left to client template text.)
Revised 2026-08-10, v0.105.0 (ticket 869efxmh2, Dan's call). The sentence previously also printed Blueworkz Ltd's registered office. That is Dan's home address, and it is now removed from all artwork: the second footer sentence links the privacy notice, which carries the registered office and every contact route. Post is still an intake channel (see below) — an objection that arrives by post is honoured exactly as before; it is simply no longer printed on the letter.
Built and verified 2026-08-09, v0.85.0 (ticket 869efxmh2). platform/letters/compliance.py composes it; the letter and postcard artwork paths print it. It appears on every page of a letter and on the message side of all three card sizes, in bold under a rule, and is followed by the Article 14 sentence naming the source register, Blueworkz Ltd as controller, and the privacy-notice URL. No template setting can remove it. platform/tests/unit/test_compliance_footer.py asserts it in rendered PDF output for every format — including, since v0.105.0, that no postal address appears on any surface. 2. An objection is honoured within 10 working days of receipt, and applies across all Just Granted clients — one request stops everything sent through the platform.
Extended 2026-08-11, v0.109.0 (ticket 869ee2apd): it also stops the data. A suppressed person is excluded from the CSV export (applications/export.py), so a subscriber cannot download the name and address of someone who has objected and write to them independently. ExportEvent.suppressed_count records how many rows each download withheld. Copies downloaded before the objection are beyond our reach — the subscriber is an independent controller of those and is bound by terms §5 to honour objections themselves. 3. Suppression stops future letters; it does not by itself erase the planning records. Someone who asks for erasure as well gets it — see step 4 of the runbook. The suppression entry always survives. 3. No proof or reason is ever required. "Stop writing to me" is enough.
What an objection stops, once bulk files exist
An objection stops three things today: our post, the data leaving in a subscriber's export, and — since 2026-08-27 — the person appearing in any bulk data file we cut (kestrel leads --csv refuses to write one without the suppression list, and refuses a list more than seven days old). It cannot reach a file already delivered to a licensee. The licence is what covers that: weekly replacement, deletion of the old copy, and an obligation to honour objections we notify. Until a licence exists, no file may be sold — §12.6 of the legitimate interests assessment.
Intake channels
- Email to hello@justgranted.co.uk (monitored by Dan; auto-acknowledge later).
- Post to Blueworkz Ltd's registered office (as published in the privacy notice). Not printed on the artwork since v0.105.0, but honoured identically when it arrives.
- A phone call or any informal message that identifies the address is treated identically — the channel doesn't matter, the request does.
Handling steps (operator runbook)
1. Identify the site address/postcode (and name, if given) from the request or the quoted application reference. 2. Add a suppression entry in the platform admin (/admin/letters/suppressionentry/): postcode (required), who the objection is about (leave on "Anyone at this address" unless the objector is an agent — see below), address line and name (as available), source = how the request arrived, note = free text. The entry takes effect immediately: suppressed applicants are excluded from every future send by letters.suppression.sendable() — D4 builds its send pipeline on exactly this function, and every send re-checks at dispatch time. 3. Reply confirming the stop (email template below), unless the request was anonymous post with no return route. 4. If the person also asks for erasure (beyond stopping letters), handle under the privacy notice's rights section: remove their name/address from the applicant records within one month, keeping only the suppression entry. 5. Log nothing beyond the entry itself — the suppression record IS the audit trail (created_at, created_by are stored).
If the person who objects is an agent, not a householder
Added 2026-08-24, v0.356.0 (ticket 869enkac1), and the reason it is here before we post to a single agent: the list had no way to hold this kind of objection at all. An agent's office postcode contains houses, so recording it the only way the model allowed would have suppressed the applicants who live in that postcode — and stopped nothing, because nothing addresses an agent. An opt-out that mis-fires and then reads in the admin as though it had been honoured is worse than none.
SuppressionEntry now carries Who the objection is about:
- "Anyone at this address" — the default, and what every entry made before this date means. Use it for every objection from a householder, and whenever you are not sure. It covers professional post to that address as well, which is the safe direction: a sole trader who both lives and works there objected as a person, not as a role.
- "An agent's office" — use it only when a planning agent, architect, builder or consultant objects to post we send to their office. It stops professional post to that office and never suppresses the households sharing the postcode.
Two further points belong in the reply, from docs/gdpr/LIA-AGENT-ACQUISITION.md §9:
- The objection is absolute and needs no reason (Article 21(2)); same 10-working-day SLA, any channel.
- It stops our letters. It does not remove them from the planning record: the agent's name sits in the collector store because the council published it, and the reply should say so plainly rather than implying erasure.
Nothing addresses an agent yet — there is no lawful basis (ticket 869em7npq). The entry is recordable today so that an objection made today is already being honoured on the day one is.
The addressee half was built on 2026-08-25, v0.374.0 (869enkace), and the gate did not move. platform/letters/origination.py can now build an agent's office from the collector's agent_* columns, check it against this list and render the letter; what it still refuses to do is build a list, because the lawful basis is 869em7npq and Dan has not approved it. Two things follow for whoever works this runbook:
- An agent letter, if one is ever posted, will carry a different footer from a subscriber's — it names Blueworkz Ltd as the sender and prints
/privacy/agentsrather than/privacy. An objection quoting that URL is an agent objection, and "An agent's office" is the right role for it. - An objection can arrive before any letter does. An agent who finds the notice, or who hears about us from a colleague, may write in first. Record it the same way: the entry is what stops the first letter, not the second.
Confirmation reply template
Thank you for getting in touch. We've added your address to our suppression list, which stops letters from every business that uses our service — you won't hear from us again. If you'd also like the underlying records removed, reply to this message and we'll erase them within a month.
Escalation
Complaints that go beyond an opt-out (ICO threats, distress, repeated contact claims) go to Dan the same day. If a suppressed address ever receives another letter, that is a sev-1 product failure: find the gap, fix it, write it up in the build diary.