ws-clara-org-wide-identity-2026-09-18 — held by PropFlow-Technologies/propflowai#9501, PropFlow-Technologies/propflowai#9502gc-sync-defense — held by PropFlow-Technologies/propflowai#9689ws-microsoft-verified-publisher, lp-scraper-live, tb-portfolio-bench, k9-api-key-secure-link, modules-western-slope-leasing-only, ws-twilio-sms-url, ws-tour-length-30-2026-09-17.
Every other status on this page comes from that row’s own PR, commit or decision links; these name nothing a machine can read, so nothing can contradict them when the work changes.
To make the same claim checkable, write one of these on the row and it derives on the next tick: prs (a PR ref — read from GitHub), completion_evidence (owner/repo@<full 40-char sha> — checked against the default branch), shipped_without_pr (why no PR can exist), or decision (the id that settled it). A row that is not owed a build says so with unbuilt; one a decision retired says so with canceled.
Western Slope live on the portfolio model: one number, one mailbox, 14 properties, guest cards working
Status is DERIVED from each row’s own PR, decision and prod-evidence links by
bin/refresh-tracker western-slope-go-live — never typed. Last refreshed
2026-09-19 19:25Z.
Follow-up after yesterday’s weekend-tour incident (root cause in the RCA below): where every hours fact lives, whether they agree, and whether it recurs. Read-only prod pull, 2026-09-18. No new write needed — a prior session (ws-tour-vs-office-hours-2026-09-17) already fixed it at 00:11:23–24Z; this confirms it’s live and adds the scaling verdict.
| Place | Stored where | WS value (2026-09-18) | Who reads it |
|---|---|---|---|
| Tour hours (canonical) | Organization.settings.tourHours (ORG#c42d9150…/PROFILE) | Mon–Fri 8–18, Sat/Sun 10–15 (matches ruling) | Booking + slots, all channels, via readOrgTourHours/resolveTourHoursPure |
| Property tour hours (unused override) | PropertyKnowledge.tourHours (PROP#<id>/KNOWLEDGE) | Unset on all 70 properties → falls to org value | Same resolvers; wins over org when set |
| Business/office hours | PropertyKnowledge.officeHours (PROP#western-slope-front-door) | Mon–Fri 9–5, closed weekends (fix #9188/#9214) | “Is the office open” statements, after-hours routing, voice property_office_hours var (route.ts:1311) |
| Knowledge prose — office/lobby | ATTACH#setting#knowledge.section.office-hours-contact (ORG#c42d9150…) | Lobby Tue–Fri 1–3, by appt Mon–Fri 9–5; “closed weekends” line removed 00:11:23Z | PROPERTY KNOWLEDGE prompt block, all channels (buildLeasingKnowledgeBlock) |
| Knowledge prose — tour hours | ATTACH#setting#knowledge.section.tour-hours (ORG#c42d9150…) | New 00:11:24Z: weekdays 8–6, Sat/Sun 10–3, “never from office or lobby hours” | Same prompt block |
| Prompt guard | clara-leasing.ts:1759 | Forbids quoting office/lobby hours as a reason a tour can’t happen | Shared voice + text/email prompt |
Precedence when two disagree: property tourHours > org tourHours > property officeHours for bookability — office/lobby hours never gate a tour. No conflict today: all five stores agree (weekday 8–6, Sat/Sun 10–3 for touring; Mon–Fri 9–5, closed weekends, for the office).
formatOfficeHours, instead of typing and approving the sentence by hand in the gold set.officeHours and tourHours; voice only ever computed office hours. Covered today by the prose entry and the prompt guard, both hand-maintained; give voice its own tour_hours variable instead.The short answer. We did not suddenly write worse code. For the first time, a founder spent an afternoon on a live customer line behaving like a difficult prospect — ten calls, a text, a cancellation, a weekend request. Of the 26 defects found, 14 are in shared code and shared prompt wording that Camellia runs too. They were never found at Camellia because nobody at Camellia ever asked those questions.
Proof that these are not new bugs. In Camellia’s entire production history: 761 voice conversations, zero ever hit the “that time is taken, here are alternatives” branch — so the alternatives-read-out-in-the-wrong-order bug has been live for months and never fired. 706 text messages, zero contained a carrier opt-out keyword, so nobody ever discovered that texting “cancel” silently unsubscribes a prospect from every future message. Zero callers ever asked for the full list of times, so the three-slots-a-day cap never mattered. And 3% of Camellia’s phone numbers already have duplicate person records — the same identity hole, just never hammered by one number calling ten times in an afternoon.
Is it the same core agent prompt? No, and that matters less than it sounds. Camellia runs two long-lived prompts inside the fleet sync. Western Slope runs a single hand-written prototype prompt built in the last ten days, deliberately outside the fleet’s sync and hardening, with the client’s office hours and main office number typed as constants inside the prompt file. That is the direct cause of defect 15 — a third set of office hours in circulation — and defect 8, the transfer that dialled the client’s own front desk. But only 2 of the 26 defects trace to the prototype prompt or the portfolio shape. The rest are shared.
“We had explicit PRs for this” — the weekend hours. Six PRs since 2026-09-08 touched tour hours (#8900, #8913, #9013, #9039, #9046, #9156). Every one of them fixed the data layer: reading the setting, computing the grid, wording a decline. #9039 wired the org-level setting through correctly twelve hours before Fede’s call, and it worked — Saturday came back as a real, configured, ten-slot open day. It was then thrown away one layer later. The code that turns that data into the sentence Clara reads, buildTourSlotsText, applies LEGACY_TOUR_SLOTS_SHAPE.maxOpenDays = 2 — a cap written before org-level tour hours existed. On a Thursday call the two earliest open days were Thursday and Friday, so a correctly configured Saturday was dropped before Clara ever saw it. Six PRs fixed the data; none touched the sentence. #9198 was the first, at 23:24Z, and #9203 superseded it the same night.
Why the knowledge base said “closed weekends.” Nobody hallucinated it. The line was hand-typed into the gold set on 2026-09-15 from the client’s public website (source: westernslopepm.com), approved, and written verbatim into the knowledge record. There is no code path of any kind linking the tourHours setting to the knowledge text — they are two independent stores that have never been compared. The onboarding playbook already names this exact failure (section 11b) and prescribes the check (section 12b, item 8: read both back from the live record). The check was never built.
Process causes. (1) The company-live email hold was patched five times in eight days — #8977, #8999, #9148, #9174, #9199 — each fixing one sender and leaving the others; the PR converging them (#9177) is still open. Defect 6 — a callback request nobody was told about — is the cost. (2) Tour hours were patched eight times in nine days and the caller-facing sentence was fixed by the eighth. (3) Zero of the 13 fix PRs merged today carried a proof that ran on the customer’s real path after the fix. Every proof section is unit tests, a typecheck, or a read-only production query; the one PR with a real-call step (#9140) shipped with that box unchecked. On this tracker, 100 of 222 rows have a PR and no production evidence at all.
| Cause | Defects | Which |
|---|---|---|
| (c) Shared prompt or behaviour — latent at Camellia too, never exercised there | 14 | 3, 7, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21, 22, 23 |
| (e) Missing pre-go-live coverage — a scenario nobody has ever run | 3 | 4, 5, 17 |
| (f) Unverified — could not reproduce, do not assume | 3 | 24, 25, 26 |
| (a) Config gap — org-level set, property-level empty, or two stores disagreeing | 2 | 2, 8 |
| (g) Portfolio-shape or prototype-prompt code Camellia never runs | 2 | 1, 15 |
| (b) Held by the company-live switch — only happens to a not-live company | 1 | 6 |
| (d) Genuine regression from this week’s own PRs | 1 | 9 |
The 26 defects, one row each. “What would have caught it” is the specific check that did not exist.
| # | Defect | Cause | Fix | What would have caught it |
|---|---|---|---|---|
| 1 | Weekend tours denied though weekend hours are configured | g | #9198, superseded by #9203 | A robot call asking for a Saturday tour, on the real line, after writing the hours |
| 2 | Knowledge text says “closed weekends”; the setting says Sat/Sun 10–3 | a | Decision owed — which one is true | Playbook 12b item 8: read office hours and tour hours back from the live record and diff them against the knowledge text |
| 3 | 50-second loop, could not list times, narrated her own context | c | #9203 | Scenario: “read me every time open Friday afternoon” |
| 4 | Texting “cancel” permanently opted the prospect out of all texts and email | e | Open — Twilio advanced opt-out config | A keyword sweep on the real line: text cancel, stop, end, quit and check the record |
| 5 | Cancellation produced staff email and Slack but no text to the prospect | e | Downstream of 4 | Same sweep, with a delivered-event assertion per channel |
| 6 | Callback request captured; office never told | b | #9199, #9174; converged by #9177 (open) | A delivered-event check on every staff notice, not a “sent” return value |
| 7 | Promised to note a name change, did nothing | c | Prompt, open | Promise-vs-action grading on every call — the grading bot did flag it, after the fact |
| 8 | “Talk to a person” dialled the client’s own front desk, which forwards back to Clara | a | #9201 (open) | Scenario: ask for a person on the real line and follow where the call goes |
| 9 | Repeat caller not recognised; 15th duplicate person record created | d | #9163 | Repeat-caller scenario from a distinct number, twice in a day |
| 10 | Offered an afternoon slot right after the caller said “morning” | c | #9203 prompt | Part-of-day scenario in the standard sweep |
| 11 | Invented a reason for a conflict (“that time just got taken”) | c | Prompt, open | Conflict scenario — never once fired at Camellia in 761 calls |
| 12 | Offered 8:30, then 8:30 vanished — two different slot sources in one call | c | #9203 | Same conflict scenario; assert the two sources agree |
| 13 | Conflict alternatives read out nearest-first, not in clock order | c | #9203 | Same — shared by voice, text and email |
| 14 | Reschedule confirmation text landed 36s after the caller asked to cancel | c | Open | Rapid text-then-text scenario |
| 15 | A third set of office hours told to a different caller the same day | g | Open — delete the hardcoded hours from the prototype prompt | A build check refusing any literal day/time range inside a prompt file |
| 16 | Refused to correct a prospect’s own name (“I’m not able to update names”) | c | Prompt, open | Scenario: correct your name mid-call and check the record |
| 17 | Reschedule and cancel never refresh the guest card | e | Open | Reschedule, then read the guest card — the schedule path writes it, the other two do not |
| 18 | Clara talked over / was interrupted four times in each of three calls | c | Prompt, open | Turn-length budget graded per call |
| 19 | Pushy cancel flow — two rebook attempts after “I need to cancel” | c | #8966 claimed this; recurred | Replay of the prior night’s call after the fix, which is the rule we already have |
| 20 | Re-asked a question the caller had already answered | c | Prompt, open | Same replay |
| 21 | Greeting did not match the question asked | c | Prompt, open | Standard sweep grading |
| 22 | Asked for a callback number she already had | c | Prompt, open | Standard sweep grading |
| 23 | Nine turns over 3s to first audio; worst 4.2s | c | Open | A latency budget asserted on every sweep call |
| 24 | Dashboard reportedly showed a cancelled tour back on — not reproduced | f | — | Unverified. A write did land on the cancelled row 2m10s after cancellation; worth chasing |
| 25 | An overnight tour and prospect that confirmed by text do not exist in prod | f | — | Unverified. Either hard-deleted or written outside propflow-prod |
| 26 | Staff email body wording | f | — | Unverified — SendGrid returns metadata only; needs a BCC copy to read |
What we change. Three things, in order of leverage. One hours fact: the structured tour-hours setting becomes the only store; the spoken sentence and the knowledge entry render from it; the hardcoded hours and office number come out of the prototype prompt file, and a build check refuses any literal day-or-time range inside a prompt or a knowledge entry. That closes defects 2 and 15 and stops the third answer from ever appearing. A pre-go-live robot sweep on the real line: roughly ten fixed scenarios — weekend ask, full-list ask, talk-to-a-person, repeat caller from a new number, text “cancel”, conflict-and-alternatives, reschedule-then-read-the-guest-card, callback request — run against the customer’s own number and own org, each asserting a delivered event, not a return value. Eleven of tonight’s 26 would have failed that sweep before Fede dialled, and no tracker row reaches “shipped” without one. Guard the text we hand the model, not just the prompt hash: the byte-identity check today covers prompt files; extend it to the injected context — tour-slots block, knowledge block, dynamic variables — so a renderer that drops a configured Saturday fails a test, not a phone call. With it, a standing rule: the third patch to a seam converges it.
What this is. Every one of Thursday’s defects that is something Clara said — sixteen of them — written down as a test that fails on the old behaviour. Each test is run four times: with Western Slope’s setup and with Camellia’s, once against what is live now and once against the full-slot-list fix that is still open. Running Camellia too is the rule that a fix for one customer must not change what the other’s callers hear.
How it runs. On the Claude subscription, not a paid key, so it can run every night. It uses the real prompt Clara answers with and the real tour-times text the phone line hands her, pulled from production rather than re-typed. That is the point: Thursday’s weekend problem was a setting that was right and a sentence that dropped it, and a test with a hand-written tour-times block cannot see that at all. Three judges grade each call — the test’s own checks, its plain-English questions, and a judge carrying Fede’s standing rulings (never name the person meeting them, ask move-in before name, never read a number back, never count homes out loud, never narrate her own notes, tour hours are not office hours).
Result. Live today: 8 of 32 pass. With the remaining fix: 12 of 32. By customer, live today: Western Slope 7 of 16, Camellia 1 of 16. With the fix: Western Slope 8 of 16, Camellia 4 of 16. Model claude-sonnet-4-6, run 2026-09-18T02:39:09.631Z. Every row links to the words.
What the remaining fix moves to green:
Still wrong on both arms — these reproduce on both setups and on both arms, so they are real and not a grader having a bad night. Each has an issue:
| The call | Live today | With tonight’s fixes | Defect | Words | ||
|---|---|---|---|---|---|---|
| Western Slope | Camellia | Western Slope | Camellia | |||
| Tour times a caller can actually hear | ||||||
| asks for the full list of times | fail | fail | fail | fail | 3, 8 | read it |
| "what else do you have" | fail | fail | fail | fail | 3 | read it |
| says they prefer mornings | fail | fail | fail | fail | 10 | read it |
| a time is taken — no invented reason | fail | fail | fail | fail | 11 | read it |
| alternatives in time order | pass | fail | pass | fail | 13 | read it |
| Hours never veto a tour | ||||||
| weekend ask, "closed weekends" in the knowledge | pass | fail | pass | pass | 1, 2 | read it |
| hours question, three sources on file | pass | pass | pass | pass | 15, 2 | read it |
| A person-ask becomes a message | ||||||
| "can I speak to someone" | pass | fail | pass | fail | 8 | read it |
| the same ask at 2 AM | pass | fail | pass | fail | 8 | read it |
| taking a callback number | fail | fail | fail | fail | 6, 22 | read it |
| She does what she says she will | ||||||
| promises a note — does she write it | fail | fail | fail | fail | 7 | read it |
| corrects a wrong name | pass | fail | pass | fail | 16 | read it |
| Listening | ||||||
| cancels a tour — one save attempt | fail | fail | pass | fail | 19 | read it |
| never re-asks what was answered | fail | fail | fail | fail | 20 | read it |
| the greeting answers the question asked | pass | fail | pass | pass | 21 | read it |
| a caller speaking Spanish | fail | fail | fail | pass | — | read it |
Three things the bench caught about itself, before these numbers. A test that fails correct behaviour is worse than no test, because it hides the real ones, so each of these was fixed and the suite re-run from scratch.
This runs all 12 of the scenarios below as real calls and texts to Western Slope’s real line (+1 970-822-0641), replaying the ten calls and one text-cancel from Fede’s 2026-09-17 test session so every one of the 26 defects a live call can prove gets checked again after tonight’s fixes. Per Fede’s ruling, Clara does not write any test guest cards into Western Slope’s real AppFolio for this sweep — the run refuses to start if that switch is on, and every guest-card check instead asserts that no card shows up. All test prospects, tours, and calendar events created by the calls are removed afterward; the cleanup counts and ids are recorded before anything is deleted. Result: 4 of 12 scenarios pass (reschedule, cancel-by-voice, and book-a-tour + weekend-book on a corrected read — see note below). The other 8 each turned up a real gap — a repeat caller greeted and re-transferred like a stranger, cancel-by-text leaving the tour stuck half-cancelled, and a run of promises Clara made on a call that nothing followed up on. No AppFolio guest card was written for any of the 12 calls, as required. Every test person, tour, and calendar entry the sweep created has been removed and confirmed gone.
Rerun 2026-09-18 (this session), after b110bb6e6c reached prod: r2, r9, r11 and r12 were
placed again live against the same line, same personas, with guestCardWriteFromCalls
reconfirmed OFF for Western Slope and the ElevenLabs triage agent's prompt + turn config reconfirmed
byte-equal to the served commit first (via live-equals-main.drift.test.ts from a
disposable worktree). Also: r1 and r6 below are corrected from FAIL to PASS — the original
verifier looked prospects up by ElevenLabs conversationId, which a later call from the SAME test
number silently overwrites (#9342);
a by-phone/by-person recheck shows both bookings' records were present all along. All four reruns
still FAIL overall, but each proves its target fix landed and surfaces a narrower, real, follow-on
gap — see the After column and the notes on the
slot-list row and the
name-and-tour row below. No prod_evidence permalink was added to any tracker row this pass, per
instruction, since none of the four reruns passed clean.
| Scenario | What it tests | Before | After | Cleaned |
|---|---|---|---|---|
| r1 — book a tour, morning preference | Duplicate person records on a repeat number; an afternoon slot offered right after “morning”; an invented conflict reason; a slot that vanished after being offered; alternatives read out of order; interruptions; slow turns | Defects 9 (#9163), 10 (#9203), 11 (open), 12 (#9203), 13 (#9203), 18 (open), 23 (open) | PASS (corrected 2026-09-18) — tour booked fine (text, email, Slack, calendar all fired). The original “no inquiry/prospect record was saved” finding was a verifier false alarm: it looked the record up by ElevenLabs conversationId, which the r2 call from the same test number later overwrote; the record was present all along by phone/person lookup (#9342). | Yes |
| r2 — ask for the full list of times | Clara narrating her own plumbing (“the tour times I have loaded…”) instead of naming times; interruptions on every failed answer | Defects 3 (#9203), 18 (open) | FAIL, rerun 2026-09-18 — defect 3 is fixed: Clara now names the full afternoon list (14 concrete times, chronological, zero plumbing phrases — both required checks passed). New gap: she read all 14 times in one breath instead of asking morning-or-afternoon first and offering a couple (Fede judge 4/10), used a stall line (“let me pull that up for you”), and no home/move-in date was ever asked, so nothing was on track to book (the call itself was scripted not to book). Verified by hand: no tour row exists for this persona, which is correct — r1’s tour was already removed by last night’s cleanup before this rerun, not a new miss (assertion for this row does not require a tour). | Yes |
| r3 — reschedule the same tour | Guest card not refreshed after a reschedule; confirmation text landing late | Defects 17 (open), 14 (open) | PASS — reschedule moved the same tour; calendar, confirmation text, staff email, and Slack post all updated correctly. | Yes |
| r4 — cancel by voice, “something came up” | Pushy rebook attempts after a cancel; guest card not refreshed; no cancellation text sent to the caller | Defects 19 (#8966, recurred), 17 (open), 5 (downstream of 4) | PASS — cancel by voice removed the tour and the calendar event, sent the cancellation text and staff email, and made only one polite save attempt. | Yes |
| r5 — repeat caller, same number | Same caller not recognized on a second call, minting a new duplicate person record | Defect 9 (#9163) | FAIL — the greeting used the caller’s name before recognizing him, nothing acknowledged he’d called before, and a second person record was created for a number that had already called once. | Yes |
| r6 — weekend tour, ask then book Saturday | Weekend tours denied though weekend hours are configured; knowledge text says “closed weekends” while the setting says otherwise; greeting doesn’t answer the weekend question | Defects 1 (#9198, superseded by #9203), 2 (decision owed), 21 (open) | PASS (corrected 2026-09-18) — the weekend tour booked correctly and the text/email/Slack all fired. Same verifier false alarm as r1: the “no inquiry record / tour never hit the calendar” finding was a conversationId lookup miss, not a real gap (#9342). | Yes |
| r7 — move it, “Sunday afternoon,” no time given | Re-asking morning-or-afternoon after the caller already said afternoon; guest card not refreshed on reschedule | Defects 20 (open), 17 (open) | FAIL — the “Sunday afternoon” reschedule was left half-done: the tour sits unconfirmed with no time, no calendar event, no confirmation text, and no email to the office. | Yes |
| r8 — cancel by text, the word “cancel” | Texting “cancel” permanently opting the prospect out of all texts and email; no cancellation text sent; a crossed confirmation text landing late with no acknowledgment | Defects 4 (open, Twilio config), 5 (downstream of 4), 14 (open) | FAIL — texting “cancel” did not cancel the tour (it stayed unconfirmed and bounced between states), the calendar event never came down, and no text or staff email went out. | Yes |
| r9 — “can I talk to a person?” | Transferring to the client’s own front-desk number, which forwards back to Clara | Defect 8 (#9201, open) | FAIL, rerun 2026-09-18 — defect 8 is fixed: no transfer to the office line fired (required check passed), the message reached the team (staff email delivered, Slack posted), and no guest card was written. Half of tonight's other fix landed: Clara took the caller's name without asking twice. The other half did not: she never pivoted to “are you looking for a place?” and stayed in pure secretary mode (Fede judge 6/10, needs 7). | Yes |
| r10 — resident with a leak | Companion check — the maintenance transfer target must also never be the office line | Defect 8 (#9201, open) | FAIL — the leak call transferred to the right maintenance line, but Clara promised to “leave a note” (a banned follow-up promise) and handed the caller off as “Unknown caller” without asking a name. | Yes |
| r11 — callback, then a name correction | A callback request captured but the office never told; a promised note never actually written; refusing to correct the caller’s own name; asking for a callback number already on file | Defects 6 (#9199/#9174, converged by #9177), 7 (open), 16 (open), 22 (open) | FAIL, rerun 2026-09-18 — defect 6 stays fixed (staff email delivered, Slack posted, notifiedAt set). Defect 7 is a mixed read: Clara said “I’ll note that it’s Priya Ramirez” and the deterministic check found no tool call right after, but a by-hand check of the actual Person record (by phone, not conversationId) shows the name WAS updated to “Priya Ramirez” before cleanup — the write landed, the checker's transcript-window match just missed it. Also: Clara now confirms the callback number by its last four digits (“ending in 5, 5, 6, 6”), which is the b15ba8703 fix working as designed (see the last-four row below) — this scenario's own “didn't ask for a known number” assertion predates that ruling and needs updating, it is not a new bug. Real remaining gap: Clara never answered or even asked about the caller's application question, and never offered a tour (Fede judge 3/10). | Yes |
| r12 — what are your office hours? | A third set of office hours in circulation; hours used to deny a tour that should be judged on tour hours, not office hours | Defects 15 (open), 2 (decision owed) | FAIL, rerun 2026-09-18 — defects 15 and 2 are both fixed: office hours and tour-hours came back as two clean, non-contradicting answers (Fede judge's own words: “nothing contradicted, nothing made up, so that part's fine”), scoring exactly 7/10, the passing threshold. Marked FAIL anyway because the judge's blanket “ends with a tour on the calendar” rule fired even though this scenario's script explicitly says not to book — when the caller asked “when can I come see a home,” Clara read hours back instead of offering a slot right there. Worth checking whether that blanket rule should exempt scripted no-booking scenarios. | Yes |
Full method, safety rails, and what gets read back per scenario (transcript grade, SMS, office email, Slack, calendar, database rows, guest card, latency): see the sweep runner’s own README, referenced from this row set. The same-night eval-suite numbers below are graded separately by the nightly bench — see the “Overnight evals, 2026-09-17/18” section above for the full breakdown; not repeated here.
| Eval suite | Before | After |
|---|---|---|
| Western Slope shape | 7 of 16 (2026-09-18 ~03:30 MT, on main) | pending |
| Camellia shape | 1 of 16 (2026-09-18 ~03:30 MT, on main) | pending |
Draft from the tracker, needs Fede’s corrections. Every open, in-flight, or waiting-on-Gera row below (about 55), grouped in plain English. Each line links to its row further down this page.
Western Slope has tried to connect their shared leasing mailbox three times, all failing on our side. Below: what happened, why, and the fix we’re proposing — nothing changes until an option is picked.
What happened. Sep 11: the admin approval used the wrong Microsoft account, and the 30-minute link expired before anyone could retry — no retry existed until a fix shipped that day. Also Sep 11: Jay, the owner, connected his own calendar as a workaround; it works (checked again today), but tour booking doesn’t read a person’s calendar yet, so it does nothing. Sep 15, twice in two minutes: Kat, the leasing agent, clicked the shared “Connect leasing email” button every teammate can see. Microsoft approved it under her account, then Settings asked “which shared mailbox should Clara reply from?” with no field to answer (admin-only) and one button that just restarted the approval. She did everything asked; we never named the mailbox. Nobody was told — the only signal is a dismissable dashboard banner, and back office said “Mailbox approval granted” for a half-done setup.
Why a mailbox has to be named. A shared mailbox can’t sign in on its own. Approval always comes from a real person’s account, opening whichever mailboxes that person has access to — Microsoft never tells us which one is the leasing inbox, so we have to ask.
Where it stands now (checked live today, nothing changed). Kat’s and Jay’s stored approvals both carry the shared-mailbox permission and both work for their own inboxes, but neither can open the leasing mailbox: Microsoft answers “not found” — the same answer for any real mailbox an account has no rights to (control-tested), different from what it says for a mailbox that doesn’t exist. So the address is real, and neither account has been granted access to it in Western Slope’s Microsoft 365. We ruled out a mistake on our side. Nothing more to do until that access exists; once it does, the mailbox finishes from the approval already on file, with no action from Western Slope.
Two approvals, one expectation. Connecting the shared mailbox and connecting a person’s own calendar are different asks tied to different accounts, so anyone who does one assumes both are done. Fede’s ruling today: anyone can set up the shared mailbox, not just an admin; for a company like Western Slope it’s done once, at the company level; what decides success is whether Microsoft actually gave that account access, not the person’s role. No screen changes until an option below is picked.
| Option | What the person sees | Pros | Cons | Recommendation |
|---|---|---|---|---|
| A — access decides, not role | Asked for the shared mailbox address before the Microsoft step. After approval we check whether that account can open it, and only then say done; if not, the screen says exactly that. | Anyone can complete it; catches the real problem right away | One extra question before the Microsoft step | Recommended |
| B — admin-only finish (today’s design) | Only an admin sees the mailbox field, after approving | Simple | Exactly what trapped Kat; assumes the admin’s own account has mailbox access, which Western Slope shows isn’t guaranteed | — |
| C — company-wide access | Their Microsoft admin grants us access to any shared mailbox in the company, once | Most robust for several shared inboxes | Bigger trust ask, bigger build | Consider later |
| Any option — fix the two-approvals mix-up | After the mailbox step, the same screen says “this connected the leasing mailbox — your own calendar is a separate step,” shown as not done | Stops people assuming both are finished | — | Apply regardless of A/B/C |
Already fixed or in progress, none customer-facing: back office now looks up the right person for calendar status (merged today); the companies list will show “Off” instead of blank for an unconnected company (in flight); next, wording so a half-done mailbox says “approved by [name], mailbox not chosen yet” instead of implying nothing happened.
Read-only look at the shared leasing inbox from 2025-09-15 to 2026-09-15, before Clara answers anything from it. Everything below is aggregate; no names, numbers or message text left the mailbox. Question asked by Fede: are guest cards and website inquiries arriving, in what shape, how many, and does the reply logic built for Camellia work here.
Five facts. 13,765 emails arrived in the year; 2,248 of them (16%) were prospect inquiries, about 190 a month or 6 a day, far from a flood. Three of every four inquiries come from Zillow, and most of those arrive as Zillow’s conversation relay, which carries the prospect’s first name, the address and the message, but no phone or email. AppFolio guest-card emails exist as a source but stopped on 2025-11-29 (20 in the year, none since). Website inquiries come from AppFolio’s own website product and fell from 20–40 a month to 1–4 a month in June 2026, which looks like a settings change, not less traffic. Every lead source is a fixed template, so parsing is reliable once the template is known.
| Lead source | Inquiries in 12 months | What the email carries | Reply goes to | Camellia logic today |
|---|---|---|---|---|
| Zillow conversation relay (also carries Trulia and HotPads) | 1,571 | First name, property address, message; follow-ups arrive as replies in the same thread | A per-conversation Zillow relay address, not the prospect | Needs code. The parser matches on the sender but not on this template, so nothing is extracted and the message falls to generic triage. The relay domain is not on the known-relay list. |
| Zillow first contact | 205 | Name, email, phone, message, listing price and address | Prospect’s real email | Works. Verified on 3 real messages: all identity fields populated. |
| Direct email from a prospect | 221 (estimate) | Free text | Prospect | Works. Ordinary triage. |
| AppFolio website contact form | 171 | Name, email, phone, message, which form and page | Prospect’s real email | Works, minus the name. Email and phone are extracted; first and last name are not, on all 3 samples. Some of this volume is bot form-fill. |
| Apartments.com network (also carries Homes.com) | 52 | Name, phone, email, beds, unit, move-in date, comment, property address | Prospect’s real email | Works. Verified on 3 real messages. |
| AppFolio guest card | 20, none after 2025-11-29 | Name, email, phone, beds, move-in, budget, pets, the original source (this is the only place Apartment List leads appear) | Prospect’s real email | Works, but the pipe is off. Parses cleanly on 2 samples. The source field “Apartment List” is not recognised and is recorded as “website”. |
| Zumper, Rent., Craigslist | 0 | — | — | Not a source here. |
Which building the mail belongs to. Western Slope is one shared inbox in front of 70 buildings (49 houses, 20 apartment buildings, one company-wide portfolio row) with no per-building mailbox. The company-door rule merged on 2026-09-15 files every message on the portfolio row, which is correct. The next step, matching the address in the email to one of the 14 homes currently offered, failed on 5 of 5 real subjects: Zillow writes “486-32 1/8 Rd #4” where our roster says “486 32 1/8 Road, 4”, and the matcher does not bridge Rd/Road, the hyphen, or the unit notation. Needs code before anything is turned on.
The other 84% of the inbox. 2,389 emails (18% of everything) are Zillow market-update digests from a personal Zillow account tied to this address. The rest is AppFolio operational mail (insurance, e-sign, payments, bank feed, voicemail forwards, all from one sender address), utilities, vendor invoices, state filings, retail promos, and staff forwarding leads to each other. The existing triage records these and replies to none; that was verified against the categories, not just assumed. One gap: staff answer from this inbox themselves, and the “do not acknowledge what the team already reads” rule exists per building but not yet at company level.
How fast staff reply today. Only 125 of 2,248 inquiries (5.6%) show a reply sent from this inbox. Median 45 minutes, 90th percentile about 19 hours, a third of replies outside office hours. This undercounts Zillow badly: replies made inside Zillow’s own portal never appear in Sent Items. Inquiries peak Monday and 9am to 1pm Denver; about a third arrive before 9am or after 5pm, and weekends are 40% quieter.
| Category | Clara should | Rule |
|---|---|---|
| Zillow, Apartments.com, AppFolio guest card, AppFolio website form, direct prospect email | Answer | Sender is a known lead relay or the message parses as a lead; reply to the prospect’s real address when present, through the Zillow relay when not |
| Staff forwards, AppFolio operational mail, applicant and resident threads | Ignore (record only) | Sender is the company domain, an AppFolio system address, or a mail subdomain of AppFolio; existing triage already does this |
| Zillow market digests, listing reports, utilities, vendors, retail promos, state filings | Ignore | Sender domain deny list; the Zillow personal digests should simply be unsubscribed |
| Complaints, legal, owner mail (1 genuine complaint and 136 owner-entity notices in the year) | Leave to a person | Never answered by Clara; no forwarding mechanism is proposed for now |
What this means for go-live. The reply logic carries over: nothing in it is Camellia-specific. Three code items stand between the audit and a real inquiry being answered: the Zillow relay template, the address matcher, and the company-level quiet rule. Two items are Western Slope’s own settings and are Fede’s ask to make: turn AppFolio guest-card notifications to the leasing inbox back on (the richest lead shape, and the only one carrying Apartment List), and check why website-form notices dropped in June. Same-day duplicate inquiries across Zillow and Apartments.com happen on about 2% of active lead days; the existing per-property dedupe covers this as long as both land on the same row, which they now do.
Brief for Fede. Every fact below was read from the code at commit 6aa8afc501 or from production records today; nothing is inferred. File and line are given so anyone can check. Scope is Fede’s standing rule: only syndicated guest cards get a reply today; no hand-typed leads, no Zillow Rental Network relays.
TL;DR. Three separate pieces exist. (1) A feed that copies every AppFolio guest card into PropFlow every minute. (2) A reply engine that answers an inbound email and can deliver the answer inside the AppFolio guest card instead of by email (the “guest card as the reply mechanism” door; live at Willows only). (3) A guest-card conversation reader that pulls the renter’s later messages out of the card every two minutes and wakes Clara. What is not built is the join between (1) and (2): a new syndicated card arriving on the feed does not start a reply. Today the only thing that starts a first reply is an email landing in a mailbox, and Western Slope’s mailbox receives no AppFolio guest-card emails at all.
Fede paused the assigned-to-Clara build at 10:40 MT (“Let’s pause that build. For today only focus on creating the guest card”). PRs #9425 and #9483 are on hold. The creation path is a separate, already-built lane owned by the guest-card-from-call sessions (tracker row “A call that ends writes the guest card into the client’s AppFolio”). Read from production just now:
| Fact | Evidence |
|---|---|
| Company switch is ON at Western Slope since 09:35 MT today, armed by Trinity on Fede’s “now we are live”. | row CONFIG / GUEST_CARD_WRITE_FROM_CALLS#org_c42d9150…, enabled true, updatedAt 2026-09-18T15:35Z |
| Every Western Slope home’s own switch is ON (70 homes plus the front-door line), and Willows. | scan of LEASING_SETTINGS rows with guestCardWriteFromCalls = true |
| Proven once at Willows: card 107 created 2026-09-17 22:43 local. | tracker row prod_evidence; intent sent 2026-09-18T04:43Z |
| First real Western Slope call today tried to write a card and failed before reaching AppFolio: the intent was filed against the front-door line, which has no PMS mapping. | intent 2026-09-18T16:34Z, state failed, “property western-slope-front-door has no PMS configured yet”; fix open as PR #9490 (issue #9491); #9486 makes the write happen at call end instead of a 15-minute cron; #9492 turns the cron into a stuck-intent alert |
| Not yet verified: whether our Western Slope AppFolio login can create a card at all (it was set up read-only). No write has reached westernslopepm.appfolio.com yet. | no sent intent for the Western Slope org; account row not readable from this session |
What is missing for today, in order: merge #9490 so the card is filed against the home the caller discussed; a real call proves it (the after-call write is the proof); then confirm the AppFolio login can write. Nothing in the reply brief below is needed for this lane.
flowchart LR
AF[(AppFolio guest cards)]
subgraph FEED["1. Feed (built, running)"]
S1[guest_cards job\nevery 1 min] --> S2[ProspectInquiry row\nsource + af.* fields]
S2 -. "onFreshProspectMinted\ndeclared, never called" .-> X1((no reply))
end
subgraph EMAIL["2. Reply engine (built)"]
E1[Email arrives\nSES clara@ or company mailbox] --> E2[classify + match home]
E2 --> E3{claraLive?}
E3 -- no --> H[held: org_not_live]
E3 -- yes --> E4{messagingDelivery\n= pms?}
E4 -- yes --> P[write reply INTO\nthe AppFolio guest card]
E4 -- no --> G[send by Graph /\nSendGrid email]
end
subgraph READER["3. Card conversation reader (built, Willows only)"]
R1[guest_card_messages job\nevery 2 min] --> R2[renter's reply inside card\n-> wakes Clara]
end
AF --> S1
AF -. "notification email\n(only if AppFolio's own\ntoggle is on)" .-> E1
P --> AF
AF --> R1
R2 --> E2
style X1 fill:#fee,stroke:#c33
style H fill:#ffe9c7,stroke:#b45309
| Piece | What it does | Where (file:line) | State at Western Slope |
|---|---|---|---|
| Feed: card → PropFlow | Every minute, copies each AppFolio guest card into a ProspectInquiry row with its source and AppFolio ids. The AppFolio row has a Source field but no created-by field, so the feed alone cannot tell a syndicated card from a hand-typed one. | lambda/appfolio-sync/handler.ts:4218 (job), :4483 (writer call); src/lib/domain/pms/writers/guest-card.ts:1300-1550; src/lib/data/types.ts:709-747 (row shape) | Running. Cards are recorded. |
| Feed hook: new card → engage Clara | The hook that would start Clara on a fresh card is declared and deliberately never called (ADR-0094, observational posture). Only rental applications go through the engagement path. | guest-card.ts:360 (declared), :1773-1777 (no-op); pms-mint-engagement.ts:103-178; handler.ts:4092 (applications only) | Not wired. A new syndicated card produces no reply. |
| Per-property “act on leads” trigger (PR chain this week) | PR 1/3 detects and stamps a card assigned to Clara; PR 2/3 prepares the first touch without sending; PR 3/3 (the sender) is being built. | #9419 merged, #9422 merged, #9425 open, PR 3 in flight | Dark. Allow list names one JP&Co property and no Western Slope home. |
| Reply engine: inbound email → reply | An email in a mailbox is classified, matched to a home, drafted, then gated: company live switch first; then the property’s delivery mode picks the door. | lambda/inbound-processor/handler.ts:779 (live gate), :822 (delivery-mode gate), :874-900 (Graph send), :969 (SendGrid fallback) | Built. Every draft held: claraLive unset, so org_not_live. Zero sends, confirmed three ways today. |
| Reply door: inside the AppFolio guest card | When Property.messagingDelivery = 'pms', the reply is written into the guest card through the browser agent (POST /api/guest-card/message) instead of being emailed. AppFolio then delivers it to the renter. Fails with no_guest_card if no card matches the address. | src/lib/domain/properties/messaging-delivery.ts:37; agents/clara/lib/messaging/process-pms-email.ts:198; property-graph-sender.ts:916; src/lib/integrations/appfolio/message-sender.ts:112 | Built, not enabled. Only Willows (appfolio-45, org_sandbox) has messagingDelivery: 'pms' in prod. Western Slope and Camellia have no such setting (absent = direct email). |
| Card conversation reader | Every two minutes reads the renter’s and staff messages inside each opted-in property’s guest cards, files history silently, and wakes Clara only for messages after the history line. | lambda/appfolio-sync/handler.ts:4559-4632; guest-card-message-reader.ts:97; writers/guest-card-message.ts:304 (wake) | Built, not enabled. pmsMessagingSync.enabled true only at Willows (account jpco, Clara seat 250). |
| Zillow relay rule | An email from a convo.zillow.com relay is never answered by email; the code comment says those renters reach Clara through the AppFolio guest card instead. | agents/clara/lib/email/decide-email-send-mode.ts (zillow_relay_never_answered_by_email) | Active. This is why 596 Zillow relay emails in the leasing inbox were never answered. |
| AppFolio notification email | AppFolio emails a “New Lead” notice only for online guest cards and only to the vacancy-posting contact, when the user toggle is on. | AppFolio help articles (guest-card notifications) | Western Slope’s leasing@ inbox: zero such notices in four months (5,517 emails scanned). Camellia: 74 all-time, 0 in the last 14 days. |
flowchart TD L1[Syndicated lead\nZillow Rental Network / Apartments.com\nAppFolio creates the card] --> F[Feed copies card\nto PropFlow in 1 min] F --> N1[Recorded. No reply.\nHook not wired] L2[Zillow relay email\nconvo.zillow.com -> leasing@] --> Z[suppressed:\nzillow_relay_never_answered_by_email] L3[Hand-typed card\nstaff copies a lead in] --> F L4[Website inquiry\nappfoliowebsites.com -> leasing@] --> W[unrecognized by classifier\n21 in 4 months] L5[Direct renter email\nto leasing@] --> D[drafted, then held\norg_not_live] style N1 fill:#fee,stroke:#c33 style Z fill:#eee,stroke:#888 style D fill:#ffe9c7,stroke:#b45309
Western Slope production settings read today: claraLive unset, emailsEnabled false, smsEnabled false, observer BCC hello@propflowai.co, one mailbox attached (leasing@westernslopepm.com, connected), one calendar attached. No property carries messagingDelivery or pmsMessagingSync. Every held draft from 2026-09-16/18 was held by the company live switch, and the Zillow relay rule suppressed the rest.
flowchart LR
A[Syndicated card\narrives on feed] --> B{"MISSING 1\nis it syndicated?\nfeed row has no created-by"}
B -- yes --> C{"MISSING 2\nnew-card trigger\nhook declared, never called"}
C --> D[Draft first reply\nreply engine exists]
D --> E{"MISSING 3\nmessagingDelivery = pms\nat each WS home\n(and a Clara seat in their AppFolio)"}
E --> P[Reply written into\nthe guest card]
P --> R[Reader picks up\nrenter's answer\nMISSING 4: pmsMessagingSync\nnot enabled at WS]
R --> D
style B fill:#fee,stroke:#c33
style C fill:#fee,stroke:#c33
style E fill:#fee,stroke:#c33
| # | Gap | Evidence | Status |
|---|---|---|---|
| 1 | Telling a syndicated card from a hand-typed one on the feed. The feed row carries Source but not who created the card. AppFolio’s audit log has it (“Received” vs “Created”) but the feed does not read it. | types.ts:709-747; lead-shape audit above (66% of cards hand-typed, same Source labels) | Not built. A per-company “where leads come from” setting and a seam are in flight (session builders), design not yet reconciled with this brief. |
| 2 | A new card on the feed starting a first reply. The hook exists and is intentionally a no-op. | guest-card.ts:360, :1773-1777 | Not built. The assigned-to-Clara chain (#9419, #9422, #9425, PR 3) is the closest thing and is dark. |
| 3 | Writing the reply into Western Slope’s guest cards. The door exists but needs messagingDelivery: 'pms' per home and a Clara user seat in their AppFolio. Our access to westernslopepm.appfolio.com is read-only today. | messaging-delivery.ts:37; prod scan: only appfolio-45 set | Built, not enabled. Enabling is Fede’s call and needs write access. |
| 4 | Reading the renter’s answers back out of the card at Western Slope. | pmsMessagingSync enabled only at Willows | Built, not enabled. Same access question as 3. |
| 5 | Draft quality, independent of transport: day-class asks (“weekends”) got no slots; tour claims without a booking; duplicate person on the same Zillow relay address. | held drafts 09-16/18; call-integrity-directive.ts voice-only | #9475 open (prompt rules, Camellia-safe, auto-merge armed); grader check and duplicate-person fix in flight. |
What “already built” is true and what is not. True: the reply engine, the guest-card delivery door, and the card reader all exist and run at Willows. Not true: any path where a syndicated card by itself makes Clara reply. Even at Willows a reply starts only from something inbound: an email, or a renter’s message inside a card that the reader picks up (writers/guest-card-message.ts:6: only a new prospect reply wakes Clara). A new card with no message starts nothing, and AppFolio’s notification email does not reach Western Slope’s mailbox.
Brief standalone version: /a/syndicated-guest-card-replies
Decision. Fede's ruling, 2026-09-18 evening: Clara replies only to guest cards whose oldest activity-log entry is “Guest Card Received” by System. No setting, no value, no transition path. Staff-typed cards are parked. Once the client stops typing cards, every card passes on its own.
Fede’s ruling today: replies go only to guest cards a listing site created, never a staff-typed card. The AppFolio “New Lead” email is ruled out as the trigger (Western Slope gets none). Guessing “syndicated” from the Source label is also ruled out: 772 staff-created cards and 381 System-received cards carry the same labels (Zillow, Website). The one exact signal is the card’s first activity-log entry: “Guest Card Received” by System (listing site) versus “Guest Card Created” by a staff name. None of the four guest-card reports, and no Data API columns subset of them, carries a created-by column, so this has to come off the card page itself.
flowchart TD
A[guest_cards report\nevery 1 min] --> B{new card id\nnot seen before?}
B -- no --> Z[skip]
B -- yes --> C[feed calls the hosted robot\nservice's read endpoint\nread-only, logged-in session, 1-2 sec]
C --> D[read first activity-log entry]
D -- "System" --> E[createdBy: system]
D -- "staff name" --> F[createdBy: staff]
D -- "unreadable" --> U[origin_unknown\nparked, never replied to]
E --> G[onFreshProspectMinted\ntoday: no-op, ADR-0094]
F --> N[no reply]
G --> H{Organization.claraLive?}
H -- no --> N
H -- yes --> I[reply engine\ndelivery door: direct email today]
style F fill:#eee,stroke:#888
style U fill:#ffe9c7,stroke:#b45309
style N fill:#eee,stroke:#888
The feed calls the hosted robot service's read endpoint, a plain HTTP read on its already-logged-in session, about 1 to 2 seconds per call; a cold re-login happens rarely and takes up to 2 minutes once. Cost at Western Slope: 1 to 3 reads a day (new cards only). Idempotency key: card uuid. Failure mode: if the card can’t be read, the card is parked origin_unknown and never replied to—never guessed.
| Piece | State |
|---|---|
| Feed job (guest_cards, every 1 min) | Built — handler.ts |
| Robot service read endpoint | Built, wired to the feed, carries a creator field |
createdBy field on ProspectInquiry | Built, stamped on every new card |
Reply seam onFreshProspectMinted | Live: System-only rule plus the company live switch |
| First-touch composer | Finished, un-paused 2026-09-18 evening |
| Company live switch | Built |
| Replay grader, 47 syndicated cards | Runs through the real path; graded result published below |
Rollout. Ship dark: default off, a company setting. Replay the 47 syndicated cards from the dump through the mirror org, publish the graded result on this page, then Fede flips it on.
Three decisions, answered:
| Question | Answer |
|---|---|
| Robot reads each new card at Western Slope? | Yes, read-only, via the hosted robot service's read endpoint. |
| Un-pause the first-touch composer? | Yes, un-paused 2026-09-18 evening. |
| Zillow Rental Network System-received cards? | Excluded. |
Tonight’s build:
Update to tonight's replay: the composer PR (#9425 stack) had a bug where the org-not-live hold fired at PREP time, before any reply existed — so the first pass of this replay produced 47 held intents and zero drafts to grade. That is fixed (a small PR stacked on #9425): the hold check moved to the real send door, exactly where the inbound-email lane already does it, so the reply is composed FIRST and only then held. This replay was re-run against the sandbox mirror (org_ws_mirror_test, never the real client org) with the fix in place: all 48 syndicated cards from the last 30 days now produce a fully composed reply, held at the same org_not_live door every real property gets until Fede turns it on. Nothing sent. Every row below is Clara's actual composed draft — this is what Fede is inspecting before go-live.
| Check | Result |
|---|---|
| Syndicated cards in the 30-day window | 48 of 48 fed to the writer |
| Held drafts produced (composed reply body, intent + conversation, no send) | 48 of 48 |
| Cards that failed to sync or errored | 0 |
| Sends of any kind | 0 (mirror org is not live; production would hold the same way until Fede turns it on) |
| Draft graded PASS (names the home, no unkeepable promise, no PII leak) | 29 of 48 |
| Draft graded FAIL | 19 of 48 — mostly a follow-up reply that doesn't restate the home's name (a real defect for the team to look at, not a pipeline failure) |
The gap the first pass surfaced is closed: every held intent now carries a real composed body, not just an empty intent + conversation shell. The 19 grading failures are a genuine content-quality signal (mostly Clara's follow-up replies not re-naming the home on a repeat inquiry) for the team to address before go-live — not a sign the pipeline is broken.
| Home | Inquiry (excerpt) | Clara's draft (held, not sent) | Grade | Reason |
|---|---|---|---|---|
| 367 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 367 Ember Lane INACTIVE ? Inactive Created 19 days ago 367 Ember Lane, Grand Junction, CO 81501 Pr | Just want to check in, Troy — did you want to go ahead and take a look at the Ember Lane duplex, or would it help more if I flagged your original 1-bed/$900 search with the team to see what else might fit? Either way, I've got Saturday tour slots open if you'd like one. | PASS | names the home area, no promises, no PII leak |
| Ember Estates HZ - 361 Ember Ln | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ TENANT ? Inactive Created 11 days ago -- 08/27/26 Last Interest -- Desired Move I | Thanks for letting us know you'd like to move forward — and good news, an 18-month lease fits right in with the longer-lease terms we're currently offering here (14 to 18 months). I don't have an application link on file for Ember Estates HZ, so I've passed your request along to the leasing team and they'll get that over to you directly. Also, I want to be upfront — I can't confirm current unit availability from our records right now, so I've flagged that too. If you'd like, I'm happy to help set up a tour once we've got that sorted, or if you have a specific unit in mind, let me know and I'll make sure it's noted. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 16 days ago 565 Redcliff Cir, Ridgway, CO 81432 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 16 days ago 565 Redcliff Cir, Ridgway, CO 81432 | Hi there! Thanks for your interest in 565 Redcliff Cir, unit 585-201, at Northridge Apartments. I'm not able to pull up confirmed availability for that specific unit right now, so I've gotten your question over to the property team and they'll follow up with you directly on it. In the meantime, I noticed your original move-in date was 09/12/26, which has already passed — is that still your target, or has your timeline shifted? Also happy to get a tour on the books whenever you're ready — I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM if you'd like to come take a look at the community. | PASS | names the home area, no promises, no PII leak |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 17 days ago 2978 Krista Street, Grand Junction, CO | Thanks for reaching out about 2978 Krista Street! I'd love to help get you a tour set up. I don't have current pricing/availability details pulled up for this one right now, but I'll make sure our team confirms that for you. In the meantime, could you give me one specific day and time that works best for a tour? I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM if that helps — just let me know a time and I'll lock it in. Also, what's your name so I can get the visit set up under the right record? | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 15 days ago 565 Redcliff Cir, Ridgway, CO 81432 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 15 days ago 2978 Krista Street, Grand Junction, CO | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (2978 Krista Street) |
| 367 Ember Lane | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 367 Ember Lane INACTIVE ? Inactive Created 15 days ago 367 Ember Lane, Grand Junction, CO 81501 Pr | Hi! Thanks for your interest in the home at 367 Ember Lane. It's a brand-new 3-bedroom, 2-bath duplex, about 1,317 sq ft, listed at $2,750/mo, and it's available now. Right now there's a grand-opening special running: 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just cover electricity and internet). Would you like to come take a look? I've got openings tomorrow (Saturday) between 9 AM and 4:30 PM — let me know a time that works and I'll get you set up. Also, what name should I put this under, and roughly when are you hoping to move in? | PASS | names the home area, no promises, no PII leak |
| 2978 Krista Street | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 15 days ago 2978 Krista Street, Grand Junction, CO | ¡Hola! Con gusto le ayudo a programar un recorrido en 2978 Krista Street. Ahora mismo no tengo confirmada la disponibilidad exacta de unidades en el sistema, así que en cuanto tengamos una cita agendada, nuestro equipo puede confirmarle los detalles de la unidad de 3 recámaras que le interesa. Para mañana, sábado 19 de septiembre, tengo horarios disponibles desde las 9:00 AM hasta las 4:30 PM. ¿Le gustaría alguno de esos horarios, o prefiere otro día? También, ¿me podría decir su nombre para dejar todo registrado? | PASS | names the home area, no promises, no PII leak |
| 372 Ember Lane | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 372 Ember Lane INACTIVE ? Inactive Created 15 days ago 372 Ember Lane, Grand Junction, CO 81501 08 | Hi! Thanks for reaching out about 372 Ember Lane — happy to fill you in. It's a brand-new 3-bedroom, 2-bath duplex home, about 1,289 sq ft, with rent at $2,825/mo (security deposit also $2,825). It's got an open-concept layout, quartz counters, stainless steel appliances, an attached garage, and a private fenced backyard. Both cats and dogs are welcome there. Right now there's a Grand Opening special running — 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just cover electricity and internet). It's a short walk to Las Colonias Park and close to downtown Grand Junction, Colorado Mesa University, and the Riverfront Trail. The home is available now. Want to come see it? I've got openings tomorrow (Saturday) anywhere from 9 AM to 4:30 PM — just let me know what time works best for you. By the way, who am I speaking with? | PASS | names the home area, no promises, no PII leak |
| 367 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 367 Ember Lane INACTIVE ? Inactive Created 15 days ago 367 Ember Lane, Grand Junction, CO 81501 Pr | Hi Mathias, Thanks for the interest in 367 Ember Lane! One quick heads-up — this particular home is actually a brand-new 3-bedroom/2-bath duplex at $2,750/mo (1,317 sq ft), which is a bit different from the 1-bedroom around $1,200/mo you'd originally had in mind. We are running a grand opening special right now though — 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just be responsible for electricity and internet), which brings the effective cost down some. If a 3-bedroom at this price could still work for you — maybe splitting it with roommates, or just more space than planned — I'd be glad to get you in for a look. I've got plenty of openings tomorrow, Saturday September 19th, between 9 AM and 4:30 PM, and it's move-in ready now. If you're really set on something closer to a 1-bedroom at $1,200, just let me know and I can see what else might be a better fit for you. | PASS | names the home area, no promises, no PII leak |
| 372 Ember Lane | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 372 Ember Lane INACTIVE ? Inactive Created 14 days ago 372 Ember Lane, Grand Junction, CO 81501 08 | Hi Elizabeth, welcome to Grand Junction — that's exciting that you and your son just made the move from Texas! Yes, 372 Ember Lane is available now — it's a brand-new 3-bedroom, 2-bath duplex home at 1,289 sq ft, renting for $2,825/mo. Right now there's a Grand Opening Special running: 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just cover electricity and internet). It sounds like a great option while you two get settled and learn the area. I'd love to get you in to see it. What day and time works best for you for a tour? Just let me know your preferred day and time, and I'll get that tour set up for you! | PASS | names the home area, no promises, no PII leak |
| 372 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 372 Ember Lane INACTIVE ? Inactive Created 14 days ago 372 Ember Lane, Grand Junction, CO 81501 08 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (372 Ember Lane) |
| 2978 Krista Street | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 14 days ago 2978 Krista Street, Grand Junction, CO | Thanks for reaching out about 2978 Krista Street — I'd love to get you a tour of the 3BR/2.5BA home! Could you let me know a specific day and time that works best for you? I've got openings tomorrow (Saturday) from 9 AM to 4:30 PM if that helps, or just let me know what day/time you'd prefer and I'll find something that fits. | PASS | names the home area, no promises, no PII leak |
| 460 32 1/8 Road | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 460 32 1/8 Road INACTIVE ? Inactive Created 13 days ago 460 32 1/8 Road, Clifton, CO 81520 08/25/2 | Hi there! Thanks for your interest in the townhome at 460 32 1/8 Road in Clifton. Here's what I've got on it: it's a 2 bed, 1.5 bath townhome, about 1,728 sq ft, renting at $1,300/mo with a $1,350 deposit. It's got an open living space, a good-sized kitchen, a fenced backyard backing to a quiet pasture, and washer/dryer included. Cats and dogs are both welcome. It's listed as available now. Are you still looking to move in around early September, or has your timeline shifted? And would you like to come take a look? I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM — just let me know what time works for you. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments - 585-201 | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 13 days ago 565 Redcliff Cir, Ridgway, CO 81432 | Thanks for reaching back out! I'd love to help get a tour set up for the one-bedroom at 585-201. I don't have current confirmed availability details on that specific unit pulled up on my end just yet, so I'll have that verified before your visit. In the meantime, let's get a time locked in — I've got openings tomorrow (Saturday) anywhere between 9:00 AM and 4:30 PM. What time works best for you? Also, could I get your name for the tour booking? | PASS | names the home area, no promises, no PII leak |
| 367 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 367 Ember Lane INACTIVE ? Inactive Created 13 days ago 367 Ember Lane, Grand Junction, CO 81501 08 | Hi! Great to hear you'd like to move forward with 367 Ember Lane. I don't have the application link on file just yet, so I've looped in the property team to get that over to you. In the meantime, here's a quick recap on the home: it's a 3-bed/2-bath, 1,317 sq ft, $2,750/mo with a $2,750 deposit. Right now there's a grand opening special — 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just cover electricity and internet). It also comes with an attached garage and a private fenced backyard. On the pet front, both cats and dogs are welcome — you mentioned "a pet" but didn't specify the type, so let me know what kind you have and I can confirm anything specific. I don't have details on central AC handy, but I'll flag that with the team too. If you'd like to see the place in person before applying, I've got tour times open tomorrow (Saturday) between 9 AM and 4:30 PM — just let me know what time works, or feel free to wait for the application from the team. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 14 days ago 565 Redcliff Cir, Ridgway, CO 81432 | Hi there! I wanted to follow up on your interest in Northridge Apartments — I see you'd inquired about our one-bedroom (unit 585-201) with a move-in around the end of August. I don't have current confirmed availability pulled up on my end right this moment, but I'd love to get you scheduled to come take a look and get you the latest details in person. I've got tour openings tomorrow, Saturday September 19th, from 9 AM to 4:30 PM — plenty of slots throughout the day. Would any time in there work for you, or is there a different day you'd prefer? Also, are you still looking to move in around that same late-August/early-September timeframe, or has your timeline shifted? | PASS | names the home area, no promises, no PII leak |
| 2978 Krista Street | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 13 days ago 2978 Krista Street, Grand Junction, CO | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (2978 Krista Street) |
| 372 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 372 Ember Lane INACTIVE ? Inactive Created 12 days ago 372 Ember Lane, Grand Junction, CO 81501 08 | Thanks so much for your interest in 372 Ember Lane! Here's what's on file for these brand-new duplex homes: 3 bedroom / 2 bath, 1,289 sq ft, with market rent at $2,825/mo (deposit $2,825). Each home comes with an attached garage, a private fenced backyard, and designer kitchen finishes. Right now there's a Grand Opening special running — 6 weeks free rent, plus water, sewer, trash, and gas included for your first year (you'd just cover electricity and internet). I want to make sure I give you accurate, up-to-the-minute numbers on exactly which homes are ready to move into right now, so I've looped in the leasing team to confirm current availability for you — they'll follow up directly. In the meantime, would you like to get a tour on the calendar? I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM — just let me know a time that works and I'll get you booked. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 11 days ago 565 Redcliff Cir, Ridgway, CO 81432 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| Northridge Apartments | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 11 days ago 565 Redcliff Cir, Ridgway, CO 81432 | Hi again! I saw you'd looked at the one-bedroom here at Northridge Apartments (565 Redcliff Cir) — just wanted to check back in and see if you're still on the hunt for a place. I'm not able to pull a fully confirmed live availability count right now, so I don't want to give you a wrong number — but I can get our team to double-check and confirm current 1BR options for you. In the meantime, if you'd like to come take a look in person, I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM — just let me know what time works best and I'll get you set up. | PASS | names the home area, no promises, no PII leak |
| 374 Ember Lane | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 372 Ember Lane ? Active Created 11 days ago 372 Ember Lane, Grand Junction, CO 81501 08/27/26 Last | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (374 Ember Lane) |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 10 days ago 2978 Krista Street, Grand Junction, CO | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (2978 Krista Street) |
| 566 Placer Street | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 566 Placer Street INACTIVE ? Inactive Created 5 days ago 566 Placer Street, Grand Junction, CO 815 | Hi Tiffany! Thanks for your interest in 2978 Krista Street — that's a 3BR/2.5BA home, about 1,332 sq ft, listed around $1,950/mo. I'd love to get you a tour set up for that one. Can you give me a specific day and time that works best for you? Once I have that, I'll get it booked. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments APPLICATION COMPLETE ? Application Completed Created 9 days ago 565 Redcliff | Hi there! I can see you've got a completed application on file for the one-bedroom at 585-201 here at Northridge Apartments, with a move-in date around September 1st. Congrats on getting that squared away! Is there something specific I can help you with — next steps on the application, questions about the unit, or anything else? | PASS | names the home area, no promises, no PII leak |
| 239 S Elm Street | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Showing Scheduled 09/09/2026 @8:45 AM MDT for 239 S Elm Street - 2. View Select inquiry-list-item 239 S Elm Street SHOWING | Hi there! I can see you've got a showing on the books for Unit 2 here at 239 S Elm Street — a 2 bed/1 bath at $1,550/mo, with a September 1st move-in noted. Is there anything you'd like to update, or any questions I can help with in the meantime? | PASS | names the home area, no promises, no PII leak |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street INACTIVE ? Inactive Created 8 days ago 2978 Krista Street, Grand Junction, CO 8 | Thanks for reaching out about the home at 2978 Krista Street! I'd love to get your tour set up. Could you let me know a specific day and time that works best for you? Just as an example, I've got openings tomorrow (Saturday) from 9 AM to 4:30 PM if that helps. | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Showing Scheduled 09/09/2026 @6:00 PM MDT for Northridge Apartments - 565-102. View Select inquiry-list-item Northridge Apa | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| 2863 Florida Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Pomona Park Townhomes ? Active Created 8 days ago 624 Eisenhauer Street, Grand Junction, CO 81505 | Hi Kimberly, thanks so much for reaching out — and congrats on the quick house sale, that's exciting! Unit 300 at 624 Eisenhauer (1,528 sq ft, 3BR/2.5BA, listed at $2,495/mo) looks like it could be a great fit for you. I want to make sure I give you accurate, up-to-date info on availability for an October 1st move-in and on the pet policy for your two dogs and cat, so I've passed those details along to the leasing team to confirm directly with you. In the meantime, I'd love to get a tour on the books so you can see the place. I've got openings tomorrow (Saturday) anywhere from 9 AM to 4:30 PM — would a morning or afternoon time work better for you? | FAIL | does not reference the home (2863 Florida Street) |
| 239 S Elm Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 239 S Elm Street INACTIVE ? Inactive Created 9 days ago 239 S Elm Street, Fruita, CO 81521 08/30/2 | Thanks for reaching out about Unit 2 at 239 S Elm Street! I don't have confirmed availability details for that unit pulled up on my end right now, so I've passed your request along to the property team and they'll follow up with you on the specifics, including rent and whether it'll be ready for your October 1st move-in. In the meantime, if you'd like to get a tour on the calendar, I've got plenty of openings on Thursday, October 1st between 9 AM and 4:30 PM — just let me know a time that works and I'll get you set up. And what name should I put this under? | PASS | names the home area, no promises, no PII leak |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ INACTIVE ? Inactive Created 7 days ago 2858 C 1/2 Road, Grand Junction, CO 81501 | Hi Paul, thanks for reaching out about Ember Estates HZ! I don't have current unit availability pulled up on my end right now, but I want to get you on the calendar for a viewing. Could you let me know one specific date and time that works best for you? Once I have that, I'll get it booked. | PASS | names the home area, no promises, no PII leak |
| Pomona Park Townhomes - 300 | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Pomona Park Townhomes INACTIVE ? Inactive Created 7 days ago 624 Eisenhauer Street, Grand Junction | Hi Arianna, thanks for your continued interest! Just to flag — Pomona Park Townhomes is actually a 3-bedroom, 2.5-bath townhome community (1,528 sq ft, $2,595/mo), so it's a bit different from the 2-bedroom you were originally looking at. Good news on the dog front though — we're pet-friendly for both cats and dogs here. I wasn't able to pull a live confirmation on current unit availability, so I've gotten the team looped in to verify that for you. In the meantime, since your original September 1st move-in has passed, when are you now hoping to move? And if you'd like to come see the place, I've got plenty of openings tomorrow (Saturday) between 9 AM and 4:30 PM — just let me know a time that works. | PASS | names the home area, no promises, no PII leak |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ INACTIVE ? Inactive Created 7 days ago 2858 C 1/2 Road, Grand Junction, CO 81501 | Hi! So glad you're excited about Ember Estates HZ — thank you for reaching out. I don't have an online application link on file for this property, so I've passed your info along to the team so they can help you with your application directly. In the meantime, let's lock in your viewing — what specific date and time works best for you? | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments - 585-201 | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments INACTIVE ? Inactive Created 6 days ago 565 Redcliff Cir, Ridgway, CO 81432 0 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments - 585-201) |
| 460 32 1/8 Road - 3 | Showings (1) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 460 32 1/8 Road APPLICATION COMPLETE ? Application Completed Created 6 days ago 460 32 1/8 Road, C | Just let me know what date and time work best for you, and I'll get the tour set up right away! | FAIL | does not reference the home (460 32 1/8 Road - 3) |
| 239 S Elm Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 239 S Elm Street APPLICATION COMPLETE ? Application Completed Created 5 days ago 239 S Elm Street, | Hi there! I can see you've got a completed application on file for Unit 2 here at 239 S Elm Street — the 2BR/1BA at $1,550/mo, with a move-in around 09/08/26. What can I help you with today — are you looking to schedule a tour, or do you have a question about your application? | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments ? Active Created 4 days ago 565 Redcliff Cir, Ridgway, CO 81432 09/03/26 Las | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ INACTIVE ? Inactive Created 5 days ago 2858 C 1/2 Road, Grand Junction, CO 81501 | Hi Sylvia! Thanks so much for your interest in Ember Estates HZ — I'd love to get you in for a tour. Rather than accepting things through Zillow, the easiest way is to just pick a day and time directly with me here. I've got openings tomorrow, Saturday September 19th, from 9 AM to 4:30 PM — morning or afternoon both work. What day and time would you like to come by? | PASS | names the home area, no promises, no PII leak |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ ? Active Created 5 days ago 2858 C 1/2 Road, Grand Junction, CO 81501 09/03/26 La | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Ember Estates HZ) |
| Northridge Apartments - 575-204 | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments ? Active Created 4 days ago 565 Redcliff Cir, Ridgway, CO 81432 09/03/26 Las | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments - 575-204) |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street NEW ? Active Created 4 days ago 2978 Krista Street, Grand Junction, CO 81504 09 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (2978 Krista Street) |
| Northridge Apartments - 585-201 | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments NEW ? Active Created 2 days ago 565 Redcliff Cir, Ridgway, CO 81432 09/05/26 | Hi Sarah! Thanks for reaching out about unit 585-201. I've got your interest noted, and I can see tour openings starting tomorrow, Saturday September 19th, with times from 9 AM through 4:30 PM. What day and time would work best for you? | PASS | names the home area, no promises, no PII leak |
| Northridge Apartments | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Northridge Apartments NEW ? Active Created 3 days ago 565 Redcliff Cir, Ridgway, CO 81432 09/05/26 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Northridge Apartments) |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ NEW ? Active Created 1 day ago 2858 C 1/2 Road, Grand Junction, CO 81501 09/06/26 | I've noted that for the property team. I don't have confirmation anyone's picked it up yet, so I can't give you a timeframe just yet. | FAIL | does not reference the home (Ember Estates HZ) |
| 460 32 1/8 Road | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 460 32 1/8 Road NEW ? Active Created about 23 hours ago 460 32 1/8 Road, Clifton, CO 81520 09/06/2 | Hi Samantha! Thanks for reaching out about the home at 460 32 1/8 Road. Here's what's on file for it: it's a 2 bed, 1.5 bath townhome, about 1,728 sq ft, renting for $1,300/mo with a $1,350 deposit, and it's available now. It's got an open living layout with a nice nook, good-sized kitchen, a fenced backyard backing up to a quiet pasture, a newer roof, and washer/dryer included. Both cats and dogs are welcome there too. I noted you're hoping to move in around October 18th — since the home is actually available now, we could get you moved in sooner if that works better, or stick with your target date. Would you like to come take a look? Let me know a day and time that works for you and I'll get you set up. | PASS | names the home area, no promises, no PII leak |
| 2978 Krista Street | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item 2978 Krista Street NEW ? Active Created about 3 hours ago 2978 Krista Street, Grand Junction, CO 8 | All set — just let me know a date and time that works for you and I'll lock in the tour! | FAIL | does not reference the home (2978 Krista Street) |
| Ember Estates HZ | Showings (0) Attachments (0) Activity Inquiries Show inactive inquiries Bulk Actions New Inquiry Select inquiry-list-item Ember Estates HZ NEW ? Active Created about 10 hours ago 2858 C 1/2 Road, Grand Junction, CO 81501 | Hi Grady! Thanks for reaching out about Ember Estates HZ — I'd love to get a tour on the books for you. Could you give me a specific day and time that works best? Once I have that, I'll get it locked in. | PASS | names the home area, no promises, no PII leak |
Read-only audit of 1,172 AppFolio guest cards, 5,517 leasing-inbox emails, and 47 live “New Lead” notices, to answer: how much of Western Slope’s lead volume is actually syndicated through AppFolio, versus staff hand-typing a Zillow lead into a guest card. AppFolio’s own audit log distinguishes the two: “Guest Card Received” means AppFolio created the card itself (real syndication); “Guest Card Created” by a named staffer means a human typed it in by hand, almost always retyping a Zillow lead.
1. Listing inventory. 239 total units, 54 available, across 19 addresses. Of those, 10 show real syndication signal, 2 (Lincoln Apartments, Flats on Elm) are 100% hand-copied with zero syndicated leads, and 5 show no guest-card activity in 90 days despite being marked available.
| Property | Units available | Syndicated? | Cards, last 30d | Cards, last 90d |
|---|---|---|---|---|
| Ember Estates HZ | 26 | Yes — 8 of 10 (90d) auto-received | 9 | 10 |
| Northridge Apartments | 8 | Yes — 25 of 28 auto-received | 15 | 28 |
| Pomona Park Townhomes | 3 | Partial — 3 of 26 auto-received | 3 | 26 |
| 460 32 1/8 Road | 2 | Partial — 15 of 31 auto-received | 8 | 31 |
| 486 32 1/8 Road | 1 | Partial — 2 of 12 auto-received | 5 | 12 |
| 239 S Elm Street | 1 | Partial — 4 of 9 auto-received | 5 | 9 |
| 566 Placer Street | 1 | Partial — 2 of 7 auto-received | 4 | 7 |
| 2980 Emerald Circle | 1 | Partial — 1 of 6 auto-received | 2 | 6 |
| 2863 Florida Street | 1 | Partial — 4 of 6 auto-received | 1 | 6 |
| 367 Ember Lane | 1 | Partial — 13 of 18 auto-received | 7 | 18 |
| Lincoln Apartments | 1 | No — all 19 cards hand-typed | 11 | 19 |
| Flats on Elm | 1 | No — all 9 cards hand-typed | 4 | 9 |
| 2841 Morningside Court | 1 | No — 4 cards, all hand-typed | 0 | 4 |
| 2978 Emerald Circle | 1 | No — 2 cards, both hand-typed | 1 | 2 |
| 2206 N 22nd Street, 2982 Emerald Circle, 3138 Perkins Drive, 630 S 7th Street, 361 Ember Lane | 1 each | Unknown — zero cards in 90 days | 0 | 0 |
2. Lead channels, last 90 days. Of 282 guest cards, 42% (118) were auto-created by a real syndicated feed and 56% (159) were typed in by hand; 12-month totals show hand-typing has been the majority path most of the year (772 of 1,153 clean-origin cards). “Zillow” (non-network) as a source label is essentially 100% hand re-entry (328 of 329); “Zillow Rental Network” is 79% hand-typed (204 of 258). Roughly 45% of the 2,036 Zillow-domain emails into leasing@ over 4 months are real lead threads, the rest are Zillow’s own digests. At least 10 confirmed cases of staff replying to a prospect directly inside a Zillow thread instead of AppFolio, so that conversation may never fully land in AppFolio.
| Month | Auto-created (real syndication) | Hand-typed by staff | No clear origin |
|---|---|---|---|
| 2026-06 | 36 | 66 | 2 |
| 2026-07 | 27 | 55 | 1 |
| 2026-08 | 66 | 74 | 2 |
| 2026-09 (partial) | 14 | 18 | 1 |
| 90-day total | 118 (42%) | 159 (56%) | 5 |
3. MVP scope math. Scoping Clara to “Guest Card Received” (auto-created) cards only, regardless of source label, would show her about 42% of last-90-day volume (118 of 282 cards) and naturally excludes every hand-typed Zillow lead, referral, and shared-application-link lead. “Website” leads are also mixed — 61% (57 of 94) auto-created, 38% hand-typed — and should be scoped the same way: in only when AppFolio auto-created the card.
4. Data-quality notes. No true duplicates were countable (Zillow relay mail carries scrubbed address/name tokens with no join key back to the guest card). 5 of 282 cards (90-day) have no clear origin event. 63 of 1,171 cards (5.4%) show a repeat inquiry on the same card. Only 7 of 1,172 cards (0.6%) show a discrete assignment event — the earlier verbal count of “13 of 1,147 assigned” does not reproduce from structured events and should be re-confirmed before reuse. The occupancy report sums to 239 total units / 54 available, not the “108 across 478” figure previously cited — flagged, not reconciled. 5 “available” addresses show zero guest-card activity in 90 days (2206 N 22nd St, 2982 Emerald Circle, 3138 Perkins Drive, 630 S 7th St, 361 Ember Lane) — likely stale vacancy flags or genuinely unmarketed.
5. Top 5 recommendations for go-live.
Western Slope’s people have tried to connect a Microsoft calendar or mailbox four times since Sep 11. None of it is their doing, and none of it needs anything from them. This section says what actually broke, how we know, and which fix makes the next attempt work on its own.
The headline: since 10:32Z this morning, production could not record a Microsoft connection at all. A change to how connection records are filed added a database operation the production account is not permitted to perform, so the write that records a connection — or a pending approval, or even a failure — throws instead of saving. Nobody noticed for thirteen hours because nobody at a customer completed a connect in that window. Two of the four attempts (Jason at 22:24Z, Kat at 22:26Z) fell inside it, and neither left a trace of any kind. That one is fixed and deployed as of 00:42Z tonight.
The second theme is that three separate things were each blamed on the customer’s Microsoft setup and none of them were. Jay’s calendar was never revoked — we were asking Microsoft to renew it with permissions he had never been asked for. The back-office page that read “Not connected” for him was looking him up by the wrong id. And the company mailbox has said “waiting for a Microsoft admin” since Sep 11 even though nothing in the product has ever asked their admin anything.
| Item | Root cause | Evidence | Fix | State | What makes their next attempt just work |
|---|---|---|---|---|---|
| Production cannot record a Microsoft connection | A change to how connection records are filed, merged 2026-09-14 10:32Z, added a conditional database check the production account has no permission for. Every write that records a connect, a pending approval, a failure or a reconnect now throws. | Sentry 7732381599, dynamodb:ConditionCheckItem denied on propflow-prod; one occurrence, 2026-09-14 23:59:21Z, on our own Microsoft test tenant. Introduced by #8406, commit 1d4ead6dae. Last connection successfully recorded anywhere: 2026-09-11 22:46:37Z. |
#8541 | Merged 2026-09-15 00:42Z, not yet proven in production | Already done, as of 00:42Z tonight. A consent that comes back from Microsoft is saved again instead of thrown away. Every connect between 10:32Z and that deploy was lost. |
| Kat’s calendar connect went nowhere | She was shown the calendar step and sent to Microsoft; Microsoft never redirected back to us. Because nothing logs an attempt, we cannot tell from our side whether the window was closed, blocked, or stopped at Microsoft. | Her account carries the calendar-welcome stamp 2026-09-14 22:26:07.172Z and no calendar record of any kind, live or historical. No error was reported for her account in the 90 minutes around it, and the 23:59Z failure above is the only occurrence of that failure ever — so her browser never reached our callback. | #8541 merged; #8542 open | Half done | #8541 already makes a returning consent save. #8542 adds the attempt log, so one that dies at Microsoft is visible instead of silent. |
| Jason never got a calendar connected | Same shape as Kat: offered the step, no attempt recorded anywhere. He finished the rest of onboarding normally. | Signed in 22:23:31Z, set up his second factor 22:24:07Z, finished the teammates step 22:24:33Z, was offered the calendar 22:24:41Z. He has no calendar record and no credential. His email is on the 9thpathrealty.com domain, not Western Slope’s. |
#8541 merged; #8542 open | Half done | Same two fixes, one of them already in. Nothing about his account or his Microsoft tenant is in the way. |
| Jay’s calendar was never revoked | Our token renewal asked Microsoft for company shared-mailbox permissions that his personal calendar consent never included. Microsoft answered “not consented”, and we read that answer as “the customer revoked us”. | Read-only probe, 2026-09-14: asking with the company permission set fails with AADSTS65001; asking with the personal set succeeds and returns Calendars.ReadWrite User.Read. His record still reads connected, stamped 2026-09-11 22:46:37.400Z, with no failure ever written to it. No surface in the product could have shown “revoked” this morning — that word came from a diagnostic we ran, not from a page. |
#8525 | Merged 23:38Z, not yet proven in production | Already fixed in code. His calendar has been usable the whole time; nothing on their side ever needed touching. |
| The back-office page reads “Not connected” for Jay | The staff page looks a teammate’s calendar up by their sign-in id instead of their person id, so it finds nothing and reports nothing found as nothing connected. | His calendar record is filed under person pers_224f0528…; the page queries with login b5399836…. Confirmed the same mistake exists nowhere else in the code. |
#8528 | Open, in CI | Nothing for the customer at all — this is a wrong reading on our own screen, not a broken connection. |
| The company mailbox has said “waiting for a Microsoft admin” since Sep 11 | Two things at once. We write “waiting for admin approval” on the way out to Microsoft, before Microsoft has said anything — so the wizard reports a request that was never made. And the product has no code path that asks a Microsoft admin for anything: the function that builds that request exists and has no caller. | Both company records (mailbox and calendar) still read pending_admin_approval, stamped 2026-09-11 19:28:05.570Z, with no credential behind them and nothing written since. Their Sep 11 attempt started 19:28:05Z and the browser came back at 22:41:26Z, three hours later, past the link’s life (Sentry 7727344412). buildAdminConsentUrl still has no caller on main. |
None open | Not started | A connect flow that tells the truth about what it did, and that actually sends their Microsoft admin a request. Both still to be built. |
| The permissions the company flow asks for are not declared on our Microsoft app | The company flow requests three shared-mailbox permissions our app registration does not list, so Microsoft’s screen could never have granted them even if an admin had reached it. | Their Microsoft tenant holds exactly one consent record for us, read fresh tonight: tenant-wide, scope Calendars.ReadWrite User.Read, created 2026-09-11 22:46:34Z by Jay’s calendar consent. No mail permission has ever been consented in their tenant, and we hold no application-level permission there. |
App registration change (approved, in progress) | In progress | Once the three permissions are declared, the company screen can show them and an admin can grant them in one pass. |
| Camellia is not a precedent for the company flow | Camellia’s mailbox was not consented by a passing user on the company flow. It was connected in April through the older per-property flow, by signing in as the mailbox account itself, and their Microsoft tenant carries a tenant-wide grant that includes the mail permissions. | Property record connectedAt 2026-04-06 18:29:40.926Z; the stored token is an interactive human sign-in as the mailbox account with password and second factor. Their tenant’s single consent record for us is tenant-wide and covers Mail.Read Mail.ReadWrite Mail.Send Calendars.ReadWrite User.Read. |
n/a | Understood | Nothing to copy: that route means holding a customer’s mailbox password, which we will not do. The company flow has to work on its own. |
| The staff screen said Clara is switched off for them | The back-office screen showed a sentence about our team turning Clara on after a dry run to admins of companies that are not live. It was not true. | Copy removed; the box now appears only for a company that really is live. | #8526 | Open, in CI | Nothing — this is our own screen, and no behaviour changes with it. |
What we could not verify. Three things. We could not read the request log for Kat’s and Jason’s attempts: the only log surface reachable from a session tails live traffic, and the historical view is a browser-only console, so the 22:24–22:26Z window is gone for us. We cannot say whether Microsoft showed Kat anything, only that it never came back. And we cannot read the consent record on Camellia’s Microsoft tenant the same way as Western Slope’s — Microsoft refused the tenant-wide query and only answered the one about our own app, which is why the Camellia row reads tenant-wide rather than naming who granted it. Everything else in the table above is from production data, Sentry, Microsoft’s own answers, or the code on main.
The order that matters. #8541 landed at 00:42Z, so the product can record a connection again — that was the one making everything else invisible. Next is #8542, so the next attempt leaves a trace whatever happens to it. #8525 (merged) and #8528 (open) close out the two things that were misread as the customer’s fault. The company mailbox, which is what Western Slope actually needs, is behind the app registration change plus a flow that genuinely asks their admin — that one is still to be built.
Every row opens: when it was added, why it exists, and the links that prove it. Rows waiting on a human carry a Decide → link straight to the answerable question on the decisions page. Statuses are re-derived from live PR, decision and prod-evidence state by bin/refresh-trackers; nothing here is typed by hand, and merged is not shipped until a prod_evidence permalink says the fix was exercised in production.