Western Slope's issue list, Sept 21: our version

Wednesday morning decision: should Clara send her first emails to Western Slope prospects on her own? Short brief, pending Fede.

2026-09-21. Source: Jason Fish's (Western Slope) email to hello@/fede@/kat@/cheryl@, Mon Sept 21, 5:01 PM CDT, plus three read-only production investigations run the same day. Post-call section: status block added 9/22. Reconciled against merged and open work 9/23, 12:30 PM MT. Incident row and review-hold coverage row updated 9/23, 12:45 PM MT. Reconciled again against merged and open work 9/23, 12:55 PM MT, again 9/23, 6:55 PM MT, again 9/23, 9:56 PM MT, again 9/24, 12:54 AM MT, again 9/24, 3:53 AM MT, and again 9/24, 6:53 AM MT. The merge freeze cleared overnight and the backlog landed: 22 pull requests merged between midnight and 12:54 AM, and eight of them were exercised on a real call or card at our Willows test property before this reconcile. Row added 10/8, 5:30 PM MT for Jay’s duplicate-guest-card report. Rows added 11/3 for Kat’s late-text report, the wrong-tour cancel, and the Oct 28 call asks.

Contents

  1. At a glance: complaint, status, owner
  2. The short version
  3. Item by item: our verdict
  4. Already fixed
  5. Open, and what we found
  6. Duplicate guest cards: cleanup (steps 1 and 2 done 10/8; AppFolio retirement pending)
  7. One person, several homes: gap analysis and easy wins (10/8, separate short page)
  8. Live vs. after the call: where side effects should happen
  9. What we do not support today
  10. Where they may be thinking about PropFlow incorrectly
  11. New asks and what it would take
  12. Decisions for Fede
  13. References

At a glance: complaint, status, owner

Done · 42 Landing tonight · 2 Bug, fixing now · 21 New build: later · 5 Not doing · 0

Nothing here is waiting on you except the rows marked Your call.

Done

