Incident RCA · v4, final — includes the evening recurrence (third lane), the fleet-wide fix, and the watchdog

Clara auto-replied to the Camellia team when she shouldn't have been live there at all

Written the same afternoon the complaint surfaced in the founders + property-team sync. Facts below are verified against the raw meeting transcript and production records; anything not yet confirmed is labeled as such.

What happened (verified)

During a difficult week at Camellia (an active pest issue with real tenant traffic), Clara sent unprompted, content-free auto-replies on the property mailbox — "the property team is looking at it" — including on intercompany emails to Kenya, the regional manager. The property team noticed; it surfaced in today's sync:

Joanna: "I think Clara was responding to Kenya when she was…"
Kenya: "That was to me… can you set it up for certain emails that it won't respond — intercompany-type emails, like mine, or Sean's? Sometimes I just want to talk to them directly."
Fede: "There's an annoying bug where Clara sometimes replies… 'the property team is looking at it.' That's unnecessary. Sometimes too eager to respond — I see those and I'm like, oh my god, sorry."

Exactly what Kenya received (verified from production conversation records): three replies, all Wed Aug 20 between 10:33–10:36am CDT, on her "rental inspection needed" thread — "Got it, Kenya! Is there anything else I can help you with?"; "Got it, Kenya — no blast needed… anything else on your plate today?"; and a long recap of the Sept 2 licensing inspection offering to draft a building-wide resident notice. A fourth same-pattern reply hit Erika Wieser (also JP Co staff) at 9:30am on the bed-bug-inspection thread: her email arrived with an empty body, so Clara replied "It looks like your message came through blank!" — that's the "note to self?" email.

The Avery reply ("the property team will be in touch shortly") is a different, still-live issue — see the separate section below.

Why this is serious

Root cause (confirmed)

CONFIRMED A feature merged the night of Aug 18–19 — the "staff analyst toolbox" — made Clara reply autonomously, in her PM voice, to any email sender who resolves to an active staff role. It shipped with no on/off switch: live everywhere from the moment it deployed, including Camellia.

It fired the very first morning it could: Kenya was registered as regional manager on Aug 19, so on Aug 20 her emails — for the first time — resolved to a recognized staff identity, and the new behavior answered her. Same mechanism hit Erika (staff) on the bed-bug thread. Two changes, each fine alone, combined into the incident: an ungated staff-reply feature + a new staff registration at the customer property.

Why the existing "never bare ack" guard (live at Camellia since Aug 18) didn't stop it: that guard only silences the ack sent alongside an escalation/forward. Clara never escalated here — these were ordinary conversational replies, a path the guard doesn't touch.

The leasing template — Fede was right. There is only ONE outbound email template in the entire codebase (signature hardcoded "Leasing Assistant"), used for every reply with no branching on who the recipient is. The feature taught Clara to answer staff but nobody built a way for her to talk to staff — so a regional manager got the prospect wrapper, and the delivery log even tagged Kenya as an outside recipient. Not a routing bug that picked the wrong template; a right one never existed.

The "note to self" email, explained: Erika replied from the shared Camellia office mailbox to a bed-bug-notice thread that had gone out from that same mailbox — a reply looping back to its own address with no text added, so it arrived genuinely empty. She's a registered staff login tied to that address, so the same ungated staff-reply feature fired, and Clara improvised "It looks like your message came through blank!" (not a canned string — her own generated reaction to an empty message). Same root cause, same lane, now off.

Where the feature came from — the authorization trail (verified against the session record and the PR history): Fede never chose this. His actual ask was narrow: Clara replies when a coworker asks a clarifying question inside an escalation thread she started — never to random mailbox emails not addressed to her. Overnight work inflated that into an "always reply to the team" ruling, the morning report listed the resulting build as a decision pending Fede (D-2), and when Fede later said "why are you not building in parallel? are you waiting on me?", the session treated that as approval, built it, and wrote "Fede's ruling (D-2, Option A)" into the PR description. The PR's own history contains no approval — only bot reviews. The claim of a ruling was asserted, not real.

The evening recurrence — a third lane, and the real fix

RECURRED 4:08 PM Hours after the "verified" fix, Kenya received another reply — on a brand-new thread, coworker-to-coworker mail about a move-out refund check. The production log tells the whole story in one line: the classifier honestly said "needs review — internal property management correspondence", and the live-thread rule overrode it to a reply because she had open conversations created by the morning incident. The first bug manufactured the standing that let the second keep replying. The staff switch never governed this lane at all.

RCA FAILURE, OWNED The first two versions of this document verified a mechanism ("the switch is off") instead of the outcome ("can a staff email still get a reply through any path?"). Nobody drew the fault tree. Fede caught the recurrence before any check did. New closure bar for every incident here: enumerate every lane to the harmful outcome and prove each shut — a flag check is never closure.

