AppFolio door, company-wide flip: production readiness

What the switch really does, what is proven at the Willows, what is not, and what has to happen before Western Slope's leasing texts move into AppFolio. One switch for the whole company, as Fede ruled on Oct 19; the flip itself stays his call.

2026-10-19, evening MT · Proposed — pending Fede's review · code read at origin/main 866fb1c9f · production reads only, nothing turned on · source: inspection I1 (session 002), the Oct 19 Willows battle test, the proof table and the shared-inbox design

On this page

  1. Verdict in one table
  2. What the switch does to conversations already running
  3. Does every reply in AppFolio wake Clara?
  4. The daily AppFolio request budget
  5. Other side effects
  6. Situs Group
  7. The runs that turn yellow green
  8. Calls for Fede
  9. Claims register

Short version: the reply loop inside an existing AppFolio thread is proven at the Willows; the new-lead thread start was proven at the Willows on Oct 20; the daily request budget and mid-conversation number jumps can bite on day one; every tenant and prospect reply does not yet wake Clara. Recommendation: run the eight legs in section 7 and take the six calls in section 8 before any flip.

Verdict in one table

1 · Verdict in one table

Not ready for Western Slope tomorrow. The reply loop inside an existing AppFolio thread is proven, and so is the path Western Slope hits most: a brand-new lead whose first text from Clara starts an AppFolio thread (Willows, Oct 20 16:58Z, run L3, about 27 robot requests, 99 s reply round trip, no false alert). Two things can still bite on day one regardless of testing: the daily AppFolio request budget, and conversations that jump to a second phone number mid-thread.