ComplaintStageWhat's leftOwner
Calls dropping on transfer to a personDoneTwo small cosmetic label fixes leftFede
Hand-off emails carried garbled leftover wordsDoneMerged and live tonightFede
Guest-card notes read like the whole inquiry, not an outcomeDoneNotes are now one short outcome sentence. Merged tonightFede
Notes weren't landing at the moments that matterDoneA note now lands on hand-off, application sent, or a failed transfer; repeat calls from the same person write at most one note a day. Merged tonightFede
Duplicate-note check missed some real duplicatesDoneThe check now reads both places AppFolio stores a note. Merged tonightFede
Clara's self-introduction read like an address, not a company nameDoneFixed everywhere she introduces herself. Merged tonightFede
Clara could quote numbers before she was sure which home she meantDoneShe waits until the home is certain. Merged tonightFede
Prospect summary could be written more than once per turnDoneNow written once per turn. Merged tonightFede
Emails and notes do not name the propertyDoneEvery team email now names the property, or says it isn't known yet. Merged tonightFede
Lead details could be lost if a note write failedDoneLease term, budget, and preferred home now survive a failed retry. Merged tonightFede
A retry could post the same note twiceDoneA retry never re-posts a note that already landed. Merged tonightFede
Clara’s first email did not know which home it was aboutDoneMerged and live 9/23, 12:47 PM: her first reply now works from the home the card names, so she answers about that home instead of the office record. The companion prompt change — she is told plainly whether the home is known, unclear or missing, and never offers a tour when she does not know the home — was tracked as #11180 (closed) and split into PR #11276, a pure resolver, plus part 2 (the prompt block) and part 3 (wiring it in). Update 9/23 late afternoon. The pure resolver is merged. Part 2 — PR #11288, she names the home she is sure of and the tour offer stays — is merged and live as of 9/24, 12:38 AM: Clara names the home she is certain of, and when she is not certain she still offers a tour instead of going silent. Parts 3 and 2b are queued behind it.Fede
A real prospect's one-hour tour reminder was skipped, and homes had no number to text fromDoneFound on their traffic 9/19. Reminders now find the tour and page us if one is skipped; every Western Slope home texts from the 970 line; the application goes out via AppFolio after every tour and shows in the thread. Live since 9/20Fede
Clara offered to put a texting or emailing prospect through to a person, which that channel cannot doDoneVerified in production 1:36 PM (PR #11085): a live bench text to the Fairhaven test line asking “want me to try that transfer again?” got “I can’t transfer your call, but I’ll let the property team know” with the office number and hours, instead of an offer she can’t keep. Proof suite ran 4/4, and a mutation control that put the old sentence back graded red.Fede

Landing tonight

ComplaintStageWhat's leftOwner
Clara should not handle rent, balance and lease questions for Western SlopeLanding tonightFede's call 9/22: turn the resident lease-and-billing helper off for Western Slope. The switch is built and merged — when it is off, a tenant asking about rent, a balance, lease terms, move-in or keys gets a complete message taken and the team gets the usual notice instead of being handed to that helper. It is on everywhere by default and nothing changes for other clients (PR #10769). What is left: the deploy, and then writing the "off" value on Western Slope’s record — merged, not yet exercised at Western SlopeFede
Calls not reaching the right staffLanding tonightMerged and live 9/22: call recordings, a stranded transfer still saving the conversation, failed transfers no longer marked as connected, a failed transfer out taking a message instead of dropping the caller, "connect me to the office" working from every agent, call transcripts after a transfer no longer silently dropped, and no false missed-call page for a call Clara forwarded out. Also merged and live 9/22 night: the in-house maintenance handoff line only says its piece where it applies (PR #10771); a staff phone system that answers instantly is now handled by default, so a person who picks up is recognised as a person (PR #10835); and a transcript from a call forwarded to a human reads as a normal conversation, trimmed to the moment the person picked up (PR #10882). Still open: forwarding an outside destination through our own line so the leg is recorded and attached to the conversation — review found the original premise wrong, so it no longer tries to show the caller’s own number to the destination; that needs a redesign and is being fixed now (PR #10775). The first piece of that redesign merged 9/22 night: the plumbing that lets a forwarded call carry the caller's own number on the leg Clara owns. The rest of that redesign is in review 9/23 morning: every forward now hands the call straight over so the caller's own number reaches the destination, and the ring list keeps working. Nothing switched on yet — it changes no call today. Still waiting on them: an after-hours numberFede

Bug, fixing now

ComplaintStageWhat's leftOwner
One Zillow lead, three guest cards (Jay’s email, 10/8 5:51 PM CDT, Michael Asti)Bug, fixing nowDiagnosed 10/8 evening. Zillow sends each inquiry from a different relay address with no phone or email, so Clara treated the same person asking about 2980 Emerald, 2978 Emerald and 363 Ember Ln as three strangers and made a card for the first two; AppFolio’s own Zillow feed made the third. Clara only looks for an existing card at the same home, never across the company, and her own relay-only cards never show up in our copy of AppFolio’s cards, so nothing could find them again. Same pattern since 10/1: Tessa Adams, Bowmuxlow Muxlow, Sara Dollens, Thomas Rossi (5 of 22 Clara-made cards are second cards for someone who already had one). Fix: match a relay-only lead by full name across the whole company and add the new home as a new inquiry on the existing card, which the card writer can already do. Cleanup of the existing duplicates is Fede’s call.Fede
Clara's first email greeted the prospect by the wrong name (“Hi Taylor,” / “Hi OF,”)DoneVerified in production 1:35 PM: prod now runs a build containing the merge (PR #11247). Four Willows compose cases pass (“Hi Jay,” / “Hi there,”), and a mutation control reproduced the old greetings.Fede
Clara quoted a $27 application fee; their answer is $40 (accuracy)DoneCause: a rent-roll import was overwriting the fee field on the property; fixed and live. Their 22 answers were in fact applied on 9/15 and Clara has read them since (verified in production tonight; an earlier note tonight saying they were never applied was wrong). One real gap found and fixed: Ember Estates' move-in-day answer. A standing check now compares Clara's live knowledge to their answers so drift shows upFede
Caller named Ember Estates and asked to see 367 Ember Lane; lead filed under the company record, no guest card (found 9/22 on their 9/21 traffic)DoneFixed and live 9/22 evening. After each call the home the caller named is written on the lead, a stale half-address on an old lead no longer blocks the card, and a lead now keeps every home the person has discussed, not just one. The last gap closed tonight: a home named by a caller who already has a lead on file — this caller was on her third call — is now stamped too. Proof: replayed as real calls on our test line, no card before the fix, a card at the named home afterFede
Kat and Beverly's emails feel inconsistent and low qualityDoneMerged and live 9/22: team emails no longer carry filler sentences, the phone number appears once, and an automated alarm call is logged with its number and no request to call it back. Sean agrees: no alert on every interaction. Merged and live 9/22 evening: the shared building blocks every team email and text now draws on — property line, phone format, sign-off — so the notices stop drifting apart. Also merged and live 9/22 night: the escalation notice now signs off as plain "Clara" (PR #10904), the lease, renewal, vendor and turnover notices got the same sign-off (PR #10906), and the guest-card outbox and digest notices moved onto the shared blocks (PR #10909). The last path closed 9/22 night: the decision-request notice, where phone numbers used to print raw, now draws on the same shared blocks as the rest — merged and live (PR #10933). Every team notice is now on one set of building blocks. Full send/hold rules and 7 real examples: Staff notices: send, hold, and what each must carry (proposed, pending review)Fede
Clara's first email ignored the house a Zillow card named (Ember Estates, 2863 Florida Street)DoneFound 9/22. Brody's AppFolio card named 2863 Florida Street under Ember Estates. We matched the house correctly, but the step that writes Clara's first email reads a different field that is only filled in for single-house properties, so she wrote a generic "we've got a variety of homes" email. It was held for review and not sent. Scope: 23 of 32 Western Slope cards since 9/15 have the house matched only in the field the email step ignores. Quick patch in progress (the first email uses the matched house, no property-type check), then one shared "which home" lookup for every email, text, tour and note. Update 9/22 evening: the shared lookup is merged (nothing uses it yet). It was run on 3,390 real guest cards from all three clients and every property type, and never named the wrong house. Tightened 9/22 night: when a card carries an AppFolio unit id we can't find, the lookup now stops instead of guessing another house (still 0 wrong on the 3,390 cards; merged). Also merged 9/22 night: the first email now describes the house exactly like the listing tool does (available-from date, bed/bath/sqft from the leasing figures, clean address). Also merged 9/22 night: every first email offers real tour times, one morning and one afternoon slot on each of the two soonest days (the same picker as calls and texts), even when no single house is known; 0 made-up times on 50 real cards. The first-email fix is merged and live 9/22 evening. Proof: a dry-run draft on Brody's card went from "we've got three-bedroom homes running $2,300–$2,850" to "2863 Florida Street: 3 bed, 2 bath, 1,435 sqft, $2,775/mo, currently available". Nothing was sent.Session 010
Two new Zillow leads (Sara, Nathan) got no draft and no review holdDoneFound 9/22 evening. Clara's first-email step checked each card a few seconds before the sync marked it as a listing-site card, read it as staff-typed, and dropped it for good with no alert. Both were re-sent the same hour and are now review holds; nothing was sent. The fix is merged and live 9/22: an unmarked card is retried for about 30 minutes, then alerts instead of being dropped silently. Only a card actually typed in by staff is skipped.Session 010
Guest-card notes after a call say nothing useful, and repeat calls get the same wordsDoneFound 9/22 on Dylan's two calls: both notes read "Spoke with the caller about the property; details on file." — word for word identical. Cause: the note was picked from a short list of fixed sentences using signals that are not filled in yet when the note is written (whether the call was transferred is stamped about 40 seconds later), so nearly every real call landed on the generic sentence. Fede's decision, 9/22 2:55 PM: every turn is now its own note, appended in order and never edited — after a call and after an email or text, both directions. The card now shows what Clara sent and what the prospect wrote back, in the order it happened, so the history is visible on the card itself. No date stamp in the note body; AppFolio already prints the date above it. Merged and live 9/22 evening: the call notes, so each call now writes what that call was about. Merged 9/22 4:45 PM (PR #10892, main e3e921453): the note guard, Clara’s emails and texts, and the prospect’s own replies, which wrote nothing at all before. Before: Becka Rea’s card showed one generic line per call and nothing for email. After: one note per turn, e.g. “Clara emailed: …”, then “Prospect replied: …”, then the tour confirmation, in order. A follow-up makes the emails Clara holds for review write their note too, once a held email is approved and sent. That follow-up merged 9/22 5:05 PM (PR #10917, main 2cb18bd6f). Before it, a home whose replies wait for approval shows only the prospect's side on the card — after it lands, approving a held reply appends “Clara emailed:” with the exact text that went out, once, and only after the send actually succeeded (a rejected or bounced one writes nothing). An internal follow-up merged the same night makes an approved held email announce itself the same way every other reply does, so the note and outcome steps downstream all see it (PR #10939). Changed again on Fede's ruling 9/22 8 PM: email and text turns no longer write their own note. The first reply is instead recorded as AppFolio's own "Email Sent" communication on the card — the row below. Call notes stay exactly as they are.Fede
Clara's emails should show on the card the way AppFolio's own emails doDoneFirst reply is recorded on the AppFolio card as an Email Sent communication; email and text turns no longer write a note; off until Fede turns it on. Correction, checked 9/23 12:50 AM: this did not reach the shipping line. The change was merged 9/22 8:36 PM into another work branch by mistake, not into the main line, so it is not deployed and nothing on a Western Slope card changes. Checked 9/23 6:55 AM: the clean copy aimed at the main line has passed review and is now set to merge itself as soon as its checks go green. It rides the existing card-write setting, so once it merges it takes effect at Western Slope on the next deploy — no separate switch. Call notes are untouched. Merged on the shipping line 9/23 morning; it takes effect at Western Slope on the next deploy.Fede
"Something else" callers — the office-line destination forwarded back into Clara and dropped the call (Twilio sids CA765a4f88, CA14680d90, CA181dd9fd)MergedCatch-all destination cleared 9/22 10:07 MT (a client who forwards their main line to Clara has no "office number" any more). Permanent fix merged and live 9/22: Clara refuses any transfer destination that is itself forwarded to her line, and a failed transfer falls back to a message instead of dropping the caller. The replacement — ringing real people for "something else" callers — is now fully merged and live, dark: the role, the settings and the wiring that actually rings them (PR #10820). Turning it on for Western Slope is Fede's call. See the new phone-routing section on the onboarding playbook. Next step, merged overnight and dark: the rewrite of how Clara decides who a call goes to — one table per company covering maintenance, emergencies and everything else, behind a single company switch that starts off — is now on the main line of code, along with the test runner that places one real call to every destination a company has, so a routing table is proven before anyone turns it on. Checked 9/23 3:53 AM: the rewrite and the runner are in; the four stacked pieces that fed them were closed because their work shipped inside the rewrite. A dry run of the new routing passed at our two test homes, The Willows and Fairhaven. It is not on production yet; a real trial at the test properties is the next step. Nothing changes for Western Slope until Fede turns it on. Merged tonight: the routing table’s own “everything else” note now matches the corrected rule that a client’s forwarded main line is never a valid place to send a caller (PR #11073).Fede
A returning prospect’s new inquiry on a known guest card never reaches ClaraDoneFound 9/23 morning by Fede. Clara’s first email fires only the first time we see a guest card, never when a known card gets a new interest. Barbara D. inquired three times over five weeks — Krista St on Aug 20, Morningside Ct on Sep 10, and again this morning, Sep 23 at 5:46 AM — and Clara never replied once; a human picked it up every time. 118 of 908 Western Slope cards (13%) carry more than one inquiry, and 90 of those are on a different home. Camellia never hits this because each interest arrives there as its own email. Fix: emit a lead per inquiry, not per card, and re-read the inquiry panel on cards we already know; it ships live as a bug fix. Update 9/23, 12:50 PM. The first attempt went out this morning and replayed every old inquiry on every card (the incident row below), so it was pulled straight back out; the re-land — each new inquiry is its own lead, judged on when it arrived — is open and rebasing now. Update 9/23 late afternoon. The review round fixed the issue found in it and it is armed again at head 054b2c2, now with the midnight-crossing outage case covered. The path itself is proven end to end: Barbara’s new inquiry on 2841 Morningside produced a draft, the draft was approved, and the email reached her at 12:51 PM. Follow-up: a second home opens a second thread with no memory of the first. Update 9/24, early morning. Merged and deployed (PR #11227, main 9716ab4db) after five review rounds. What ships: every new interest on a known card is its own lead, only interests that arrive after we started watching the card count, and a failed read never moves that line. One piece moved out on the last round: when the same person asks about a second home, that interest is recorded on the card but Clara does not reply to it yet, because AppFolio keeps one record per card and the reply would have named the wrong home. It is skipped with a log line, no team notice. The reply for that case is issue #11524. Proven in production 9/24 at 12:03 AM Mountain: the sync running the new code re-read 1,381 inquiry panels across Western Slope and the Willows test property in its first 13 minutes with zero failures and zero replays of old interests (yesterday’s bad version fired 20 within 5 minutes). Log lines are on the PR.Fede
One of Clara’s email replies skipped the review holdDoneFound 9/23. The leasing mailbox sends through a different lane than guest cards, and that lane never read the review switch. Closed out tonight: that lane now honours the review switch too (PR #11192, merged and live). Once so far: on 9/21 at 11:57 AM, Clara’s follow-up to a prospect who wrote “That works, thanks!” about 486 32 1/8 Road went out directly; her first email to the same person an hour earlier was held and approved as normal. Content was correct. Fix: both lanes send through the one Clara email sender so the review switch holds everything; it ships live as a bug fix. Update 9/23, 12:50 PM. The fix is open, in its second round of review, and stays on hold until that round clears. Update 9/23 afternoon. Merged and live (main 7ffde3238). Both lanes now send through the one Clara email sender, so the review switch holds every reply.Fede
A prospect’s budget reply by email was recorded but never answeredVerified in productionFound 9/23. On 9/19 at 4:29 PM a prospect (Ethan L.) replied by email that $2,700 was far over his $2,000 budget. The reply was captured on his conversation and Clara never responded. Same mailbox lane; covered by the direct-email work (home match, and widening the mailbox past tour emails), behind the review hold. Update 9/23, 12:50 PM. Half of it is merged: one shared matcher that decides which home a piece of free text is about. The other half — filing a direct email against the home it names instead of the office record — merged onto the wrong branch this morning and is being re-landed; that re-land is open and its checks are failing. Update 9/23, 2:03 PM. PR #11221 is verified in production: a direct email now files against the home it names, not the office row. Its merge commit is an ancestor of the build currently running, and the org-mailbox suites stayed at 24/24 unchanged. Still dark for prospects until the webhook passes the actual message text through (#11174).Fede
Incident: this morning’s returning-prospect fix replayed old inquiries and flooded the Slack feedDoneFound 9/23 12:16 PM. The change that makes a new interest on a known card its own lead started emitting a lead for every historical inquiry on every card — some from December and January. Clara’s first-email step could not find those inquiries and crashed, once per old inquiry, once a minute, in the Western Slope Slack feed from 12:16 PM. Nothing was sent: the step fails before a draft exists, and the review hold catches every first email anyway. Fix: the change was reverted, and that revert is merged and live in production as of 1:19 PM (verified against the running build). Logging fix #11261 merged. It is being re-landed with a floor so only inquiries that arrive after we started watching the card, and after go-live, count; the re-land merged and deployed 9/24 early morning (main 9716ab4db), with the floor in place and a replay of 62 scrubbed cards proving no old inquiry re-fires. Scope, checked in production: 20 lead events, all Western Slope, no other client touched; emitting ran 12:14–12:19 PM and stopped on its own. The oldest inquiry replayed was from 25 Nov 2025 and the newest was 14 Sep — not one was a lead from today, so no real lead was lost. Three of the 20 got far enough to draft an email to a prospect about a 10, 13 or 14 Sep inquiry; all three were caught by the review hold and none was sent. Two have been rejected. The remaining crashed events stop retrying by themselves and each one only ever alerts once — confirmed, no further alert since 12:23 PM.Fede · 000-32
The card says an email was sent, but not what it saidVerified in productionFound 9/23, 12:51 PM on Barbara’s card at 2841 Morningside, right after her reply was approved and sent. The “Email Sent” record landed on the AppFolio card as it should, but the body of the email did not come with it, so the card shows that Clara wrote to her and not what she wrote. Nothing is lost — the full email is on the PropFlow conversation. Fix: the Record Communication now carries the full email text (PR #11265). Merged 2:42 PM — the merge had been armed but the arm was dropped by the guard, which delayed the merge by about an hour. Update 9/23, 3:12 PM. Verified in production on a Willows test card: the Record Communication now shows “Email Sent” with “Notes: Subject: … <email body>”, where that field used to be blank. Barbara’s existing Western Slope entry stays blank unless Fede asks for a one-off backfill.Fede
Approving a held email from the Slack thread does nothingDoneFound 9/23. Replying “approve” in the Slack thread where a held email is posted never reaches us: our Slack app is not set up to forward thread replies, so the word goes nowhere and the email sits. Merged tonight on top of it: only staff who cover that building can approve or reject a held email, and a rejection can carry a reason in the same reply (PR #11250). Approving inside PropFlow works normally, which is how Barbara’s email went out at 12:51 PM. Fix: turn the Slack event delivery on and add the check that only the right people can approve; opened as PR #11250. Update 9/23 afternoon. Merged and live (main baba8cb0a) — replying “approve” in the Slack thread now reaches us. The bot token is also missing the two permissions it needs to tell who replied (#11259). Waiting on Fede. Until those two permissions are added to the Clara Slack app, every “approve” typed in Slack is dropped on the floor and the email keeps sitting. Nothing on our side can work around it. Also merged tonight around it: the piece that carries Slack messages to us now retries instead of failing when two deploys collide (PR #11557, open). Your callFede
We cannot yet prove Clara’s replies are good enough to stop holding themBug (fix in progress)Found 9/23. The set of past cards we grade her replies against is missing the one thing that matters: 1,073 of its 1,086 rows carry no prospect message at all, so any readiness number scored on it so far was scored against nothing. Backfilling the real messages is running now, and until it finishes no number from that set counts. Separately the grader is getting two new eyes — it now fails a reply that narrates its own process or recites policy nobody asked about — and that change is merged 9/24 early morning (main 4a282dd50); two small honesty items in the batch printout are follow-ups #11478 and #11479. First-email readiness, 2026-09-23 5 PM. Same 205 Western Slope cards, now composed with the prospect’s real inquiry message and graded with the stricter grader. Earlier blind run (old grader, no messages): 124 send-as-is / 47 needs a fix / 34 do not send — 60%. Today’s real run: 93 / 25 / 87 — 45%. Top failure patterns: common-sense misses, about 60 (the home is gone with no alternative offered; a tour time offered on a unit that is not available); reciting listing specs nobody asked for, 29 (11 of 26 on cards with a named home); repetition, 11; process narration, 10 (that fix merged after this compose ran, so it is not reflected here). Source: ~/.claude/guest-card-corpus/runs/2026-09-23/ws-judged-with-messages.jsonl. Verdict: not ready to turn on autonomously on this sample; rerun on the deployed code after tonight’s merges. Update 9/24, 5:24 AM — first fully autonomous send. On the deployed code, with nobody in the loop, Clara wrote and sent a first email to a prospect at our Willows test property and it was delivered in under two minutes. That is the whole loop running unattended for the first time; the readiness number on real Western Slope cards is still the gate for doing it at a customer.Fede
The review hold does not cover every way Clara can reach a prospectBug (fix in progress)Found 9/23 while checking what today’s incident could have sent. The switch that holds Clara’s emails for review is wired into two of about ten places that can email someone outside the company, and into none of the places that send a text — the hold itself is built only for email and has no text-message shape at all. The proactive follow-up email, the one Clara sends on her own when a lead goes quiet, has no hold. There is also a case where the hold is on but the reply cannot be tied to a conversation, and it sends anyway. Nothing has escaped: the two places that are wired are the ones carrying Western Slope prospect email today, and they held all three of today’s drafts. Fix: one place every outbound message passes through, which reads the switch itself, so a new sender cannot skip it by accident; close the sends-anyway case first. Written up as an open issue, and the fix for that sends-anyway case — hold rather than send when the reply cannot be tied to a conversation — is being opened now. Update 9/23, 12:50 PM. A second piece of the same cleanup, one company setting and one module for which replies Clara is allowed to answer (issues #11169/#11224), is merged, carrying the setting and the API (PR #11213) — prod verification pending; the settings-page control to flip it still needs to be built. Update 9/23 afternoon. The fail-open case is fixed in PR #11269 (no conversation to tie a reply to now holds it, and a hold write failure now drops the send with an alert instead of going out); merged and live 9/24, 12:25 AM, and exercised at our Willows test property the same night: a reply Clara could not tie to a conversation was held instead of sent. Remaining: the one shared send seam, the SMS hold shape, the rename, and a build check.000-32
Clara is not assigned on cards with more than one inquiryDoneBarbara’s card had two inquiries (Morningside and an older Krista Street one). The AppFolio robot refused to guess which one to assign, reported that refusal as a success, and our side retried for an hour before giving up. Fixed and merged tonight, in four pieces: the robot is now handed the exact inquiry the lead is about, a refusal it can never verify stops straight away instead of retrying, a write that parked as failed can be pushed through again once the cause is gone, and Clara is put on the card the moment the lead arrives rather than waiting on the email going out. Prod check pending. PRs #11333, #11267, #11341, #10865.010
Why so many tour slots? (Fede)Bug (fix in progress)Issue #11190. The first piece — the time a prospect actually asked for now reaches the calendar — is merged and live tonight (PR #11271). The booking itself was too big to review in one go, so it was cut into two smaller pieces: the calendar step (#11349) is merged and live tonight, ~7:55 PM; the first email booking the tour it promises, at the same door that sends it (#11358) was closed and re-opened as PR #11414, which is still in review as of 9/24, 6:53 AM — review has asked for changes only, no blocker, and it is set to merge itself once it is green; the older duplicate of it was folded in rather than kept. The two older bundled versions were closed in favour of those. On real Western Slope cards, 2 of 2 replied-to cards with an explicit time now get that time booked instead of the usual four generic slots. Separate PR #11289 (two times, one per day, in short form) is in review. Update: PR #11289 merged and verified in production 2:46 PM. A Willows compose now offers “Thursday at 10:00 AM or Friday at 10:00 AM” where the pre-fix composer offered all four slots with full dates.Fede
An over-budget home is still offered after a prospect states their budgetDoneIssue #11189. PR #11277 is merged, live and proven in production at Willows since 9/24, 12:27 AM: the first email now respects the budget written on the card and stops offering homes above it. 4 of 4 real Western Slope cards that stated a budget no longer get an over-budget home offered.Fede
Clara’s composed replies narrate her own process or recite the full listing instead of answeringVerified in production, with a caveatIssues #11187/#11196. PR #11252 (first email says what the home is, never how Clara found it; no process narration) is merged — prod verification pending. Update 9/23, 3:12 PM. The “don’t recite the listing to someone reading the listing” rule (PR #11262, issue #11233) is verified in production — the rule is wired and shortens the reply. Caveat: on a community property with no named home, the model still quoted rent in 3 of 3 Willows samples. Follow-up: #11314. Update 9/23, 5:45 PM. The Western Slope rerun found the rule was never actually in that run — the replay harness composed without the inquiry source, so the “they already read the listing” paragraph rendered for none of the replayed cards. PR #11344 wires it and adds a structural check that refuses a draft which recites the spec anyway. Compose-only replay of the 45 listing-site named-home cards: 31 replies recited the spec before, 0 after, the 14 already-clean ones unchanged, 3 refused rather than sent. Update 9/23, 8 PM. PR #11344 merged and live tonight. Proof, 45 Western Slope cards: 31 recited the listing before, 0 after; the 14 already-clean ones unchanged. The guard is scoped to scattered-site homes; community properties are untouched.Fede
The first email says a home is taken, then offers tour times for itDoneFound 9/23 in the Western Slope replay. Issue #11335. Six replies across five past cards told the prospect the home was no longer available and then offered tour times to come see that same home. Fixed, merged and live tonight (PR #11340): the tour offer is now only ever for a home we know is open, a property with nothing available reads as a taken home whatever its type says, and when the home is gone she names two real open homes instead of a generic sign-off. Replayed on the same six cards: six of six offered a tour of the taken home before, none after. The earlier standalone version of the gone-home wording was closed because this one carries it. Prod check pending.Fede
Auto-merge guard disarmed green PRs on a GitHub rate limitDoneIssue #11281. 12 green PRs were sitting unarmed after the guard disarmed them on a GitHub rate limit; owners have re-armed all 12. PR #11291, built with control tests, is merged: the guard no longer disarms a green PR on a rate limit or a 5xx error, it leaves it armed. Red main 2026-09-23 ~3:45–5 PM, fixed by the inventory pin PR, merged.Fede
Clara’s first email errored on a real Zillow lead (card 2953)DoneFound 9/23. A real Zillow lead came in and Clara’s first email never got written: the lock we take so two copies of Clara cannot answer the same lead at once was never released, so every later attempt thought someone else was already on it and errored out. The lock now expires on its own, and it is merged and live tonight (PR #11343) after a review round. Update 9/23 7:00 PM: the lease fix behind this is merged and deploying; a redrive follows once it’s out. A narrow double-send window found in the same path is filed separately as #11370. Update 9/23 7:08 PM: fix deployed 7:06 PM; the hold created 6:57 PM was awaiting Fede’s approval, then the event was redriven at 7:08 PM and drained clean.Fede
Team got a plain-text “home not identified” email after a Spanish-language call (5:49 PM)Bug, fixing nowFound 9/23 evening. The call captured the town name as the home, nothing matched, and the code emailed the leasing inbox a raw dump with a manual follow-up ask. Fede’s rule: an unidentified-property lead is recorded silently, never a team email. Merged and live tonight (PR #11361): a lead we cannot place is recorded on the conversation and nothing is emailed to the team. Correction: the lead itself is NOT dropped — the person, inquiry and conversation are saved, and the follow-up cadence is running (next touch Saturday). Only the AppFolio card is missing, and that needs two fixes: capture stored the town instead of the home (PR #11393, merged and live 9/24 12:38 AM), and the listing address (585 Redcliff Cir) differs from the property record’s address (565 Redcliff Cir), so a listing-to-unit match is a second PR (#11426, merged and live 9/24 12:38 AM). Both are deployed; the end-to-end proof on a bench line is still outstanding.Fede
Same call: no AppFolio guest card created although Clara quoted an exact home (Northridge Apartments, Ridgway, unit at $1,750)Bug, fixing nowFound 9/23 evening. Capture kept the town name and dropped the address, so the exact home Clara quoted never made it to a guest card. Fixed and live: the call’s own transcript is now read as a last resort when the caller’s opening word does not name a home (PR #11393), and a listing whose street number differs from its building’s is matched to its unit (PR #11426). Both merged and deployed 9/24 12:38 AM. This caller’s own card has NOT been backfilled — that is a separate go from Fede. Landed alongside it tonight: when AppFolio leaves the card’s lead fields blank, we now fill them from what the person actually told Clara (PR #11368). Correction: the caller’s number IS on the record — only the card is missing.Fede
Where a lead came from was blank on the guest cardDoneFound 9/23 evening. The card page did not show the lead source at all, and leads arriving from Rent.com came through with no source recorded. The card page now shows it (PR #11355, merged and live tonight); mapping Rent.com to a real source is also merged and live, 9/23 8:03 PM (PR #11360).Fede
Guest-card lead details came through blank or in a jumbled orderDoneFound 9/23 evening. When AppFolio leaves the lead fields empty, we now fill them from what the person told Clara — merged and live tonight (PR #11368). Putting those fields in the order a leasing agent reads them — status, unit type, move in, budget, roommate, pets, preferences — is also merged and live, 9/23 8:01 PM (PR #11357).Fede
Clara’s first email greeted the prospect twiceDoneFound 9/23 evening. A five-month-old template line adds a greeting whenever the model’s own greeting isn’t on the first line — not caused by tonight’s merges. Fix is PR #11371, merged and live 9/23 7:09 PM. Re-rendered 13 real drafts: 1 defective before the fix, 0 after.Fede
Clara read the prospect’s own pet answer as the property’s pet policyBug, fixing nowFound 9/23 evening (Brody, Ember Estates: the prospect’s own “no pets” answer got echoed back as the building’s rule). Cause: the card’s pet answer reached the drafting model as unlabeled prose sitting beside the real policy lines, so the body guard could not tell them apart. Fix, PR #11385: that answer is now labeled as the renter’s household, pet policy comes only from the knowledge block, and a new blocking check refuses any pet claim the record does not back (red/green plus a mutation control captured in the PR). Update 9/24, 12:54 AM: that PR was closed — its blocking check shipped inside PR #11399 (merged 9/24, 12:15 AM), and a second guard merged 9/24, 12:34 AM refuses any pet claim the property record does not support (PR #11525), now proven in production at Willows — a draft claiming pets were welcome where the record says otherwise was refused. The remaining half — labelling the card’s pet answer as the renter’s own words rather than house policy — is merged and live as of 9/24, 5:01 AM (PR #11468), and proven in production at Willows on the same build: the renter’s own “no pets” answer now reads as theirs, and the building’s rule comes only from the property record.Fede
Review redraft rewrites the hold’s email but not the first-email intent row, so what ships is not what the record saysBugFiled 9/23 as issue #11387. Covered by the review-loop fix if it touches that seam; otherwise next.Fede
Marissa’s Zillow lead never got a first-email draftBug, fixing nowFound in the 9/23 8 PM lead audit. Marissa, Zillow, Pomona Park Townhomes, 9/21 9 AM: the lead signal was delivered but a draft was never prepared because the card’s creator check never returned. Held draft being created tonight for Fede’s approval. Related issue #11379. Kat has been texting Marissa by hand since Sunday to cover the gap; the held draft is still waiting on Fede’s call.Fede
First email pulled “2.5 bath” from the listing description instead of the real bath countFixedFound 9/23 evening (Alexis, 2841 Morningside Ct). The first email took “2.5 bath” from the listing’s description prose, but the listing’s structured field, the unit record, and the card all say 2. Issue #11397, fix PR #11409. Update 9/24, 4:46 AM: merged and live, and proven in production at our Willows test property on the deployed build — a draft that took its bath count from marketing prose was corrected to the listing’s real figure. The description paragraph is now labeled non-authoritative for counts; a draft whose bed/bath/sqft figure disagrees with the listing’s structured fields is parked instead of sent. Proof: red/green plus two mutation controls in the PR. Rule going forward: prospect-facing home facts come from the listing, and structured fields win over prose.Fede
The held-email review loop drops work in three placesDoneFound 9/23 evening while working the hold queue. Independent review found both Monday holds WERE posted to the Western Slope Slack channel and reminded twice — nobody acted, so the reminder-ladder idea is dropped. All three are now closed out. (a) A defective draft never becomes a hold: a first email naming a tour time that has already passed, or a policy claim the record does not back, is refused instead of held (PR #11399, merged 12:15 AM), and a draft that fails its own checks can no longer slide into a hold unnoticed (PR #11410, merged 12:29 AM). Both were exercised at Willows the same night, though only the dead-tour-time half has a live proof so far. (b) Approving a hold that has gone stale now recomposes the email against current facts instead of sending a tour time that already passed (PR #11417, merged 12:45 AM and proven in production at our Willows test property: a hold left to go stale was recomposed on approval instead of going out with a tour time that had already passed). (c) the Slack “approved” reply intake missed one approval today at 5:15 PM. Fixed: PR #11400 merged 8:55 PM 9/23 — an approve reply Clara cannot act on is never silent; it answers in the thread with why. Update 9/23 night: tonight’s replaced drafts — Elaine, Ben and Brody — were approved by Fede and sent at 7:37 PM. Alexis’s is still pending, with one wrong figure (2.5 bath instead of 2; the four-home card, issue #11380). The review tab never listed held emails at all; that is merged, live and proven in production since 9/24, 12:49 AM (PR #11412) — held emails now show up there for a reviewer to act on: a sixth feed at the top of /review, “Emails waiting on you (N)”, one row per held email with the prospect’s first name, their home, the subject, a preview, and Approve/Reject through the existing hold action, plus a link to the full email; scoped to the signed-in user’s org and properties.Fede
Lead event can park with no first-email intent written (claim lost mid-flight)BugFiled 9/23 as issue #11379. Elaine’s Zillow lead (card 2953) parked after 5 attempts with no first-email intent row ever created; lease fix #11343 narrows it, residual window is #11370.Fede
One guest card naming four homes mints one inquiry; drafts bleed details across propertiesBugFiled 9/23 as issue #11380. Alexis’s card 2954 named four homes; only one inquiry record was created and recomposed drafts mixed facts across properties.Fede
Application feed creates a second prospect record for an existing personBugFiled 9/23 as issue #11381. Becka’s 9/23 application feed minted a second person id for a prospect who already had a full conversation and a booked tour.Fede
Assign covers one inquiry per card; a card with several active inquiries leaves the later ones unassignedBug, fixing nowFound 9/23 in the AppFolio QA pass. Assignment to Clara runs once per card, so a card carrying more than one active inquiry only gets the first one assigned; later inquiries on the same card go unassigned. Seen on Alexis’s card (4 inquiries) and Brody’s card (2 inquiries). Issue #11402. Fixed and live: PR #11433 merged 9/23 and running in production. Clara now claims every active inquiry on the card that nobody owns yet, leaves one she already holds alone, never takes an inquiry a person already owns, only claims homes the customer has switched on for guest-card writes, and gives a home the prospect asks about later its own claim. The four-inquiry shape is covered by tests built from Alexis’s real card, each with a planted-fault control. Re-proven live on the merged build: on the Willows test property, card 133 went from nobody assigned to Clara through the normal queue and the browser robot, confirmed by reading the card back out of AppFolio, and a second run over the same card changed nothing. Landed on top of it 9/24, 12:38 AM: the step that decides which inquiry to claim now judges the row for the home the lead actually names, instead of whichever row it happened to read first (PR #11475). Worth knowing for anyone reading this row: a two-home card cannot be built on the Willows at all, because AppFolio only ever gives one inquiry per property and the Willows is a single property. We checked 74 real Western Slope cards read straight out of AppFolio: 73 carry more than one inquiry and not one carries two on the same property. So the multi-home behaviour is pinned by tests built from Alexis’s real four-home card, and the live run proves every piece those tests stand on.Fede
First email too thin after the recital guard: bare tour ask, no rent/beds/availabilityBugFound in the 9/23 7 PM readiness rerun. The fix that stopped Clara reciting listing specs nobody asked for went further than intended: 44 of 205 cards now get a first email that is just a tour ask with no home facts behind it at all. Issue #11405, logged, not started.Fede
Every Western Slope inquiry comes in with no home named, so the first email reads like a catalogueBug, fixing nowFound 9/24. All 14 Western Slope inquiry rows we checked carry an empty home field, so the first email falls back to listing the whole portfolio instead of answering about the one home the prospect asked about — and every rule we wrote to keep her on one home goes quiet, because there is no home for them to act on. Issue #11507, logged.Fede
Clara signed a first email with the prospect’s own nameBug, fixing nowFound 9/24 at Yale 25 Station: the sign-off carried the prospect’s name instead of Clara’s, so the email reads as if the renter wrote it to herself. Issue #11538, logged.Fede
On a phone call Clara asks a banned budget question and promises someone will meet the caller at the homeBug, fixing nowFound 9/24 on scattered-home calls. Two things she should never say: she asks the caller their budget, which we banned, and she tells them “a leasing agent will meet you at the home” — at Western Slope nobody does, the homes are lockbox tours. Issue #11535, logged.Fede
When the same person asks about a second home, Clara records it but does not replyBugThe piece that came out of the per-inquiry lead work on its last review round. A second inquiry from someone we already know is saved on the card, but Clara stays quiet, because AppFolio keeps one record per card and replying there would have named the wrong home. Silent by design for now, with a log line and no team notice. The reply is the next piece of work: issue #11524.Fede
The review tab does not show which held emails need a closer lookBugFound 9/24 right after the review tab shipped. A held draft can be flagged as needing attention, but the list rows do not show that flag, so a reviewer cannot tell the risky ones from the routine ones without opening each. Issue #11565, logged.Fede
A new prospect’s card was folded onto a stranger’s record because the two share an email addressBug, fixing nowFound 9/24, 5 AM, by the autonomous rehearsal at our Willows test property. A brand-new guest card whose only contact detail is an email already claimed by a different person was written onto that person’s record, and the lead behind it then parked in the delivery queue with nobody told. Three fixes are in review: a new card never lands on a row another live card owns (PR #11664), a lead whose identity clash is final pages the team instead of parking quietly (PR #11661), and any lead that parks in the delivery queue pages the team once per company per reason (PR #11660). The writer half is issue #11662.Fede
17 Western Slope leads have been sitting in the delivery queue since Tuesday evening with nobody toldBug, fixing now Your callFound 9/24 while working the queue above. All 17 are back-dated inquiries from November 2025 through July 2026 that a backfill re-read, not live prospects, and they parked silently since 9/23 around 6 PM. The paging fix above means a future one is never silent. Question for Fede, already posted: leave these 17 where they are (our recommendation, since replying to a year-old inquiry would be worse than saying nothing) or release them.Fede
Kat shown as “Barry”DoneUpdated 2026-09-29. Fixed by data repair W11–W15 plus #13534 (armed): a prospect's main-line call and home texts are one conversation.Fede
Kat Barker in the Prospects listBug (fix in progress)Updated 2026-09-29. Root cause fixed in #13330 (armed): staff messages never create prospect activity. The two cards are AppFolio's own, staff test guest cards.Fede
Jackie Berry call fragmentBug (fix in progress)Updated 2026-09-29. #13534 armed (call and texts become one conversation); summary text repaired (W16).Fede
Three-reminder nag to staffDoneUpdated 2026-09-29. #13226 merged: staff get exactly one escalation reminder, not three.Fede
Clara asked “English or Spanish?”DoneUpdated 2026-09-29. #13187 merged: Clara never asks; she replies in the language used and a switch sticks.Fede

New build: later

ComplaintStageWhat's leftOwner
A person asking about a second home starts a second conversation, with no memory of the first Known issue, handed offNew build: laterFound 9/23 on Barbara D.’s card at Western Slope: one person, two inquiries five weeks apart (Krista St on Aug 20, Morningside Ct on Sep 10). Today a conversation is filed under a single home, so her second home would open a second thread — Clara re-introduces herself and re-asks what she already answered. 118 of 908 Western Slope cards carry more than one inquiry and 90 of those name a different home, so this is normal for a scattered-site client, not an edge case. Fede’s direction 9/23: one person lives at the company level, that person can have many homes, properties and inquiries, and the conversation belongs to the person — the home becomes a tag on the message rather than a separate thread. Gera reached the same conclusion on the 9/21 founders’ call and his portfolio architecture design already spells it out and prices it. Handed to Gera’s lane on 9/23; nothing is being built for it here. The full design is written down on the known-issue record. The related bug — a new inquiry on a known card never reaching Clara at all — is being fixed now, in the row aboveGera (handed off 9/23)
Emails and calls missing from guest cardsNew build: laterReliability fixes merged. Open question: still deciding whether to change how unmatched-building leads are handled, or leave as isFede
Guest card not created when the property is unknownNew build: laterSettled 9/21 (Fede): a call or text with no identified home stays in PropFlow only for now. No AppFolio card. Revisit only if the client asksGera
Also raised on the 9/21 call — Staff overseas cannot sign in (text-message codes are US-only)New build: laterNeeds an email-code or authenticator-app optionGera (on his plate)
Redcliff has no property record in PropFlowNew build: later Your callFound tonight. Its lockbox-tour answer can only live on the company record, so a Redcliff caller does not get it as a building fact. Needs onboarding (create the property from the AppFolio pull), not a knowledge edit. Do we add Redcliff now?Fede
A current resident who calls in sometimes gets treated as a new prospect, with her own guest cardDoneMerged and live 9/22 3:50 PM. A caller who is already a resident anywhere in the portfolio no longer gets a new inquiry or guest card; a resident who moved out is treated as a returning prospect again. Was: a caller who is already a resident anywhere in the portfolio no longer gets a new inquiry or guest card; her call is still saved as beforeFede
Also raised on the 9/21 call — Clara's tours should appear in AppFolio as showingsDoneWorking, and on for Western Slope. Merged tonight: a confirmed tour now carries the home its inquiry named, so the showing lands on the right card instead of the card’s first home (PR #11330). The live test at our Willows property found and fixed five real gaps before any customer saw them: the app was sending the wrong field names; it needed AppFolio's internal unit token, which we do not store; it was not reading the guest card's own AppFolio id; the robot crashed outright on the final step; and cancelling a showing quietly failed because AppFolio's scheduling screens need a version header on every request. The full round trip now passes at Willows end to end — book a tour, move it, cancel it, and each step is read back out of AppFolio to confirm it really landed, not just that the request was accepted. Proven on a real Western Slope lead the same day: Becka Rea's confirmed tour went onto her guest card as a showing at 486 32 1/8 Road unit 4, 4:00 PM on 9/22, recorded by Clara — the exact day and time of her tour, with no email or text sent to her. Turned on for Western Slope on 9/22 on Fede's approval. It only acts when a tour is booked, moved or cancelled from here on; it does not go back over old tours. Two smaller things are written down and not yet fixed: our test tool sometimes cannot confirm a second note quickly enough, and a cancel that somehow reaches AppFolio before its own booking gives up instead of waiting. One more caught and fixed on 9/22: the note on each showing was printing an internal tracking code instead of words, so it now reads like a person wrote it — “Booked by Clara on Mon, Sep 21.” — and the showing already on Becka’s card was corrected the same day. One more found on 9/23 (PR #11330, issue #11325): fix open, waiting on checks. When a tour was confirmed by email or text rather than booked on a call, the tour was saved with no apartment on it, so the showing request went to AppFolio without a unit and AppFolio refused it — Barbara Demorest’s 9/25 tour on card 2782 never appeared as a showing. The fix takes the apartment from the lead’s own record, which has known it since the first email, and the showing step reads it from there as a second safety net. Her showing was parked 12 minutes before that fix went live, so it is sitting waiting rather than lost; running it again is Your call.Fede

What we should not build (our opinion)

The short version

Item by item: our verdict

Jason's own numbering, including both items he numbered 7 (a routing item, and a separate Enhancement Request).

ItemOur verdictOne-line why
1. Guest Card Integration FailuresOpen question, Fede decidingSeven leads on the shared line in five days have no guest card. Five were phone calls, one a text, one an email. Of the calls: two named a home and Clara matched it to a real address, one caller refused to talk to a bot, one was our own line test, one could not be found. The text was handed to the team after Clara could not pin one building. The email is unverified. Likely reason the two matched calls have no card: writing guest cards from phone calls is a company setting that is still off at Western Slope (unverified). Clara does ask which home and does match it, on calls and on texts.
2. Live Agent Transfer / Call DisconnectsFixed todayRoot cause (staff phone system answering too fast for our old prompt) fixed and live 4:14 PM MT; Jason's tests predate it.
3. Leasing Notification & CC WorkflowWorking as agreed; content is the real gapKat and Beverly already receive every team email through the shared leasing inbox they agreed to; the actual problem is email content quality, covered by items 4 and 5.
4. Missing Property IdentificationOpen bugTwo of our team-email templates have no field for the property name at all, even when we know it.
5. Conversation Synopsis QualityDecided againstA generated summary in team emails is speculation, per Fede 9/21; the body carries the person's own message, plus any promise Clara made or specific question they asked.
6. AppFolio Transfer FailuresOpen question, Fede decidingSame root cause as item 1: a card write is refused on purpose when the property is unknown; whether that's the right call is still open.
7. Call Routing Reliability (Priority 3)MergedThe transfer-loop fix above covers most of this, merged and live 9/22; having "something else" calls ring real people instead of the main office line is merged and live, dark (PR #10820). Turning it on for Western Slope is Fede's call.
7. Clara Lead Handoff Improvements (Enhancement Request)New ask, property onlyAutomatic property identification is real work, not yet built, and overlaps item 4; a richer summary is decided against, 9/21.

Already fixed

Transfers to staff (item 2)

Before: their phone system (RingCentral) answers a transfer in 1-2s with its own hold message; our old prompt waited 5s, heard nothing, dropped the call.

After: plain forward is the default — ring Kat 20s, then Beverly, whoever answers connects, no prompt. Nobody answers, Clara takes the full message.

Proof: live 4:14 PM MT today. Fede called at 4:34 PM MT; Kat answered in ~15s; 55s two-way call, recorded.

Caller name and stray words

Before: a caller's own number could stand in for their name; some missed-call emails carried junk fragments like "The." in the subject or body.

After: a phone number is never used as a name. The junk-fragment filter is approved and merging on its own, not merged yet.

Proof: phone-number-as-name fix merged today; junk-fragment filter still in flight.

Wrong time on missed-call emails

Before: the time shown could be an hour off.

After: uses the property's own timezone.

Proof: merged today.

Silent AppFolio write failures

Before: a note that failed then succeeded on retry could keep showing the old error; a write that gave up entirely told nobody.

After: a retry-success clears the stale error; a give-up now notifies the team and logs it, for every kind of write.

Proof: both merged today.

How we are testing this

We run these fixes against The Willows, our own test property, before touching a real customer's cards. Tonight's harness (#10694) proves the basic actions still work end to end there — a card gets created, gets assigned to Clara, gets a note, and a retry behaves — on live AppFolio, not a mock. One known gap it surfaced: there's no way today to mark a card "not interested" and close it out; that path doesn't exist yet.

Open, and what we found

1 & 6 — guest cards silently skipped when the property is unknown

When a lead comes in on the shared front-door line and nobody names a specific building, we don't create a guest card, don't write a note, and tell nobody. The refusal happens before anything is even queued to retry, so there's no stuck row and no alert ever fires.

Seven leads on the shared line in five days have no guest card. Five were phone calls, one a text, one an email. Of the calls: two named a home and Clara matched it to a real address, one caller refused to talk to a bot, one was our own line test, one could not be found. The text was handed to the team after Clara could not pin one building. The email is unverified. Likely reason the two matched calls have no card: writing guest cards from phone calls is a company setting that is still off at Western Slope (unverified). Clara does ask which home and does match it, on calls and on texts.

Separately, two notes are genuinely stuck — not a missing property, but AppFolio reported the write as successful while the note never appeared on the card. Same guest card, 6 and 7 attempts, both from 09-17/09-18 conversations. We found this pair ourselves on Sept 20; it has not been re-sent. Today's fixes (stale-error clear, give-up notification) don't automatically re-drive an already-stuck row; a manual re-send is still needed.

Found 9/22 — the caller named the home, and still no card (Ember Estates, 9/21 1:48 PM MT)

Investigated 2026-09-22 from the production records; fix merged and live.

This is not the "property unknown" case above. On the shared line the caller said "Ember Estates", Clara quoted 367 Ember Lane, 372 Ember Lane and 2863 Florida Street with rent and the six-weeks-free special, and the caller asked to see 367 Ember Lane. Then they asked for a live agent, the transfer went unanswered, and the call ended before a tour time was picked. In PropFlow the lead sits under the company-level "Western Slope Property Management" record, and no AppFolio guest card was created.

What we verified. The switch that writes guest cards from phone calls is ON at Western Slope (armed 9/18). The card was skipped because the writer only trusts four sources for which home the caller meant: the booked tour, the lead's property, the conversation's property, and the address the caller asked to tour. The first three were the company-level placeholder, which has no AppFolio connection. The fourth is saved only when a tour booking completes, and this caller left before picking a time. So the writer logged "no property with a PMS connection" and stopped; no retry row, no alert.

Why the home never reached the record. Clara made no lookup on this call. She answered from the portfolio listing text in her prompt, so nothing in the system ever held a matched home. Separately, a conversation on the shared line is tied to the company placeholder at birth and, by design, is never re-pointed to another property (that guard exists because a weak caller match once moved a live thread to the wrong building). "Ember Estates" is also not one property in AppFolio: it is seven single homes on Ember Lane and Florida Street plus an office record.

Fix, shipping live as a bug fix. (1) Save the home on the lead the moment it is resolved on a call — when Clara looks it up, marks it as the interested home, or the caller asks to see it — not only when a booking completes. That alone produces this card at 367 Ember Lane. (2) Clara must look the home up before quoting rent or specials when a community or address is named. Proof: this call replayed red on the old code and green on the new, plus a replay over shared-line calls since go-live listing which would now get a card.

What the product supports for more than one home. One lead holds one home of interest. A second home named later is ignored on email leads and silently overwrites the first on calls. A tour can visit two homes in one trip, capped at two (Fede, 9/12). AppFolio models this better: one guest card per person with one inquiry row per property; we can read that back but only ever create one card with one property. Decision 4 below.

Update, Sep 22 afternoon. The named-home capture we shipped this morning only runs for a first-time caller. It sits inside the step that creates a new lead from the transcript, and that step is skipped when the caller already has a lead. The Ember Estates caller was on their third call that afternoon, so it would not have caught this case either. A follow-up fix runs the capture for every leasing call on the shared line whose lead has no home yet, new or returning caller. Proof is a real robocall to the test bench with a returning caller naming a home, then the guest card showing that home.

Update, Sep 22 evening. All four fixes are merged (first-time caller, stale address, list of homes discussed, returning caller). Two real robocalls to the test bench then found one more gap: when a lead already carries an old raw home label from an earlier path, the returning-caller step treated it as settled and skipped, so the home the caller named was not recorded and no guest card was queued. This is the shape Western Slope leads are in. That fix is merged and live as of 9/22 evening: the step skips only when the stored home really maps to an onboarded AppFolio property, and always adds the newly named home to the lead's list. Proof stays the same: a real call from a returning caller naming a home, then the guest card showing it.

Proven, Sep 22 night. Live test call on the bench, same shape as the Ember Estates call: a returning caller with no home on their lead named 146 Quillwood Lane. After the call the home was on the lead, and a guest card and a note were written to the AppFolio test property, filed under the right home (card 128). One follow-up is still merging: when a caller who already has a home on file names a second one, that second home is added to the lead's list; a separate card entry for the second home is the multi-home extension, not yet built.

We looked at every card at Western Slope tonight

Before tonight's fix, all 44 of the notes we checked read as full paragraphs, not a short outcome sentence — that's the bug #10668 fixed. None of the 3 real outcomes we found (hand-off, application sent, failed transfer) had a note written for it before tonight; that's the gap #10682 closes. Assigning a card to Clara never took it away from a person who already owned it — that part was already working, 16 for 16 checked. One call logged as a Western Slope lead turned out to be their own staff member calling in — that's a new open bug. And there's still no way to mark a card "not interested" and close it — a known gap, same one the Willows harness surfaced above.

3 & 4 & 5 — one shared inbox, no property name, no summary (decided against)

Every team-facing email for 69 of Western Slope's 70 buildings resolves to one shared address, leasing@westernslopepm.com — the recipient Western Slope agreed to, and the inbox Kat and Beverly both read. So they do get every team email; the gap is quality, not delivery.

Two of the five email templates that fire for Western Slope have no field for a property name at all — the missed-call note and the autonomous team note. Even on calls where we know the building, these emails can't say so. One concrete example: a manually escalated conversation on 09-19 produced a tour-confirmation email but no escalation-shaped team email.

A generated summary is decided against, 9/21 (speculation). The remaining gap is the property name; a promise Clara made or the prospect's specific question goes in the body instead of a summary.

We graded every real team email since go-live

We checked all 17 real team emails sent since go-live. 15 of the 17 didn't name a property — that's the fix landing tonight above. 9 of the 17 had garbled or cut-off text — that's the fragment filter, already merged and live tonight. 6 conversations should have paged the team and didn't: 4 came from the transfer bug we fixed this afternoon, 1 was a hand-escalation from the dashboard that sends no page at all, and 1 was a building with no notification set up. Those last two are still open bugs.

Resolved — we already write to Western Slope's AppFolio

We DO write there today: Clara's notes and assignments land on Western Slope guest cards. Proof: her tour note on a Western Slope guest card landed on Sept 21, on the second attempt. The earlier "read-only" statement was stale.

Duplicate guest cards: how we get out of this In progress

Update 10/9, 4:30 PM.

Update 10/9, 7:50 PM.

Update 10/10, 12:05 AM.

Rewritten 10/8, 11:30 PM MT after a read-only pass over our records, the follow-up schedules and every card involved. Nothing below has been done yet; the one thing that is time-sensitive is marked.

Update 10/8, 11:59 PM: the stop-the-bleeding fix (a relay-only lead whose exact name already has an open inquiry at this company within 7 days is added to that card as a new inquiry instead of making a new card) is PR #18085, no switch, merged 10/8 8:16 PM; live in production since 10/8 8:20 PM. Proven 9:00 PM at our test properties: two relay-only leads with one invented name at two properties became one person and one card; a different name got its own card. Found in the same run: the second lead’s first email was drafted on the first lead’s thread, to the first relay address, and left a stray inquiry. Fix in progress (no switch). It prevents new duplicates; it does not clean up the existing ones below.

The mess, in three layers

LayerWhat is duplicatedCan we fix it with what we have?
Kat got “tour cancelled” texts at 12:36 AM and 5:53 AMBug (fix in progress)Reported by Kat 11/3. Clara’s texts to staff never checked the clock: the 8 AM–9 PM quiet-hours rule covered residents and prospects only, so tour booked / cancelled / moved alerts went out the moment a prospect acted (six outside the window in three weeks: 9:45 PM, 9:57 PM, 5:52 AM, and the three on 11/3). Fede’s decision 11/3: every Clara-initiated staff text waits until 8 AM property-local; only emergencies and the on-call ladder go at any hour; self-guided arrival/leave texts wait too (supersedes the 10/6 any-hour ruling for them). Clara’s direct reply to a text a teammate sent her stays immediate (that is a reply, not a notice; Gera’s 10/30 ruling). Ships as a fix, no switch. Built and replayed on branch (11 of Kat’s 89 texts would have waited until 8 AM; the other 78 unchanged); blocked by the repo’s hold-registry check (new hold must run log-only for a week). Fede to say “now” (rule the entry in, one PR) or “week” (log-only first); no PR until then.Fede (session 010)
Clara cancelled the wrong tour from Amy Reid’s emailBug (fix in progress)Found 11/3. Amy emailed at 12:36 AM to cancel Morningside and Pomona and keep Ember Estates; the email handler tagged it as a cancellation and cancelled the tour attached to the email thread’s own home (Ember, the one she wanted) instead of the tours she named. Her 5:52 AM correction then cancelled the right two. Fix #24953 (merged 11/3, main 37db129fd): when the person has more than one open tour the email step cancels nothing and hands Clara the list; she cancels only the tours the message names, or asks. Replay over all three customers: only Amy’s case changes. Willows email run in progress (two tours booked, cancel one by name). Amy’s Thursday recovery handed to session 003 (Fede: do not act).Fede (session 010)
AppFolio7 extra cards for 5 renters. Cards can never be merged or deleted; AppFolio’s own workaround is “mark the duplicate Inactive and note a link to the original”, which is also what Jay asked for (“select Duplicate as the reason”).Mostly. We can mark a card Inactive with a note and add a missing home to the kept card. We cannot set AppFolio’s Reason box yet.
Our recordsEach relay lead made its own person record (Michael has three), each with its own inquiry and its own conversation thread.Mostly. The merge tool moves inquiries, conversations and the relay addresses under one person. It picks the oldest record as the survivor, which for Michael, Tessa and Thomas is the contact-less relay one; the survivor has to be chosen by hand. Two old threads stay two threads; nothing combines them, and nothing needs to: going forward there is one thread per person.
Follow-up schedulesOne schedule per inquiry, so one per duplicate: 6 extra running now.Half. A first-contact schedule can be stopped from code. A “renter went quiet” nudge has no stop command; it was stopped by hand once (Tessa, 10/7).

Per renter: what we keep, what we retire

RenterKeepRetire (Inactive, note “Duplicate of …”)Add to the kept cardSchedules to stop (Friday)
Michael3000 (the only card with his phone and email; Jay’s pick)2975, 29772980 Emerald, 2978 Emerald2 of 3 (1:02 PM, 6:20 PM); keep the one on 3000
Tessa1823 (oldest, staff-made, has her contact and application)2976; 2985 (Kat already marked it Inactive / Duplicate on 10/6)nothing missing1 running; should stop itself because she applied, verify
Bowmuxlow2979 (holds the 10/7 no-show)3001172 (2980 Emerald)1 of 2; keep the one on 2979
Sara2951 (has her phone and email)2989 (holds the 10/7 tour; the tour moves with her record)163 (2841 Morningside)1 (the quiet-renter nudge); the tour follow-up is real and stays
Thomas2997 (phone, tour, application sent)2991nothing missing (same home)1 (it would nudge a renter who already toured and has the application)

Update 10/9, 3:05 AM: (1) Merge and Archive is not available at Western Slope or JP&Co (AppFolio’s Leasing CRM add-on is not on). The seven extra cards would be retired with Mark Inactive plus a note naming the surviving card; that write waits for Fede’s yes. (2) The second-home reply defect (reply drafted on the first lead’s thread) is fixed in PR #18112, merged 10/9 4:35 AM and shipped urgent. (3) Jay’s 10/8 5:11 PM call to the leasing line was handled as a renter call: the phone line has no staff path (text and video do). Scoping handed to the vision session; cleanup of his prospect records waits for Fede’s yes.

Open item: Phone line treats staff as renters (Jay, 10/8).

The order of operations

  1. Stop the 6 duplicate schedules (needs your go, before Friday noon). One command per first-contact schedule; the quiet-renter nudges are stopped by hand the way Tessa’s was.
  2. Stop making new ones. The relay-lead fix is merging tonight (email path). The phone path gets the same rule in a follow-up.
  3. Our records: merge each renter’s extra records into the one that holds the kept card, survivor named explicitly. Small change to the merge tool: a “keep this one” option instead of oldest-wins.
  4. AppFolio, in this order per renter: add the missing homes to the kept card; re-point every inquiry of ours at the kept card; then mark the retired cards Inactive with the note. Order matters because a note aimed at a retired card flips it back to Active.
  5. Verify by reading back: each kept card lists every home and is Active, each retired card is Inactive, each renter has one schedule left, and Clara’s next touch goes to one address. Also settle whether Michael has a fourth card for 374 Ember (Jay mentioned it; our copy and the live card disagree).

Decisions for Fede

  1. Stop the six duplicate follow-ups tonight? (a) yes, before Friday’s sends recommended; (b) let them run and clean up after.
  2. How to retire the 7 extra cards: (a) teach the robot AppFolio’s own Merge Guest Cards action, prove it on Willows, run it on the 7 pairs; history moves to the kept card, the duplicate’s follow-ups stop, and every future duplicate (phone path, staff-made) gets the same treatment recommended; (b) mark Inactive with a “Duplicate of” note today using the write we already have, and teach the robot the Reason box (Clara needs reasons for every future Inactive anyway); (c) staff merge these 7 in the AppFolio UI (two minutes each) while we build (a). Note for (a): the archived card’s logged emails are lost; on Clara’s relay cards those are her own first emails, which also live in our records.
  3. Survivor rule in our records: (a) the person on the kept card recommended; (b) oldest record, as the tool does today.
  4. Tessa’s card 2976 carries a completed application and staff texts: (a) retire it anyway with a note on 1823 pointing at the application recommended; (b) keep both.
  5. Two old threads per renter: (a) keep both under the one person, no combining tool recommended; (b) build a thread combiner (not worth it: one thread per person is already the rule going forward).

Still true from the first draft: the client never does this cleanup themselves, Bev’s process is not needed, and no screen asks anyone to confirm a merge. Everything here runs as scripts against named cards, read back afterwards.

Live vs. after the call: where side effects should happen

Proposed — pending review. Written 2026-09-22 from a read of the voice pipeline. Fede's rule: keep the call lean; every side effect that is not urgent (write the lead, notify the team, update AppFolio) happens after hang-up, where it can be retried and costs the caller nothing.

What runs live today

The live leasing agent is already lean. It has one tool that writes anything: booking the tour, which checks the real calendar and claims the slot (about 7 seconds, masked by Clara talking through it). Everything else it can call is a read the caller is waiting on (what is available, rent for a term, amenities, neighborhood, is this walk-in expected), the transfer to a person, an opt-out acknowledgement, and "I am calling for someone else." The bookkeeping tools (save prospect, update prospect, check availability, day tour times, search properties) were taken off the live agent earlier this month; that is what took a booking call from six tool calls and 32 seconds to one call and 7 seconds. No live tool writes to AppFolio; every AppFolio write already goes through the after-call queue.

Live toolCaller waits on it?Verdict
Availability, term pricing, amenities, neighborhood, property detailsYesStay live (reads)
Schedule, reschedule, cancel tourYes, the slot is checked and heldStay live, the one write
Transfer to a personYesStay live
Expected visitor lookupYesStay live
Calling on behalf of someonePartly: the booking uses that nameStay live
Opt out of textsNo, ack onlyCould move after the call; a transcript sweep already exists. Only cost: a same-minute text could still go out

What runs after the call today

One web handler, about 3,000 lines, runs 15 steps in order: save the transcript; sweep for maintenance, vendor, renewal and turnover outcomes; recover the lead from the transcript; back-fill the lead and queue the AppFolio guest card; text a tour-request receipt; send the application link if they asked how to apply; write the call summary, text the tour confirmation, enroll the follow-up cadence; email the team; capture an unknown caller's name; sweep for opt-outs; transcribe the human leg of a transfer.

Two weaknesses. First, only the guest-card step has a real queue: retried in bursts, re-driven every 15 minutes, pages us when stuck. Every other step is fire-and-forget: it logs and moves on if it fails (the team email has one 15-minute backstop). Second, the lead recovered from the transcript has no field for which home the caller talked about, so on a company-wide line the lead stays on the company placeholder and the guest card has nothing to attach to. That is exactly the Ember Estates case.

Proposed shape

One after-call analysis produces a single call outcome: who called, which home or homes they discussed (a list), what they asked, what Clara promised, whether they want to apply, opt-outs. Every side effect then derives from that one record and goes through the queue the guest-card step already has, so each one is retried and alerts when stuck. This deletes five separate transcript readers (lead capture, guest-card back-fill, tour-request, apply-intent, opt-out sweep) and replaces them with one; it adds no new mechanism.

  1. Now (bug fix, in flight): the lead recovered from the transcript also captures the home or homes named, matches them to the company's home list, and stamps the lead. The guest card then files at the right home. Proof: the Ember Estates call red on the old code, green on the new.
  2. Next: homes of interest become a list on the lead; the AppFolio queue adds a home to an existing card (the robot action already exists since 9/18) and creates a card with several homes; later syncs re-read the card's homes so PropFlow mirrors AppFolio. The "one card, one inquiry" check flips to "one card per person, one inquiry per home."
  3. Then: the remaining after-call steps move onto the same queue, one PR per step, starting with the team email.

Replaying the past misses with real calls

Of the seven shared-line leads with no card (9/17 to 9/21), three are replayable: the Ember Estates call, a Pomona Park Townhomes call Clara matched to 624 Eisenhauer Street, and Ethan's text naming 566 Placer Street that Clara could not place. The other four are a caller who refused the bot, our own line test, and two records that do not exist in production. The replay runs as scripted real calls on the Fairhaven test line, our fictional many-homes company on the harness caller's number, with the scripts re-skinned to Fairhaven homes. Fairhaven has no AppFolio connection today; the smallest setup is to point its company at the JP&Co test database and map a few of its homes to test-property units, so the calls prove the card lands without touching a customer's AppFolio.

What we do not support today

Where they may be thinking about PropFlow incorrectly

New asks and what it would take

AskWhat it would takeSizeNeeds from Western SlopeNeeds Fede's go?
Property name in every team emailAdd the missing property field to two email templates; a small, separate changeS/MNoneNo — internal engineering, dark by default. Summary and follow-up action: decided against, 9/21
Visible record when a home is unknown + a way to resolve itInstead of refusing silently, save a parked record and notify the team (reusing the notify path that already shipped today for other failed writes); then a way to attach the right building after the factMNoneYes — Fede is still deciding whether the current silent-refusal approach is fine as is
Call-summary notes on guest cards for front-line calls + recording linkTurn on the existing (currently off) call-notes setting, teach it to work when no building is named yet, and add a link to the recording; small-to-medium, a few separate changesMConfirm they want this onYes — turns on a new kind of write at a customer, and a customer-facing behavior
Showings on the guest cardAlready investigated as a separate proposal; not startedM/Ln/aYes — behavior change, Fede's call on priority
Clara texts Kat when she is stuck, instead of emailing the shared leasing inboxPlan written up on its own page: Clara as a coworker, by text. Clara texts one named person, that person texts back in plain words, and Clara answers the prospect herself. Status 9/23: a working trial ran at our own Willows and Fairhaven test properties only — there is no change to ship yet, and nothing of this is on at Western SlopeMConfirm Kat is the person, and her mobile numberYes — Proposed, pending Fede's review
After-hours emergency routingNeeds a destination number/person from them first; then a small routing changeSWho should get urgent after-hours callsYes — new customer-facing routing
Confirm which events trigger which emailsDocumentation/config confirmation exercise, not code — see inventory table belowSSign-off on the listNo
Oct 28 call: Ember Estates back-to-back showings need 45 minutes, not hour blocksChange the slot length Clara books at Ember Estates (and the gap before the next home); scheduling change to live behaviorSmallNothingYes (Fede said “we can change it” on the call; not yet given)
Oct 28 call: showing hours until spring (Ember weekdays 9–3, other homes 9–4, weekends 9–12)Set the bookable windows per home; scheduling change to live behaviorSmallConfirm the hours in writingYes
Oct 28 call: urgent escalations by text, not only email (toured-but-no-application leads, renewal deadlines)New escalation route per topic; new capability, default offMediumWho gets which topic, and how fastYes
Oct 28 call: Clara reads the property Description notes in AppFolio (Ember, Pomona “Internal Showing Notes”) but never repeats private onesThe public/internal split already exists: knowledge entries carry an audience and staff-only ones are filtered from every renter-facing prompt (#16768, #17645); an internal notes store exists from the Oct 3 company-brain pilot. Missing: ingest of the AppFolio Description column (property and unit), which the 6-hour report pull already fetches and drops, with a model pass sorting each note into renter-safe facts, staff guidance, or investor copy; plus aliases/alternate addresses from the same report into the alias store. Reusable: Situs fills the same box on 24 of 72 buildings. Design: docs.propflowai.co/a/company-brain-design-2026-10MediumNothingYes
Oct 28 call: one staffer has never seen the Monday/Friday summary emailsCheck delivery to each staff addressSmallWhich stafferNo

Today's email-type inventory (from the investigation)

Email typeTriggerWho gets it today
Tracked decision-request / escalationClara asks for a human, or a stuck ask reprocessesThe building's own owner address if set; for Western Slope, only the front-door building has one, so this only works there — a structural no-op at the other 69 buildings
Plain PM-forwardSame escalation call, when there's no tracked ownerFalls through to the shared org address, leasing@westernslopepm.com
Missed-call / transfer-missed noteA transfer ends with nobody picking upShared org address (same fallback chain)
Autonomous team noteClara answers a lead herself at a property flagged "autonomous"Shared org address; only fires at the front-door building today — no other Western Slope building is flagged autonomous
Tour booked / changed / cancelledA tour event happensShared org address (confirmed live — a tour confirmation, 09-19)
Daily summaryScheduled digestUnverified whether Western Slope is enrolled; out of scope of Jason's complaint, which is about per-event notices
Held/gated inbound noticeA new message arrives on a thread already on hold, unanswered 24hShared org address (same chain as escalation)

Every one of these resolvers returns exactly one email address, never a list. The only multi-recipient field that exists anywhere is a per-building "cc" field, and it's wired into just one of these seven email types.

Decisions for Fede

  1. Two notes Clara wrote for an AppFolio guest card last week never showed up on the card (same prospect, 9/17 and 9/18). Once tonight's fix that prevents duplicates is merged, post those two notes again, one time — yes / hold. Recommend yes.
  2. Clara can write a one-line summary of each phone call onto the caller's AppFolio guest card, the way she already does for emails and texts. That is switched off at Western Slope today, which is part of why their cards look empty after calls. Switch it on for them — yes / hold. Fede's call; it also needs the unknown-home gap closed to help front-line calls.
  3. Open question, not yet decided: when a lead comes in on the shared line and Clara can't tell which building they mean, should we keep quietly not creating a card (5 of the 7 recent misses were phone calls, 1 text, 1 email), or start saving a visible record instead? — Fede still deciding.
  4. Callers who ask about more than one home. Today the record keeps one home and the second is silently dropped or overwritten. Options: A (recommended) match AppFolio's shape — one card per person, one inquiry row per home discussed, with a list of homes on our lead; B first home wins and the others go into the guest-card note; C leave as is. — A / B / C. Recommend A.

References

PR / issueWhat it is
#10630A phone number is never used as a caller's name
#10643Missed-call email times use the property's own timezone
#10634A note write that succeeds on retry no longer keeps showing the old error
#10636A guest-card write that gives up now notifies the team and is logged, for every kind of write
#10627, #10638Conversation header shows the person's real name instead of "Unknown"
#10598Tour booked by Clara moves the prospect to the Tour stage
#10639Junk transcript fragments no longer reach the missed-call email subject or body
#10646A retry never double-posts a note (plus a companion AppFolio-robot fix)
#10645, #10664Clara introduces herself with the company name, not a street address, everywhere she introduces herself
#10668Guest-card notes are one short outcome sentence, never the inquiry restated
#10682A note lands on hand-off, application sent, or failed transfer; repeat calls write at most one note a day
#10700Duplicate-note check now reads both places AppFolio stores a note
#10560Clara quotes no figures until the home is certain
#10678Built dark: Clara's tours sync to AppFolio as showings, company setting off everywhere
#10694Willows guest-card write harness: create / assign / note / retry proven live on the test property
#10604Merged: prospect summary refreshed once per turn
#10641Merged: lease term / budget / home of interest captured in Notes
#10567Plain-forward transfer fix (live 4:14 PM MT today)
#10586"Something else" calls forwarded to the office main line (merged 4:50 PM MT, deploying, unproven)
#10795Merged: Clara refuses to transfer to any number the customer forwards into her line (the loop fix)
#10816Merged, dark: people ring list for "something else" callers, setting
#10817Merged, dark: people ring list for "something else" callers, routing
#10957Merged, dark: Clara's first reply recorded on the AppFolio card as an "Email Sent" communication; email and text turns stop writing notes
#10967Merged 9/23 (main 41e9d91ca): the clean copy on the main line — Clara’s first reply recorded on the AppFolio card as an “Email Sent” communication
#11085Merged and verified in production, no switch: Clara stops offering a transfer on text and email, and can see when a call transfer failed
#11075In review: every forward is handed straight over so the caller’s own number is preserved; the ring list keeps working
#11073Merged: the catch-all destination note matches the reversed main-line-loop ruling
#10933Merged: the decision-request notice moved onto the shared notice blocks (raw phone numbers gone)
#10947Merged, no switch: caller-number plumbing for the inbound leg Clara owns, first piece of the forward-bridge redesign
#10953, #10955, #10956, #10959, #10960In review, dark: call routing V2 — one company switch, one grounded policy table, emergency on-call list, maintenance ring list
#10954, #10958Merged / in review: the test runner that places one real call to every destination a company has, so a routing table is proven before it is turned on
#10626Label bug: connected maintenance calls mislabeled as voicemail/missed call
#10650Cosmetic: pickup moment not saved, playback starts at hold music
#9757Known, intentionally deferred: no staff notification on a silent write refusal (until a dedup key is designed)
#11182Merged: one shared matcher for which home a piece of free text is about
#11186, #11221A direct email files against the home it names, not the office record — the re-land is merged and verified in production
#11228Merged: Clara’s first reply knows which home the email is about
#11209, #11227Revert of the lead-event flood (merged and live) and the re-land, fixed and armed at head 054b2c2, waiting on checks
#11192Merged 9/23 (main 7ffde3238): the org mailbox lane honors the email-review switch
#11250Merged 9/23 (main baba8cb0a): approving a held email from the Slack thread now works
#11412Armed 9:00 PM 9/23: adds “Emails waiting on you (N)” as a sixth feed on /review, one row per held email
#11341Done, merged 841ac0c15: guest-card writes that were parked can be run again, so nothing parked is lost
#11343Armed, waiting on checks: the first-email lock expires on its own, so a lead is never stuck behind a stale claim (card 2953)
#11180Split and landing: the pure home-resolver (#11276) is merged; the prompt half (#11288) is fixed and armed, waiting on checks — Clara is told whether the home is known, unclear or missing, and never offers a tour without a known home
#11213Merged, prod verification pending: one company setting and one module for which replies Clara answers
#11291Merged: the auto-merge guard no longer disarms a green PR on a GitHub rate limit or a 5xx error — it leaves it armed
#11181Merged: clean revert of the share.propflowai.co route change (#11077)
#11305Merged: guest-card rerun tool can replace a bad held draft (internal tool, no prod proof needed)
#11208Fixed and armed, waiting on checks: the reply grader fails process narration and unprompted policy recital
#11211Open issue: the review hold does not cover every outbound path; the fail-open fix is being opened
doneClara's first email uses the matched house even on multi-house properties (card 2948)
PropFlow Docs