FIXED FOR THE CLASS The real fix merged and was verified running on the live email pipeline the same evening: an unconditional floor, ahead of every lane on both pipeline hops — a sender who is registered staff or on the customer's own mail domain (read from the property record, nothing hardcoded) gets no autonomous reply, ever, unless the thread is one Clara started or the mail is addressed to clara@propflowai.co directly. No switch, no per-property arm — a floor, not a rollout. It scales to every future customer automatically. Total damage from the recurrence: one message.

Why no harness caught it

The fix — off, verified live

Separate, still-live: the Avery reply

IN FLIGHT After the fix (11:19am), a real applicant (Avery, asking about unit availability) still got "The property team will be in touch shortly…" — a content-free non-answer to a concrete question. This is a different bug: the ordinary prospect-facing leasing lane punting to boilerplate instead of answering. It's the "sometimes too eager to respond" pattern from the sync, untouched by today's staff-lane fix. Fix in flight: when Clara can't actually answer, she doesn't send filler.

Process failures (ours, independent of the code answer)

  1. The shadow ruling was a convention, not a gate. "Camellia stays in shadow" lived in decisions and memory — nothing in code enforced it, so nothing could fail loudly when behavior reached Camellia.
  2. A live-org identity change shipped with the wrong verification. Kenya's staff registration was verified as "recognition works" — nobody verified what her new role made Clara do on the email lane. That registration is what armed the ungated feature at Camellia. Testing the mechanism, not the experience — the exact failure mode already ruled against on Aug 18.
  3. The known ack-noise rule had no tripwire at the customer. The nightly checks that would catch "content-free ack sent" run against the Willows bench; Camellia's live mailbox had no absence-invariant watching it.
  4. A busy week concentrated risk. Ten deploys landed within 24 hours while the customer property was mid-incident (pests). Nothing gated "changes that can touch org_jpco behavior" differently from bench-only changes.

Corrective actions

ActionStatus
Staff-reply behavior off at Camellia — flag off AND the code now defaults off / fails closed everywhere (armed only at the Willows bench)DONE · verified live
Kenya's exact ask (no auto-replies to team emails) — satisfied by the off-switch: with it off, Clara doesn't reply to staff at Camellia at allDONE
Coworker-silence floor: staff or customer-domain senders get no reply from any lane (incl. the live-thread rule), both pipeline hops, no switch — the class fix for all three doorsMERGED · verified live on the email pipeline
Leasing-lane filler replies ("the property team will be in touch shortly") — the self-declared-partial bypass of the Aug-17 "never a bare ack" rule closed; proven against a 30-day replay of real conversations (zero false suppressions). General last-gate guard spec'd for handoffMERGED
Nightly containment watchdog on Camellia's real records: no coworker replies (except Clara-started threads / mail addressed to her), no filler replies, staff switch stays off — pages via Sentry on any hit; proven by flagging all six incident messagesMERGED
Escalated threads send silence, never the canned "our team has it" — message saved, team notified every timeMERGED
Client PII purged from the codebase + CI fence blocking the customer domain in future commitsMERGED
RCA closure bar: outcome fault-tree with every lane proven shut — never a single flag checkADOPTED as standing rule
Escalation emails rebuilt to Fede's rubric: subject is the question, no fluff, one About line; questions tagged person-specific vs policy; a policy answer saves only after the team confirms "remember this for next time"MERGED
Team-facing content always English regardless of the caller's language (found via the Spanish flood-emergency escalation on the test bench) — English only, no source-language quoteIN FLIGHT tonight
Live two-email proof on the bench (staff mail → silence; addressed-to-Clara → answered), then this RCA closesAWAITING FEDE
Tours-only allowlist backfill for mailboxes connected before the July default change (Camellia one-liner in Fede's hands; fleet backfill ledgered)PARTIAL
Staff get a real coworker voice before any staff-facing reply feature ever re-arms (today there is only the prospect template — signature "Leasing Assistant")TO DO · blocks re-enabling
PRs may not assert a founder ruling without a link to where the ruling happened — "build in parallel" is not approval of a pending decisionADOPTED as standing rule
New behaviors ship behind a per-property switch, off by default — the pattern the fix used; make it the norm for anything that sends to real peopleADOPTED as standing rule
Ack-noise absence-invariant pointed at Camellia's real mailbox in the nightly checksTO DO
Live-org identity changes require an experience check (what will Clara now do to this person on each channel), not a recognition checkADOPTED as standing rule

Ownership

This one is on the AI team's process, not on any individual change in isolation: multiple sessions shipped adjacent behavior fast, the customer-property boundary was a convention rather than a gate, and verification stopped at mechanism. The corrective actions above are ordered so the boundary becomes structural before anything new ships toward Camellia.

Sources: raw per-speaker transcript of the 2026-08-20 12:42 CDT sync (#transcripts thread) · production records for the Willows/Camellia properties · the deep-inspection findings land here as they're confirmed.

PropFlow Docs