A caller's message always reaches the office

Why Western Slope never heard from Dora Gomez, and the one-layer fix.

2026-10-27 · all customers · Shipped 2026-10-28/29 — live, no switch, proven on a real call Oct 29 · hub: Clara as a coworker, v3

What happened

8 of 47 caller messages at real customers in 30 days never reached a person (17%). Clara told the caller the office would get it; nothing was sent.

Western Slope
32 of 37 reached · 5 lost
JP&Co / Camellia
7 of 10 reached · 3 lost
Situs, ConAm
1 email, from our own test number, nothing recorded

All rows Oct 5–27, re-checked by a second pass. 6 of 8: wording check; 2: "no number" (one had given it).

Today

caller ──► Clara writes the note
                  │
          call end: model #2 rewrites it
                  │
          checker: banned word "she" ✗ ✗ ✗
                  │
          nothing sent · backup disarmed
          Slack: "note left for the office"

Proposed

caller ──► Clara writes the note
                  │
          row: pending
                  │
          call end ──► send it, fixed template
                  │
          delivered (provider id on row)
          else: sweep retries, then HELD
          Slack / page / tool read the row

Decide

OptionWhat it isCall
A. One layerClara's own note from the call, sent under a minimal slip template; the rewrite-and-police step is deleted.Recommended
B. Hold on failureKeep the rewrite; failures held for a reviewer.Still two layers
C. Keep todayFix the sweep only.Still drops

Two rulings to revisit:

Voice first, then texts and emails.

What shipped (Oct 28)

Spot-check sheet: seven real calls, old email next to new email (Oct 29).

PRWhatMerged UTC
#23078Harness + one TEAMNOTICE row per message, swept until delivered or heldOct 28 (earlier)
#23372One model call writes the whole note from facts (name, role, unit, company from our records, caller's words); code adds only the link and "Clara". No headless sentence, no "Called <time>" lineOct 29 15:1xZ, live 16:01Z
#23377"I'll get that straight to them" counts as a promise to pass it on (no wrong skip)Oct 29 02:38Z
#23496Blank line after the who line (Fede, from the spot-check sheet)Oct 29 ~17:0xZ, live 17:32Z
#23262A question Clara fully answered on the call sends no office noteOct 28 20:34Z
#23079The phone slip: one model call writes what the caller wants and the topic; code writes who, the number once, the call time; wording never blocks deliveryOct 28 22:26Z
#23242The conversation page and Slack card say what really happened to the noteOct 28 23:06Z
#23291Slip and card name the caller the same way, company from our records; VENDOR CALLED cardArmed, in queue
#23331Card strip keeps the caller's own askArmed, in queue
#23341The slip's want line keeps its subjectArmed, in queue

Live proof, Willows test line, Oct 28 5:40 PM MT (conversation conv_voice_e3e53a2f-2c6f-4a9f-88ea-dcf9ca9e3792, notice tn_eb1fd8dc-358d-4a43-b248-232ee9631d03, delivered 20 s after hang-up, SendGrid MYHWCY7FRSybtHRqUZDu7g):