#WhatStateWhy
1Prospect texts AppFolio, Clara wakes, replies through AppFolioGREENWillows, Oct 19 11:01Z: 59 s text-to-phone, nothing from Clara's line
2Two texts seconds apart get one replyGREENWillows, Oct 19 11:05Z
3A conversation on Clara's own number stays there when the person texts herGREENWillows, Oct 19 05:53Z
4STOP and START typed on the AppFolio line are recorded, with and without a guest cardGREENWillows, Oct 19, two runs
5A text to Clara's own number after the flip is still answeredGREENthe inbound path never reads the switch
6New guest card → Clara's first text starts the AppFolio threadGREENWillows, Oct 20 16:58Z (run L3): Clara's first text from guest card 311 started the AppFolio thread (AppFolio message 1166642348) and reached the test phone about 18 s after the reset, for 20 robot requests. The lead's reply mirrored (1166644184) and woke Clara; her answer went back into the same thread (1166645956), 99 s from the lead's text to her answer on the phone, about 7 requests. No "door down" alert, nothing from Clara's own line. About 27 requests in all, against 171 on Oct 16. The earlier refusal (number missing from the phone registry) is fixed by #21452. The only defect seen is a Clara reply bug, tracked separately and not a door defect: she offered a tour slot that had already passed. Side findings still open: #21453, #21454, #21455
7Open conversations on Clara's number keep that number at the flipREDprotected only when the sending code names the conversation; several senders do not (section 2)
8Every tenant and prospect reply in AppFolio wakes ClaraREDfour gaps, three are one-line fixes (section 3)
9"One switch for all modules"RED as wordedmaintenance texts to tenants and the renewal tool texts never consult the switch; they stay on Clara's line (section 2)
10Western Slope's daily AppFolio request budgetREDthe inbox copy alone used 3,664 of 4,000 by 7 pm on Oct 19, before a single Clara text (section 4)
11Situs GroupREDno inbox copy, no Clara login in AppFolio, Clara not live; "answer AppFolio replies first" is not a mode that exists (section 6)
12Tour confirmation and reminder through AppFolioGREENWillows, Oct 20 01:25Z: the tour booked by text and Clara's confirming reply went through AppFolio (thread row 1166348275, 52 s). The 1-hour reminder fired Oct 20 14:00:00Z and reached the test phone from the AppFolio texting number 23 s later (AppFolio message 1166428613); nothing left Clara's own number and no "door down" alert posted. The separate tour-confirmation sender did not fire on the text-booked path (the confirming reply covers it). Two bugs found on the way: the record holds a different unit than Clara confirmed (#21278); the weekend check-in step is not registered on the tour worker (#21280)
13Follow-up texts through AppFolio, and they stop when the person repliesYELLOWthe Willows re-engagement cycle restarted on the Oct 20 replies; its next touch is due about Oct 21 01:24Z and will be checked then
14After a STOP, the next send is refused on both numbersGREEN with one holeWillows, Oct 20 01:31–01:37Z: STOP recorded in 60 s, Clara's next reply blocked by the shared gate (no outbox row, nothing reached the phone), START recorded, the next reply went through AppFolio again (row 1166350188). The hole: a send graded "transactional" to a stopped number is allowed and only logged, so the refusal holds for outreach-graded sends only (ask A7). Also found: Clara tried to confirm the STOP by text and the blocked row shows as sent (#21279)
15A teammate's AppFolio text puts Clara on holdYELLOWunit-covered; needs a second AppFolio login to run; and nothing ever releases that hold
16Texts with a photo or PDF stay on Clara's numberYELLOWin code, never run
17Held texts expire or are re-sent under the capsYELLOWno retryable hold has ever happened live
18Clara's texts in AppFolio show under her own login at Western SlopeYELLOWcredential says user 540 "Clara Propflow"; not verified by a send. If wrong, her texts read back as staff and mute her
What the switch does to conversations already running

2 · What the switch does to conversations already running

There is no "new conversations only" mode. The company setting is read on every single send, with no cache and no restart. The flip changes the next outbound text of every conversation at the company, decided per send by four rules in this order.

EVERY OUTBOUND TEXT, AT THE MOMENT IT IS SENT 1 · Staff, vendor, or media?→ Clara's number, always 2 · Company switch on?→ no: Clara's number 3 · Does the send name its thread?→ newest decisive row picks the number 4 · Otherwise→ AppFolio (start a thread or hold) WHAT THAT MEANS AT THE FLIP Keeps Clara's number (about 28 senders) Clara's replies · follow-up texts · re-engagement · tour confirmation and reminders · application link · lockbox code approved held replies · collections · every maintenance text to a tenant and the renewal tool texts (these never ask the switch at all) Jumps to the AppFolio number mid-conversation a teammate's answer relayed to the renter · texts to a household member with no prospect record · mass texts with no thread · a reply when the router finds no thread · the first renewal offer (its thread is empty) · anyone a teammate texted in AppFolio after Clara's last text
Rule 3 is the only protection for an open conversation, and it only works when the sending code names the conversation. Switching back is also a number change: with the switch off the thread is never read, so everyone running in AppFolio gets Clara's number again on their next text.
CaseNext Clara text leaves from
Started on Clara's number before the flip; the send names the conversationClara's number, unless a teammate or the renter wrote in AppFolio after her last text; then AppFolio
Started on Clara's number; the send does not name the conversationAppFolio: a second number mid-conversation, no guard
Started in AppFolioAppFolio, into the same thread
Brand-new person after the flipAppFolio: Clara must start a thread from the person's guest card. No card = held, one alert, never Clara's number
Brand-new person who texts Clara's number firstClara's number
Photo or PDF, staff, vendorClara's number, always
A scheduled job that started before the flip (tour reminder, follow-up step, renewal reminder)Decided at the moment it sends, same rules; nothing is remembered from when the job started

Running at Western Slope right now (Temporal, read on Oct 20 00:58Z): 0 renewal jobs, 2 tour jobs, 19 follow-up sequences, 4 re-engagement cycles, 63 maintenance jobs. All of the leasing ones name their conversation, so they keep Clara's number for a Clara-number thread; the household-member variants do not. The maintenance ones never consult the switch.

Western Slope specifically: the inbox copy has been on since Oct 16, so staff texts and AppFolio's own template texts are already filed on Western Slope conversations. A replay on the design page found 33 of 41 people would get Clara's next text on the number they last wrote to; 8 would not.

Does every reply in AppFolio wake Clara?

3 · Does every reply in AppFolio wake Clara?

Not today. Fede wants it to be true. The wake rule is: a live inbound text from the renter, the switch on, and Clara's own text is the newest office-side message on that conversation. Her texts from her own number count, so a Western Slope prospect she has been texting on her number who answers inside AppFolio does wake her, and her reply then leaves through AppFolio.

Side effect of the flip, stated plainly (Oct 20): with the three gaps closed (#21315, merging dark; the door is off at every customer, so nothing changes until a flip), a tenant who texts first wakes Clara; a tenant replying to any Clara text, not only a renewal offer, wakes her; a bulk send or an AppFolio notice no longer counts as a teammate speaking. A teammate who wrote after Clara still silences her, and under Supervised every send is still held. The source for "wake on every reply" is a relay of Fede's Oct 19 voice note, not his raw words; session 005 is confirming the rule with him, and the PR closes if he says no.

GapFixSize
Tenant texts never wake her (held "tenants later")PR #21221, open tonightmerging
After #21221, a tenant wakes her only if her last text was a renewaldrop that one condition (issue #21246)one line
The renter writes first and nobody from the office has spokenwake when there is no office-side message at allone line
A bulk send or an AppFolio notice after Clara's text counts as "a teammate spoke"exclude bulk and notice rows from the teammate checkone line
A teammate wrote after Claranone: this is Fede's own "another human replied, we stop" rule; the hold still blocks the send even if the wake firedhis call on the shared-inbox page
Texts that arrived while the switch was off (Western Slope since Oct 16) are never re-decidednone planned; only texts after the flip are judged. Renters waiting in AppFolio before the flip get no reply from Claraby design (Fede Oct 15: no late catch-up)
Rows held "tenants later" before #21221 do not re-filemark them history; otherwise they would wake her on stale textsone-off script, issue #21213
The daily AppFolio request budget

4 · The daily AppFolio request budget

Western Slope, Oct 19, no Clara texts yet

One budget of 4,000 robot requests per AppFolio database per day covers the inbox copy and every door text. The inbox copy alone used 3,664 by 7 pm MT (3,324 on Oct 18; 3,470 on Oct 16 and 17).

What a text costs, and what happens at zero

A reply into an existing thread: 7. Starting a thread from a known guest card: 20. Finding the card by phone first: 220. Past the ceiling a text is held for good with a "door down" alert; it never falls back to Clara's number.

Clara sends about 13 texts a day at Western Slope. On a day like Oct 19 the door would go down in the evening while the inbox copy keeps ticking. This needs a decision before the flip: a cheaper inbox copy (fewer reads once the backfill is done), a bigger ceiling, or a reserved slice for sends.

Other side effects

5 · Other side effects

  • Nothing checks the flip. The admin switch writes the field and logs it. It does not check that the inbox copy is on or that Clara has a login in AppFolio.
  • Clara's texts look like a teammate's. They appear under her AppFolio login, no label or signature. Lockbox codes and application links become visible to staff in the thread.
  • False "door down" on thread starts (#21068, open): #21068 (read-back gave up after ~4 s and raised a false 'door down') is still open as a code fix, but it did not recur on the Oct 20 Willows run (L3): the thread started and the read-back completed in about 18 s with no alert.
  • Her own number stays printed in tour confirmation emails and follow-up email footers ("text us at …"). A prospect who texts that number starts a thread on Clara's number, so after the flip some Western Slope prospects will have both numbers in play.
  • A teammate's AppFolio text holds Clara on that person for good. No code path releases the hold.
  • Staff in AppFolio see no history from Clara's number: the copy runs one way, AppFolio into PropFlow. A thread that jumps mid-conversation starts in AppFolio with no context.
  • Email is untouched. Each door text also produces an AppFolio "you received a message" email, which is classified and skipped.
Situs Group

6 · Situs Group

FactSitus GroupWestern Slope
Inbox copyoff, never ranon since Oct 16 (912 rows)
Clara's login in AppFoliononeuser 540 "Clara Propflow"
Clara livenoyes
Company lineattached Oct 19 17:58Zattached
AppFolio texting in useinbox read on Oct 12: no messages; about half of tenant texting runs on two staff members' personal cellsin daily use by staff
Phone systemCrexendo; phase 1 proposal: nights and weekends to Claraforwarded to Clara

"Answer AppFolio replies first" is not a mode that exists. The wake needs the switch on, and the switch moves all of Clara's leasing outbound at the same time. Flipping Situs today would have Clara start threads and never hear back, because nothing copies the inbox. Replies-only needs a small new build: the wake reads its own setting instead of the door switch, plus the "renter writes first" fix above; the reply itself already leaves through AppFolio because the renter's AppFolio text is the newest row. Before any of it: Clara's AppFolio login at Situs, the inbox copy on with a few days of budget readings, Clara live.

The runs that turn yellow green

7 · The runs that turn yellow green

All at the Willows (our test property), never across the shared-bench blackouts (03:40–04:30Z and 07:00–07:45Z). Started tonight: runs 2, 3 and 4. Run 1 needs a purchase.

RunTurns greenNeedsMinutes
1. New lead: create a guest card → Clara's first email → her first text starts the AppFolio thread → prospect replies → Clara replies through AppFoliorow 6: the run was done Oct 20 16:58Z (L3) and row 6 is green; the reds left are rows 7 to 11one fresh Twilio number: every one of our 26 numbers already has a person, a thread or a live job on it. A purchase, Fede's go45–60
2. Tour booked inside the door thread → confirmation through AppFolio; tour set ~70 min out so the reminder fires through AppFoliorows 12the Willows test prospect line (has a door thread)20 + 70 wall clock
3. STOP → trigger a send → refused on both numbers → STARTrow 14same line15
4. Follow-up: the running Willows re-engagement cycle on that line fires its next touch through the door on its own; reply stops itrow 13observe, then replypassive
5. Teammate text in AppFolio on that thread, then the prospect replies → Clara stays quietrow 15a second AppFolio login at the Willows database20
6. Photo or PDF to a prospect → leaves from Clara's numberrow 16a product path that sends media to a prospect; none obvious for leasing15
7. Number-switch replay (read-only): run Western Slope's open conversations through the door decision per sender type and count the jumpsrow 7 sizedbuilder time60
8. Tenant leg: after robot #580 and app #21249 merge, a renewal-style text to a Willows test tenant, tenant replies, Clara's held reply, approve, sent in AppFoliotenant sidethe Willows test tenant whose thread was opened tonight30
Calls for Fede

8 · Calls for Fede

#AskOptionsRecommendation
A1Buy one Twilio number for the new-lead run (row 6: the run was done Oct 20 16:58Z (L3) and row 6 is green; the reds left are rows 7 to 11)DONE: Fede said yes Oct 20 02:50Z; bought +1 720 734 8022 (Twilio sid PN15a51f3d903a660ef33f002551e9ce09, "Door new-lead test caller (Willows)", $1.15/mo). The new-lead run started after the 04:30Z bench blackoutyes: about $1.15 a month. Checked Oct 20 03:05Z against all 27 lines we own: 24 have already texted or called the Willows; the 3 clean ones are live duty lines (staff sign-in codes, the talk-to-a-person ring line, the Situs login-code line) and could still be known to AppFolio from a call. A fresh number is the only clean way
A2The number-switch senders (row 7)(a) fix the known ones before the flip: the teammate-answer relay reads the thread id it already has; household-member and mass texts name their thread · (b) accept the jumps(a): three small fixes, no switch; the relay fix is one line
A3The request budget (row 10)(a) reserve a slice of the 4,000 for sends and slow the inbox copy once the backfill is done · (b) raise the ceiling · (c) flip and watch(a): the copy is the spender; a reserved slice means a Clara text is never the one that trips the ceiling
A4"Every reply wakes Clara" (row 8)(a) the three one-line fixes now, the teammate rule stays · (b) leave the wake as is(a)
A5"All modules" (row 9)(a) keep maintenance and renewal-tool texts on Clara's number for now and say so · (b) route them through the switch too (a day, and the tenant side depends on #580/#21249)(a) for the first flip; (b) as the next build
A6Situs Group(a) nothing until Clara is live there with a login and the inbox copy on · (b) build "replies only" as its own setting now(a), then (b) if Situs still wants replies-first
A7A send graded "transactional" reaches a stopped number through AppFolio today (allowed and logged). Keep that on the AppFolio door, or refuse every send after STOP on the door?Refuse every send after STOP on the door; AppFolio itself has already told the person they are unsubscribed. One small fix, no switchyes / hold
Claims register

9 · Claims register

IdClaimStatusEvidence
R1Reply loop, double text, Clara-number thread stays, STOP/START recorded: proven live at the Willows on Oct 19 (05:53Z, 08:30Z, 11:01Z, 11:05Z, 11:10Z); the new-lead thread start was proven at the Willows on Oct 20 16:58Z (run L3, about 27 robot requests, 99 s reply round trip, no false alert; the Oct 16 try had been abandoned)VERIFIEDsession 002 battle-test-results.md Parts 1–3; proof table on pms-conversations-in-clara-picture#oct19; issue #21068
R2The company door is read per send (direct organization read, no cache found) and the thread is read only when the send names a conversation; group B senders (team-note relay, household parties with no prospect row, mass texts, router misses, first renewal offer) do not name one and jump to AppFolio; maintenance-to-tenant and renewal tool texts pass only an entitlement property id so the door read returns nullVERIFIED (code at 866fb1c9f)dispatcher.ts:515–530; thread-door.ts:55–98; outbound-record.ts:111–132; reply-release.ts:1580, :2763–2783; rating.ts:883; company-text-door.ts:18–29; readiness/agentA-senders.md (43 senders)
R3Running Temporal workflows by company at 2026-10-20 00:58Z: Western Slope 63 maintenance, 19 follow-up, 4 re-engagement, 2 tour, 0 renewal; Situs 2 maintenance, 1 follow-upVERIFIED (production, read-only)temporal workflow list, running = 358; readiness/temporal-running.json, wf/inputs.jsonl
R4Wake rule: live inbound renter text, door on, Clara's text newest office-side; tenant threads held at main; the four gaps and their one-line fixesVERIFIED (code)wake-on-reply.ts:49–96; file-message.ts:256–269; #21221 branch; readiness/agentB-inbound.md
R5One 4,000-request daily ceiling per database covers the mirror and the door; WS used 3,664 by 18:59 MT on Oct 19 with zero door sends (3,324 Oct 18; 3,470 Oct 16–17); past the ceiling a door text is held final; reply 7, card start 20, phone lookup 220 requestsVERIFIED (code + production STATE row)watch.ts:141, :212–233; appfolio-text-door.ts:138–146; l4-core.ts:5707–5709; PMSMIRROR#appfolio#westernslopepm STATE
R6Situs: inbox copy absent, no Clara login (no claraUserId), claraLive false, 0 mirror rows, company line attached 2026-10-19T17:58Z; "replies first" needs the wake to read its own settingVERIFIED (production, read-only) + INFERENCE on the buildORG#org_a3376147 PROFILE and attachments; PMSMIRROR#appfolio#situsgroup count 0; readiness/agentC-sidefx-situs.md
R7"On a day like Oct 19 the door would go down in the evening" and "about 13 texts a day" are arithmetic on the readings above, not a measured outageINFERENCEreadiness/findings.md section 5

Raw findings with every file:line, record id and test number: session 002 scratchpad door/readiness/ (local only; contains test numbers).

PropFlow Docs