"Please do not text me again" — how wide should an opt-out reach?

Decided — Option B (scope from context, silently) · Fede, 2026-08-17

The question. When a resident tells Clara to stop texting in the middle of a renewal thread, should that mean "stop the renewal texts," or "never contact me about anything — maintenance, emergencies, rent, lease paperwork — on any channel"? Today it means the second one, and Clara says so out loud. Pick one of the four options at the bottom.

What happened (Camellia, unit 614, Aug 15)

Victoria had already told us she signed a paper 6-month renewal. Two weeks later a timer texted her the same "sign or you roll to month-to-month" pitch anyway. She replied:

Victoria · Sat Aug 15, 6:08 PM

I already signed a paper 6 month lease. Please do not text me again

Clara · 6:08 PM

You're all set, Victoria — I've taken you off the list and you won't receive any more messages from us.

Behind that reply Clara recorded a total opt-out: phone (calls and texts) and her email address, which she never mentioned. In context she plainly meant "stop the renewal texts."

What we actually do today (verified in code and in her records)

What the law allows (from our verified TCPA note)

The options

A · Keep it total (status quo)

Every "stop" = never contact on any channel. Safest possible legal reading, already ahead of the 2027 rule. Cost: a resident who was annoyed by renewal texts loses maintenance updates and, in her mind, emergency contact; the office has to reach her by hand forever.

Not recommended — it is the incident.

B · Scope it from context, silently · Picked

Give the opt-out tool real scopes — renewal outreach, all outreach, everything — and let Clara pick from the thread she is in. A "stop texting me" on a renewal thread records "no more renewal outreach"; a bare "leave me alone" records everything. Operational and emergency messages keep flowing and Clara's confirmation says exactly that. The fan-out to email happens only when the resident names email.

Risk: Clara misreads a "stop everything" as "stop renewals" and we under-honor a revocation.

C · B, plus one clarifying line

Same as B, but Clara's single confirmation names the scope she understood and offers the wider one, e.g. "Got it — no more renewal texts. If you'd rather not get any texts from Camellia at all, including maintenance updates, reply ALL." No reply = keep the narrow reading she actually said. "ALL" = total block, exactly like today.

Why this one: it fixes the incident (over-block + overstated promise) with the smallest change, keeps the resident in control of the width, uses the one confirmation message we are already allowed, and defaults to what she literally asked. It also fixes the fan-out bug as a by-product.

Open point to settle with counsel later, not now: whether the confirmation may pose a question at all. If counsel says no, we fall back to B — the scoping still stands, only the invitation to widen goes away.

D · Split by channel (texts off, calls/email on)

Not available: a text "stop" legally covers calls to the same number too. Phone-vs-email is already separate in our store; voice-vs-text on one number is not something we can offer.

Ruled out by law.

What ships (per B)

Architecture (Option B) — how it works

Design principle: one door, one record, one matrix. Nothing new runs on Temporal; an opt-out is a row, and enforcement is a synchronous check at the door every outbound message already passes through.

The pieces

LayerWhat changes
The record
suppression store (DynamoDB)
The opt-out row gains a real scope: renewal outreach · all outreach · everything. Today the only value is "everything." Existing rows keep meaning "everything" — no migration.
The ear
Clara's opt-out tool
Clara picks the scope from what the person said and the thread she is in: "stop texting me" on a renewal thread → renewal outreach; "stop contacting me" / "leave me alone" → everything; unsure → the wider reading (under-honoring is the legal risk, over-honoring is only a business cost). Her spoken confirmation is generated from the recorded scope — never a hardcoded "you'll never hear from us."
The door
outbound send gate
Every outbound message already declares what kind of message it is (renewal outreach, other outreach, operational, emergency). The gate compares kind against scope — see the matrix. This is the ONE enforcement point; timers, workflows and Clara herself all pass through it.
Fan-out A texted "stop" suppresses the phone number for texts AND calls (legally one unit). It no longer touches email unless the person said so or the scope is "everything."
Temporal
renewal workflow
No new workflow. One behavior change: when the door refuses a renewal reminder because of an opt-out, the workflow treats that as "stop the ladder for this resident" instead of "try again later," and stamps why.
What PMs see Renewals page: a chip on the resident's row — "renewal texts off — resident opted out" — so a PM knows why Clara went quiet. Tenant profile: the scope, who recorded it, the resident's own words, and a widen/narrow/lift control (lifting requires the resident asking, and is logged).

The enforcement matrix (the whole policy in one table)

Message kind ↓ · scope →renewal outreachall outreacheverything
Renewal offers / reminders / expiry nudgesblockedblockedblocked
Other outreach (specials, campaigns)sentblockedblocked
Operational (maintenance updates, replies to their own message, rent/lease admin)sentsentsent · logged
Emergency / safetysentsentsent · logged

The two right-hand columns are today's behavior, unchanged. The new column is the narrow scope. Every block is logged with the resident's verbatim words next to it.

Test harness — how we prove it before and after shipping

Rollout order

  1. Matrix + scoped record + door enforcement (invisible until a scoped row exists; total rows behave exactly as today).
  2. Clara's tool picks scopes + scope-true confirmation copy.
  3. Renewal workflow stops the ladder on an opt-out block; renewals-page chip + tenant-profile control.
  4. One-time correction: narrow unit 614's record to renewal outreach and lift her email suppression, logged with a note.

Your pick

Sources: the resident's conversation record and suppression rows (read live 2026-08-16); the opt-out tool, suppression store and send-gate code; the July 2026 universal-suppression decision (which designed the category split but never considered a topical scope); the TCPA/SMS-consent note in the domain knowledge base (researched 2026-06-18).

PropFlow Docs