Before (old path, typical, from today's real notes)

Subject: Marcus — general callback

Marcus wants to know what services the
property management team offers…

Callback number: (970) 310-3966

After (new slip, as received)

Subject: Pat R. — Security deposit refund

Pat Rivera (resident).
moved out of Unit 2B at the end of September
and hasn't received the security deposit
refund yet. Wants the office to follow up
on it.
Callback number: (970) 555-0142
Called Wed, Oct 28, 5:40 PM MDT

No call time on the old note, and 8 of 47 messages in 30 days dropped by the wording checker (latest: Camellia tub touch-up voicemail Oct 28 21:45Z, recovered by hand 21:54Z). On the new slip the lowercase second line is defect #23341 (fixed, in queue); the number appears once; nothing can be dropped by wording any more.

Replay numbers

Follow-ups (issues)

Final after: real Willows call, Oct 29 17:33Z, email received 80 s later

Before (same story, Oct 28, old wording)

Subject: Pat R. — Security deposit refund Pat Rivera (resident). moved out of Unit 2B at the end of September and hasn't received the security deposit refund yet. Wants the office to follow up on it. Callback number: (970) 555-0142 Called Wed, Oct 28, 5:40 PM MDT See the conversation Clara

After (Oct 29, live)

Subject: Pat R. — Security deposit refund Pat R., resident, unit 2B. They say they moved out of unit 2B at the end of September and have not received their security deposit refund. They want the office to follow up on the status of that refund. Callback number: (970) 555-0142 See the conversation Clara

Evidence: conversation conv_voice_5ba9e54f-0cb2-40d2-bbca-12d96cebb378, notice row tn_dd5025f6-9e65-48ea-beca-b62bc321b402, email received 2026-10-29T17:34:18Z in the Willows test inbox; production page card shows the full subject. Since-live check at real customers (Oct 28 23:39Z to Oct 29 03:30Z): 13 calls, 3 notes delivered, 9 correctly silent, 1 judgment call (caller withdrew), 0 dropped. Spot-check sheet: seven real calls, old next to new.

Why: two layers, and the second one decides
Why: two layers, and the second one decides

On the call Clara already writes the note. Then at call end a second model rewrites it into one sentence, a checker polices that sentence (banned words such as "she", one sentence only, 28 words, grounding), and when the rewrite fails three times the engine sends nothing. The backup sweep is disarmed on the way out, and the ops card is a model's guess from the transcript.

The design: one layer
The design: one layer
  1. The note Clara writes on the call is the message. No model sits between capture and send. It goes under a new, minimal slip template (who · what · number once in digits · when; topic in the subject). The old "message taken" template is retired: it is what produced the Dora email ("Property: not identified yet", "The office was closed", "Dora called.", subject "Gomez called to ask…"). The capture prompt is fixed too: today it tells Clara to write "I'll use the number you're calling from" into the note (89% of Western Slope notes restate the number, often in words), contradicting the tool's own "never restate the number" rule.
  2. The note is written for the office, once, by Clara on the call. Fede on Dora's email: "this sucks, full of fluff". Measured: the engine's own sentences are short and clean but have no time and no topic in the subject; the fluff comes from Clara's captured note and the old template. The slip, graded by the harness:

    What went out

    Subject: Dora Gomez — Gomez called to ask about
    qualifying for one of the properties…
    
    Property: not identified yet
    Dora called. The office was closed (after hours).
    Dora Gomez called to ask about qualifying for one
    of the properties. She has a couple of questions
    about qualification and would like to speak with
    someone over the phone. Callback number confirmed
    as the number she is calling from, ending in one
    two nine one.
    Can someone call Dora back? (970) 201-1291

    What it should say

    Subject: Dora Gomez — does she qualify?
    Call back (970) 201-1291
    
    Dora Gomez (new prospect, not on file) wants to
    know if she qualifies for one of your rentals
    and has a couple of questions.
    Please call her: (970) 201-1291.
    Left Oct 27, 5:07 PM (after hours).
    
    — and for a resident/applicant —
    Maxwell R. (applicant, unit 515, Camellia) wants
    an update on his application. Call back (…) …
    Rules: who (and who we know they are from our record: resident at which property and unit, applicant for which unit, prospect, vendor; Fede 2026-10-27: "if it's a tenant we want to know their property, unit etc"), what, number, when; the number once, in digits; no "called to", no restating the callback; no "Property: not identified yet" (on a company line Clara asks which property); nothing about our own process.
  3. One record, one owner. The row is written when the message is captured, state pending. Its only end states are delivered (provider id on the row), held (a visible hold, on Slack and the conversation page) or declined (a named product rule, shown on the conversation page). One sweep retries anything not delivered, bounded, then holds it. A retry of the same event re-attempts a row that is not delivered. Call end never disarms the backup.
  4. Honest surfaces. The mid-call tool, the Slack card and the conversation page read the row's state. "Note left for the office" can only render from a delivered row.
  5. Wording is a grade, never a gate. Banned words, length and grounding become a harness score on the capture prompt, reported on a page. With no model in the send path, every delivery rule is a deterministic test that runs in CI.
  6. Same rule for texts and emails. When Clara's reply to a text or email fails or is held, the person's own message still goes to the team (it is already extracted verbatim). Staff never see our error; they always see the message.
The trade-off, stated
The trade-off, stated

A caller with no dialable number gets a note anyway, with "number withheld". One of the two Oct 8 "no number" losses had said and confirmed her number on the call; the engine refused anyway. Two more silent branches from the second pass: a transfer that went to voicemail counts as "handed to a person" (4 of the 8 losses), and a backstop logs "nothing was lost" seconds before the call-end step refuses the note.

Harness (built first, red on main)
Harness (built first, red on main)

Extends the existing scripts/team-notify-replay (no new harness dir; registered on the Atlas). Fixtures: the 8 real lost messages, scrubbed; ~30 delivered ones that must stay delivered; one synthetic fixture per silent branch (16 found) with its fault injected: model throws, model returns banned words, function dies after the row write, SendGrid fails, thread write fails, no team email. The one existing test that expects zero notices when the model throws is flipped to "known gap". Mutation control: re-enable the gate, suite goes red. Runs on the subscription; the hermetic fault-injection subset runs in CI.

InvariantChecked by
Every captured message ends delivered, held or declined; no other state existsReplay every fixture, assert the end state
A model outage or a wording failure never changes deliveryThrowing model → still delivered
A row not delivered after N minutes is retried, then heldDie after row write → sweep sends in one tick
Nothing says "delivered" without provider evidenceRefused row cannot render "note left"
Every end state is readable on the conversation pageOne thread row per message, any state
PRs (fixes, no switch, each mergeable alone)
PRs (fixes, no switch, each mergeable alone)
#PRProof
1Harness: delivery suite, fixtures, mutation controlRed run on main listing every failing invariant
2Send path: the captured note under the fixed template; rewrite-and-police removed from the voice pathIncident fixture green; replay of the 11 wording failures produces an email each
3One record: row at capture, states, one sweep, idempotency re-attempts, call end never disarmsDie-after-write and failed-send fixtures green
4Honest surfaces: tool result, Slack card, conversation page read the rowProduction screenshot of a held and a delivered note
5Texts and emails: the person's message goes when Clara's turn fails (after the Oct 25 yes)Fixtures from the Oct 25 harness

Then a real call on the Willows line, a message left, the email opened, the row and the page checked. Live everywhere on merge (fix; Fede 2026-09-30).

Recovery and open items
Recovery and open items
Retro: how the gate got built (Oct 3–5)
DatePRAddedFede's words
Oct 3ask"One sentence… call back number is this. And that's it."that
Oct 3builder promptSession 003's own spec: one sentence, 20 words, banned words, a backup email on failurenone
Oct 4#1616228-word cap, he/she ban, 2 retries (builder's addition)none; his own example sentence that day used "her"
Oct 4#16403Failed check = no email; the e2e test flipped from "1 notice" to "0 notices"Shown an ugly backup email ("Pat H. said: …"), asked "Did I ask for that?", offered A keep it / B retry, alert, send nothing: "No, I don't want a fallback." Inference: he rejected the format, not delivery. "Send their words plainly" was never offered.
Oct 5#16482Call-end backup email silenced toonone; reviewer said "get a line from Fede"; nobody did
Oct 5#16532Second model "grounding" checknone

Rule added: a wording check grades a message, never blocks it. A caller's message always reaches the office; "no email" only when there is no message. A session offering Fede A/B on a customer-facing drop must include "send it plainly" as an option.

PropFlow Docs