Mute, end to end

One switch that means "stop talking to this person", and the smallest system that actually honours it.

2026-08-29 · Status: Proposed — pending review · Two-minute read

The invariant

A muted person hears nothing and triggers nothing — except one notification to our team — until unmuted; the only things that still reach them are what a human deliberately sends and emergency or safety notices.

Everything below follows from that sentence. If a behaviour is not derivable from it, it is not part of this feature.

Why we need it

Tonight we muted one prospect completely, by hand. That took:

What it tookWhy
Four database records written by hand — two for the phone, two for the emailThere is no "mute a person". There is an opt-out lane keyed to one identifier at a time, and neither record knows about the other.
Two background jobs cancelled by handTheir timers live in the job engine, not the database. Nothing cancels them when a person is silenced, and one was not even safe on its error path.
The thread set to human-owned, separatelyMuting does not change ownership and ownership does not mute. Two switches for one intention.
And one thing we could not do at all: stop the team-notice emailsThe only control is property-wide — it would change notifications for every resident and prospect at that property. v1 closes this: the notices are inside the mute.

The whole of v1 — five parts

  1. A flag on the person. On or off. One click each way; who and when are recorded automatically.
  2. One unconditional check at the single point where messages leave the system — covering both the messages to them and the internal emails about them. Not graded by message type, not skippable by a lane, not bypassed for replies. That gate is its own design, on its own page: One door out — including how the levels rank, what beats what, and how we stop a second way out being built.
  3. A badge wherever the person renders — the conversation, the list, anywhere staff might hit send.
  4. Voice forwards the call before Clara ever picks up. The check runs at the phone layer, so a muted person's call is handed to the office and the assistant is never in the call at all. Final shape pending a feasibility verdict.
  5. One notification to the team when a muted person writes in — so a human can decide whether to answer by hand.

Human takeover sends pass the check because a human pressed send. That is the whole exception — no extra apparatus around it.

Decided

Defaults, so nothing is undefined

Not in v1

Sending by hand

A person can still send one message as Clara into a muted thread — the mute survives it, and nothing re-arms. How that send works, and why it has to be one indivisible act, is its own design: When a human answers.

Companion pages: Knowing when not to answer (why Clara talks when she should not), One door out (the gate that enforces this), When a human answers (sending by hand). Mute is the blunt instrument that must always work — teaching Clara when to stop is how it stays rarely needed.

PropFlow Docs