Amy Reid's Thursday: why Kat saw five showings

State as of Nov 3, 12:30 PM MT: all three tours cancelled, Kat arranged Ember 3:30 herself, Amy unanswered (added by session 010; owner session 003 decides, nothing acted on)

All three Thursday tours are now cancelled: Amy emailed at 12:36 AM to cancel Morningside and Pomona and keep Ember; the email handler cancelled Ember instead (the thread’s own home), and her 5:52 AM correction cancelled the other two. Kat then arranged Ember, 2863 Florida St, Thu 3:30–4:00 PM herself and put it on her own calendar at 9:44 AM; PropFlow has no tour record for it, Amy’s 5:52 AM email has no reply, a held Clara draft offers Friday instead, and the AppFolio showings 609/610/612 were not re-synced. Each cancel texted Kat overnight; the staff-text quiet-hours fix and the wrong-tour-cancel fix are in progress (Western Slope issue list, 11/3 rows).

Root-cause analysis of the Thursday Nov 5 tours at Western Slope Property Management, written from production records on Nov 2, 2026. Read-only. Anything not backed by a record is marked inferred.

Western Slope · leasing · tours · 2026-11-02 · session 003 · Status: diagnosed; 9 AM tour moved to Kat 3:30 PM on Nov 2, silently

The one real booking error: the 9 AM tour went to Ryan Fleming, who only covers showings when Kat is on vacation. The two-name host rule gives him any day Kat has no open time; it cannot tell booked solid from away. Clara did not book the same showing twice.

Amy Reid, one prospect relocating to Grand Junction, asked by email and text (never by phone) for four different homes on the same Thursday. Clara booked three of them, at three homes, split across two hosts: two on Kat's calendar (4:30 and 5:30 PM) and one on Ryan Fleming's (9:00 AM). A fourth home (363 Ember Lane) was offered but never booked, though Amy wrote "I added Ember to my calendar".

Kat's calendar block was respected. Her all-day Landlord Symposium (8:00 AM to 4:30 PM, on the calendar since August) was counted as busy. Clara put the first tour at 4:30 PM, the exact minute the symposium ends, with no travel time, and the second right after it.

The other failures were around the bookings: host picked differently by the offer and the booking step (three refusals, the errors Fede saw), a wrong home, a wrong team notice, and a held itinerary. Details in the eight misses below.

What we did on Nov 2 (Fede's go, all eight items)

BeforeAfter
Amy's Morningside tourThu Nov 5, 9:00–9:30 AM, host Ryan (Google calendar)Thu Nov 5, 3:30–4:00 PM, host Kat (Outlook), as Kat told Amy
CalendarsEvent on Ryan's calendarRyan's event deleted; Kat's event created with no attendees, so nobody was notified
ReminderWould have fired for 9 AMRe-anchored to 3:30 PM; Amy gets the normal day-before reminder, no “tour changed” message
AppFolio showing 6129:00 AM, Ryan3:30 PM, Kat. Moved by the normal showing sync (queued 19:36:58Z, sent and read back 19:46:37Z); the robot forces AppFolio's notify flags off
Ember 4:30, Pomona 5:30KatUntouched
Messages to Amy, Ryan, Kat—None. The Slack ops card still shows 9:00 AM (stale, not a send)

Done by hand at the data layer (claim slot, create event, save row, delete old event, release old slot, re-anchor the reminder), never through the reschedule, cancel or change-host handlers, each of which texts the prospect. The app's own host change refused because Kat's calendar is busy 8:00–4:30 that day; she chose 3:30 anyway. Ledger: session 006 external-writes ledger, 2026-11-02 19:36Z.

Settled Nov 2 (Fede): Ryan is off the Western Slope tour-giver list; he goes on only for the dates Western Slope announces Kat is out, and comes off after (he is a contractor; they tell us ahead). He keeps his login, role and calendar. No automatic backup logic will be built.

What is actually booked

All 90 Western Slope homes were checked for Oct 29 and Nov 5. Four tours exist; three are Amy's.

Thu Nov 5HomeHostBookedHow Amy askedUnder the new hours
9:00 AM2841 Morningside CtRyanSun Nov 1, 7:14 AMEmail: "open 9am–1pm… book us"inside
4:30 PMEmber Estates, 374 Ember Ln (2863 Florida St listing)KatThu Oct 29, 3:18 PMText: "Could we come on 11/5?"outside (ends 4 PM)
5:30 PMPomona Park TownhomesKatFri Oct 30, 6:59 AMEmail: "stack the tour times? 3:30 and 4:30"outside
(not booked)363 Ember Ln——Email Nov 1: "We also want to schedule 363 ember lane"; 10:00 offered, no answer—

Kat's own Nov 5 calendar holds the symposium, a 1:00 PM check-in, and the 4:30 and 5:30 tours. Nothing in the morning. Oct 29's only tour (Anthony McCleary, 2:30 PM) is unrelated. Kat and Amy have since spoken and sorted the day out; the winter hours Kat asked for the same morning are now live (weekdays 9–4), and the two late tours were left in place for them to settle.

Timeline

Mountain time. Record ids in the last column.

WhenWhoWhat happenedVerdictEvidence
Aug 2JayLandlord Symposium series created for Nov 5, 8:00 AM–4:30 PM; Kat's copy is Tentative.—Outlook series master
Oct 29, 3:06 PMAmyEmails about 2863 Florida St; texts "Could we come on 11/5?"—msg_b2a1e911, msg_af_d639
3:12 PMClaraChecks Nov 5. Symposium counted busy; only 4:30 / 5:00 / 5:30 offered.correctmsg_01d4f99
3:18 PMClaraBooks 4:30 PM with Kat at Ember Estates. Outlook event + AppFolio showing 609. Starts the minute the symposium ends; no travel gap.tighttour 14503f1b
8:53 PMAmyApartments.com lead for Pomona Park arrives; she emails "stack the tour times? 3:30 and 4:30".—msg_cc596f1f
8:54 PMClaraLooks up slots for "Pomona Park Townhomes" but gets slots stamped for Ember Estates. Offers 5:00 or 5:30.wrong homemsg_8a9aef19
Oct 30, 6:59 AMAmy / Clara"yes either works!" Three refusals in 40 s: slot expired; "already has a tour" (the Ember inquiry's guard); 5:00 is a time conflict though reported open 7 s earlier.3 errorsmsg_a24b489d, msg_62d6e361, msg_6f364375; Sentry 1NH, 1F9
6:59:59 AMClaraBooks 5:30 PM with Kat at Pomona Park; showing 610. Tells Amy "5:00 wasn't open, so I moved it a half hour later".recoveredtour befcbd52
Nov 1, 2:51 AMAmyWebsite form with her wish list; the same body arrives again as her own email 10 s later.—msg_079b3ba3, msg_e34190a1
2:52–2:53 AMClaraTwo replies 44 s apart: 363 Ember Ln at 4:00 or 5:00, then Morningside at 3:00 or 3:30.double replymsg_e6535f36, msg_13f013e8
7:05 AMAmy"3rd one at 3:30pm" (Morningside).—msg_e3597d05
7:06 AMClaraRefuses: "office is closed for the entire day" (the offer had used Ryan, who is free; the booking step picked Kat, who is busy). Team email about the failure names the 4:30 Ember tour instead.host mismatch + wrong noticemsg_f7c40941, msg_cd1b9cbb; Sentry 1F9
7:14 AMAmy / Clara"open 9am–1pm… book us… send a complete list by time and location." Clara books 9:00 AM with Ryan at Morningside (showing 612 landed after 12 attempts).bookedtour ee5f9bf3
7:16 AMClaraThe itinerary Amy asked for is held by the "unit count stated" guard and never sent.heldmsg_held_eef165d9
7:58–9:31 AMAmy / Clara"We also want 363 Ember Lane"; 10:00 / 11:00 offered. Amy: "I added Ember to my calendar." Clara: "363 Ember Ln hasn't been booked yet… book 10:00?" No reply.unbookedmsg_4eacd874, msg_06eb3dfc
Nov 2, 10:58 AMKatEmails Fede; accepts the symposium (Tentative to Busy) nine minutes later.—Slack ts 1793642386

The eight misses

  1. No travel gap after a calendar block. The 4:30 tour starts the minute the symposium ends. A block with no home attached gets no drive time, and the company buffer is zero. Kat has a workshop across town until 4:30 and a showing at 4:30.
  2. Offer and booking pick the host differently. The offer adds drive time to each host's blocks and gave Nov 5 to Ryan; the booking step adds only the flat buffer, chose Kat, and refused. This is the "office is closed for the entire day" error. (Corrected Nov 2 from real records: the Oct 30 "5:00 open, then conflict" pair was NOT host math; Kat was the host both times and drive time from her 4:30 at Ember correctly closed 5:00 at Pomona. That pair belongs to miss 3, the wrong home.) Nov 2 comparison: Situs Group has 0 such refusals in 30 days but only 4 bookings, all by phone, and phone bookings always re-pick the host; the same gap is open there. A full fix was built last week and closed unmerged on Fede's call; its design sits on the go-live tracker.
  3. A home named in the thread resolved to the thread's home. "Pomona Park Townhomes" came back as Ember Estates slots, which then tripped the Ember inquiry's "already has a tour" guard.
  4. The failed-booking notice names the wrong tour. The team email said "Ember Estates · 4:30 PM" for a failure that was about Morningside at 3:30, because it reads the prospect's existing tour instead of the attempt.
  5. Amy's itinerary was held and never sent. A guard meant to stop Clara from stating unit counts held the list of Amy's own booked tours.
  6. Same email in twice, two replies. The website form and its email copy produced two Clara replies offering different homes and times 44 s apart. That is where Amy's "morning and afternoon" picture starts.
  7. Ryan is a backup host, not a second host, and the system cannot tell the difference (Fede, Nov 2). Ryan Fleming covers showings only when Kat is on vacation. He was added behind Kat on Oct 6 as a backup for her Oct 8–12 time off (the design said he gets times only when Kat has none; see fix E). The Oct 30 "any free host wins the slot" change dropped the list order, so when Kat's calendar was blocked for one day Clara treated him as the free host, booked him for 9 AM, put it on his calendar and in AppFolio, and texted him. He never replied. This is the miss behind the 9 AM tour; the tour is on hold for Fede's decision (cancel, move to Kat, or leave to Kat and Amy).
  8. Nothing looks at a renter's whole day. The only repeat-booking guard is per inquiry per home; a second home the same day is allowed by design, with no travel check between a renter's own tours. Whether one renter should tour several homes in a day is a design question, not a missing guard.

What Kat and Amy experienced

Fix options (decision for Fede)

Nothing is built. One pick, or "hold".

OptionWhat changesFixes missesNote
A. Same host, same math recommendedThe booking step uses the host and drive-time math the offer used, and a block with no home gets a minimum gap after it.1, 2Reuses last week's closed design and its replay; the one that produced the errors Fede saw.
B. Say what failedThe team notice names the home and time that failed; a home named in the thread is resolved against the company's homes before falling back to the thread's home.3, 4Small, no behavior risk to bookings.
C. One renter, one dayA renter's own booked tours are never held by the unit-count guard; booking a second home the same day checks travel between that renter's tours.5, 7Needs a ruling on whether several homes per day is wanted.
E. Execute the existing backup-host design recommendedAlready investigated and designed on Oct 5 for Kat's Oct 8–12 time off (plan, tracker row "Backup tour host for Kat's time off"): Ryan sits behind Kat and gets times only when Kat has none for her whole absence, with the open question of per-person hours. Not executed. Then on Oct 30 the "any free host wins the slot" change made the list order meaningless, so Ryan became a full host.8Fede, Nov 2: "there is already an investigation and design for it we haven't executed."
D. One inbound, one replyA website form and its email copy are one message.6Belongs to the inbound-email lane.

Recommendation: E and A now (E is what put the 9 AM on Ryan; A is what produced the errors), B with them as a second small change, C and D as follow-ups after Fede's ruling on several homes per day.

Not verified

Evidence ids

Person pers_e057f198-4690-4902-bff5-176b8f813070 · conversation 3edfcfc7-5eca-46a6-9fc0-5bce3ad2fd3e · tours 14503f1b-fef6-4365-b362-c8ecf9fb82cd, befcbd52-8b4b-4ace-8aec-3598bb26f90d, ee5f9bf3-77d2-49f0-9b89-59ecac751265 · inquiries 3c2f9c66, a627ee72, 5a33560b, 7b6f94b1 · key turns msg_8a9aef19, msg_6f364375, msg_f7c40941, msg_cd1b9cbb, msg_held_eef165d9, msg_e34190a1 · Sentry 1NH, 1F9, 1AT · #alerts 1793365363, 1793542574, 1793549796 · unrelated tour d3b18a07. For engineers: the host pick lives in the calendar sync's pool-host chooser vs the availability check's drive-time read; the repeat guard keys on the inquiry's tourId; the home resolver falls back to the thread's property; the failure notice reads prospect.tourId.

PropFlow Docs