Ember Estates case record. Superseded 2026-10-29 by Home Resolver: lay of the land.
Results in, 4 asks open · 2026-10-28 · team only · no code PR until Fede says go
"The issue is that we couldn't locate the property."
Fede, 2026-10-28
Open asks for Fede
| The problem | Choices | We pick | If you say nothing |
|---|---|---|---|
| 1. Website contact forms. Western Slope's website "Contact Us" leads: 7 since Oct 3, none answered by Clara (dropped as an auto-reply before reading; fix in progress). Situs had 3. | A: Clara answers them. B: leave them. | A | It ships anyway: a dropped lead is a bug. |
| 2. Ember homes stored twice. All 27 Ember homes exist twice: in the community (listing, price) and as a house (lease). More | A: the house is the home. B: the community copy is; move every lease. C: keep both, patch links. | A | Clara keeps mixing the copies' prices. |
| 3. Build the home-finder. Clara misses the home when a lead types a street we do not store (Ember, 3 times). Tested on a year of leads: right home twice as often, never wrong. More | A: the one small fix (answer from the handed property, hand unit streets, tools take the thread's property, search only with no property). B: the four-step home-finder as designed. | A: small fix | Nothing ships; misses continue. |
| 4. Two unmatched names. Two leads named Barcelona by its owner's company name and a listing site's nickname. More | A: add both to Barcelona's knowledge base. B: leave them. | A | Those leads stay unmatched. |
Withdrawn Oct 28 evening. The numbers in this table and the "What it means" paragraph below were a text-only simulation scored on rows that do not occur in production; see Second pass. Kept for the record only.
| Today | New rules | Rules + model on leftovers | |
|---|---|---|---|
| Right home, of the 500 leads whose text names a home | 47% (237) | 90% (452) | 92% (459) |
| Right home, of all 916 leads | 26% (237) | 49% (452) | 50% (459) |
| Wrong home | 0% (0) | 0% (0) | 0% (0) |
| Known misses still missed (% of 251) | 93% (234) | 4% (9) | 0.8% (2) |
What it means: 416 of the 916 leads (45%) are guest cards whose text names no home at all ("can I schedule a time to see this?"). Those are not a matching problem: AppFolio already filed each card under its property and that is where the home comes from. Of the 500 leads whose words do name a home, the rules find it for 92%, up from 47% today, and never pick a wrong home. The 41 still open: 13 land on an Ember sibling (the Ember decision), 20 name nothing specific ("the 205 floor plan", "Lakewood, CO 80214"), 4 carry a Zumper listing id no past card taught us, 2 need an alias we do not have, 2 have unknown truth.
Fede's read: guest cards arrive with the home, and Clara is handed the property, so no lookup is needed. An independent pass over the real data confirmed it. The earlier numbers scored text-only rows that never occur in production.
| What went wrong | Leads | Detail |
|---|---|---|
| Reply looked the home up by name although the thread already had the property | 5 people (6 events) | Ember 3, Northridge 2 |
| Dropped before any matcher ran | 19 | Website contact form 10, AffordableHousing 6, lead-scope 3 |
| Email with no card, misfiled on the front door | 6 | 5 at Western Slope, 1 at Situs |
| Case | Real event? | Thread had the property? | Fixed by answering from the handed data? |
|---|---|---|---|
| Ember, Oct 12, Alec B. | Yes | Yes | Yes (unit streets also let Clara confirm the address) |
| Ember, Oct 26, Shannon W. | Yes | Yes | Yes |
| Ember, Oct 28, Micheal M. | Yes | Yes | Yes |
| Northridge, Oct 7, Thomas R. | Yes | Partly (tagged "likely") | Yes, if the tagged property's units are handed |
| Northridge, Oct 28, Breck L. | Yes | Yes | Yes (the application takes the thread's property, not a text reference) |
| Lincoln, 1456 Bunting, Sep 15 and 17 | Yes (email, no card) | No | No, it is filing; the Oct 1 fix covers it |
| Situs Aspen Leaf Apartments, Oct 27 | Yes (email, no card) | No | No, it is filing; a separate fix is open |
| Flats on Elm 1250 | No, made up | n/a | n/a |
| 18 Situs fixture cases | No: AppFolio filed each correctly | Yes | Nothing to fix on this path |
Of 38 "known misses", 8 were real events. 6 of those are the same mistake. The "251 known misses, 93% missed" counted test rows, not leads.
Throw out: the 916-row "right home" rate (26% to 50%), the 251-row "known misses" rate, the Situs router 35 of 48. Keep: the 38 cases as a regression list split real / simulated / synthetic, the 50 of 53 email filing number, and the mirror and unit facts.
Report: /Users/federicochapa/agents/003/reports/Lead-to-home failures second pass 2026-10-28.md. Scripts 01 to 08 in resolver-poc/second-pass/.
Percent of 916 leads: 974 real leads and named cases at Western Slope, Situs and JP&Co, minus JP&Co's 58 emails (the mailbox already files them; the new name rule matches all 58). Known misses: percent of the 251 still missed today. 13 Ember parent-or-sibling picks count as neither right nor wrong. Source: resolver-poc/summary-for-fede.md.
| Today | Pick A planted | |
|---|---|---|
| Known misses still failing on the channel they happened on (of 16) | 16 | 10 (9 on email filing) |
| False matches on the year's corpus | 0 of 793 | 0 of 793 |
| Situs mailbox router: cards filed on the front door | 35 of 48 | 35 of 48 |
Source: property-locate/results/before-2026-10-28.md. Detail in section 6 and section 7.
Acceptance bar (Fede, Oct 28): "whatever solution here needs to cover 100% of the misses": every known miss resolves to the right property and the full year's corpus shows zero wrong matches, before any code ships. Known misses include Ember "2858 C 1/2 Rd" (Oct 12, Oct 26, Oct 28), Northridge "575 / 585 Redcliff Cir" vs stored 565 (Oct 7, Oct 28), Flats on Elm "1250 Elm Avenue" vs stored 1240, and Aspen Leaf, Lampliter and Olde Town Terrace at Situs. All five Western Slope cases sat on threads that already carried the right property.
Where it stands (Oct 28): not met. With Pick A planted, 10 of 16 known misses still fail on their own channel (9 of them on email filing) and false matches stay at 0; the proof of concept leaves 2 of 251 unreached. Detail in sections 6 and 7.
The fix spans Western Slope and Situs and every channel (email, text, phone). The existing pages are closed incident write-ups (Ember Estates, September) and a Situs-only report.
Micheal M. asked on Zillow about "2858 C 1/2 Rd, Grand Junction". No email reached us: AppFolio created guest card 3053 and filed it on Ember Estates itself. Clara's reply ran on Ember Estates. Inside that reply she searched for the address, nothing matched, and she treated it as a home we might not manage.
| # | What happened | Where in code | Evidence |
|---|---|---|---|
| 1 | Cause. Clara's in-reply property search returned nothing. AppFolio had already named the property on the card. | search_properties → resolvePropertyByName reads building names, building addresses and active aliases, never unit addresses | search 14:09:36 UTC (turn disp_29568bcd, on appfolio-399); stopped draft dstop_9a37538f: "I'm not showing that address" |
| 2 | Symptom. Clara emailed Western Slope staff about our own miss. | forward_to_property_manager staged a note; flushAutonomousTeamNote sent it because the draft deferred | email msg_93d03868 to Western Slope's leasing inbox, 14:09:51 UTC; matter matter_12e6dcd5 (left alone) |
| 2b | Consequence. A draft check forced a rewrite that dropped the honest line and invented a reason for two prices. | first-email check draft_checks: no-tour-times stopped the draft; the retry was sent | stop dstop_9a37538f (outcome sent_after_retry); sent msg_35826329 14:10:56 UTC: "$2,550 or $2,795 a month depending on lease length", the address caveat gone. Your rules: checks only block; nothing rewrites her message. |
| 3 | Symptom. The two emails described different homes and prices, one a delisted home. | decideGuestCardHomeFacts fell to "whole property"; openHomeTypes took the lowest rent | $2,300 = unit 365 (1,228 sq ft, delisted Oct 27); $2,550 = 363; $2,795 = 364. Lease length backs neither. |
| 4 | Observed only. Two AppFolio interest records a minute apart, two emails. | n/a | messages 7681 / 7682 on card 3053. Fede: "The second inquiry for the same person on the same property is not necessarily the bug here." No options proposed. |
Ember Estates has two addresses. Our building record holds one; the other sits on two of its unit records, where the search never looks.
Related, not the center: Situs email leads are filed by a different matcher that does not read the alias list either; "Aspen Leaf Apartments" missed "Aspen Leaf" on Oct 27 (harness).
How Clara turns the words in a lead into one of our properties, and the options we weighed.
Oct 28 results: Pick A stays decided, with two amendments: the mailbox router reads the same alias list, and one twin rule for a home that is both a unit and its own record (sections 6 and 7).
Matching lives in the PMS adapter layer behind a written interface. Core flows never name AppFolio; listing ids are stored with a provider prefix.
| Option | What | Ember? | Aspen Leaf? | Cost |
|---|---|---|---|---|
| A1 Loosen name rules | Looser contains / suffix rules. Not rejected: Fede (Oct 28) "I didn't reject this… I think it's a good last fallback". Runs after ids and aliases, before the model; the proof of concept measures its gain and false matches. | No | Yes | S |
| A2 One alias list, every channel | Email, text and phone all read one list, filled automatically from building addresses, unit addresses, listing addresses and listing ids, with address normalising ("C 1/2 Rd" = "C½ Road"). The engine confirms learned names itself; no human queue. | Yes | Likely | M |
| A3 Listing ids only | Key on Zillow's zpid / listing id from the link and the daily report. | Yes | Second lead on | M |
| A4 Lead address per building | Each building gets its own inbox address (JP&Co today: 151 of 151). | Email only | Yes | S build, L rollout |
| A5 Outside address service | Clean addresses with a paid geocoder. Fede (Oct 28): "no, this not yet". The proof of concept measures a free geocoder only, to size what it would add. | Unverified | Unverified | M + spend |
| A6 Model decides | Hand the model the full property list plus the card's own property and let it pick. | Likely | Likely | S |
Cells are reasoned, not measured, except one: harness control C1 shows an active "2858 C 1/2 Rd" street name finds Ember Estates with today's code. A1 to A5 come from the 003 Situs report; A6 is new here.
"so this is first bug. we should not email the customer this is an engineering bug."
Fede, Oct 28
Decided by Fede, Oct 28 The fix is owned by another session; this page does not open it.
Your 10/22 rule: never over-share availability. This case adds: never a delisted home's price.
Which matching rules we need: we ran each rule over a year of real leads and kept the ones that add right homes without ever picking a wrong one. Prototype only: local, read-only, no repo change, no CI. Every matching layer was run alone and stacked over 974 real leads and named cases at all three customers.
Withdrawn Oct 28 evening. The numbers in this table and the "What it means" paragraph below were a text-only simulation scored on rows that do not occur in production; see Second pass. Kept for the record only.
| Today | New rules | Rules + model on leftovers | |
|---|---|---|---|
| Right home, of the 500 leads whose text names a home | 47% (237) | 90% (452) | 92% (459) |
| Right home, of all 916 leads | 26% (237) | 49% (452) | 50% (459) |
| Ember parent or sibling home (not counted wrong) | 0.3% (3) | 1% (13) | 1% (13) |
| Wrong home | 0% (0) | 0% (0) | 0% (0) |
| Known misses still missed (% of 251) | 93% (234) | 4% (9) | 0.8% (2) |
What it means: 416 of the 916 leads (45%) are guest cards whose text names no home at all ("can I schedule a time to see this?"). Those are not a matching problem: AppFolio already filed each card under its property and that is where the home comes from. Of the 500 leads whose words do name a home, the rules find it for 92%, up from 47% today, and never pick a wrong home. The 41 still open: 13 land on an Ember sibling (the Ember decision), 20 name nothing specific ("the 205 floor plan", "Lakewood, CO 80214"), 4 carry a Zumper listing id no past card taught us, 2 need an alias we do not have, 2 have unknown truth.
Percent of 916 leads (974 minus JP&Co's 58 emails, left out above); known misses as a percent of 251. The table below counts JP&Co's emails, which is why its totals (240 / 523 / 530) are higher.
| Customer, channel | Rows | Today | New rules | Rules + model | Wrong |
|---|---|---|---|---|---|
| Western Slope guest cards | 131 | 71 (54%) | 120 | 121 (92%) | 0 |
| Western Slope emails | 115 | 111 (97%) | 111 | 111 (97%) | 0 |
| Western Slope named cases | 16 | 8 | 16 | 16 (100%) | 0 |
| Situs guest cards | 92 | 29 (32%) | 81 | 82 (89%) | 0 |
| Situs emails | 16 | 9 | 14 | 14 (88%) | 0 |
| Situs named cases | 126 | 9 (7%) | 119 | 124 (98%) | 0 |
| JP&Co guest cards | 4 | 3 | 4 | 4 | 0 |
| JP&Co emails | 58 | 0* | 58 | 58 | 0 |
* Simulated without the per-building mailbox step; production files these by mailbox today. 0 regressions against today.
Design note: layer 4 extends the name rule in PR #22994 rather than replacing it (the widened rule covers every row the PR's rule gets but one).
Both need a name alias on the property. That is a knowledge-base write, so it is Fede's call (open ask 4).
All aliases are built in the PMS adapter at sync; core code only asks "which home?". Sources: scratchpad/resolver-poc/summary-for-fede.md and results.md (session 003).
Where today's live code fails, and how much the chosen fix would help. Local replay of today's production matching code over snapshots of each customer and a year of guest cards. No model, no sends, never CI. Each lead's words are read through four channels: Clara's in-reply search, a tool naming a home, the scan over the renter's message, and the company-mailbox router.
| Today | Pick A planted | |
|---|---|---|
| Known misses failing on the channel they happened on (of 16) | 16 | 10 |
| Known-miss rows passing, every channel (of 142) | 42 | 96 |
| False matches, a year of guest cards (793 rows) | 0 | 0 |
| Situs mailbox router: cards on the front door (of 48) | 35 | 35 |
"Pick A planted" re-runs each row with the expected alias list added as active rows. It is a model of Pick A, recorded, never counted as a pass. All 16 planted-defect controls behave.
| Family | Cases | Rows | Pass today | False | Pick A: pass / false |
|---|---|---|---|---|---|
| F0 Known misses (every miss a person hit) | 38 | 142 | 42 | 0 | 96 / 0 |
| F1a Email leads (every real lead email, by subject) | 53 | 150 | 139 | 0 | 139 / 0 |
| F1b Full corpus (a year of guest-card inquiries with words) | 349 | 793 | 242 | 0 | 261 / 0 |
| F1c Text and phone (real search calls, caller quotes) | 13 | 14 | 7 | 0 | 14 / 0 |
| F2 Spelling variants (generated) | 256 | 1,024 | 242 | 0 | 636 / 0 |
| F3 Ambiguity, collisions, foreign addresses | 17 | 58 | 48 | 0 | 46 / 0 |
| F4 Decision 1 (a miss on a card that names the property) | 6 | 6 | 1 | 0 | n/a |
| F5 First reply home facts (Pick C as C1) | 2 | 2 | 0 | 0 | n/a |
| F7 Sync-built aliases (named facts) | 23 | 23 | 0 | 0 | n/a |
| F8 Situs mailbox router (the 48 cards) | 56 | 56 | 15 | 0 | 15 / 0 |
F6 (do channels agree on the same words) is rendered from F0 to F3: known misses disagree across channels in 24 of 38 cases today, 13 with Pick A planted.
resolver-poc/results.md).The morning seed suite (13 cases) still reads 5 of 12 right; its 7 controls behave. Branch fede/lead-home-matching-harness, head 7bf80bddb0, local only, no PR. The harness session's instruction: squash before any push, because earlier local commits hold real first names and one renter surname in the name checks. Sources: property-locate/HARNESS.md and results/before-2026-10-28.md.
Open, Fede's pick This is separate from the matching decision. Matching finds the property; this is which copy of a home is the record.
Western Slope holds each of the 27 Ember homes twice: once as a unit of Ember Estates (the portfolio, property 399) and once as its own single-family property. Both copies come straight from AppFolio.
| What | Lives on |
|---|---|
| Leases, current tenants, recent applications | The 27 single-family copies (the portfolio has 0 leases) |
| Live listings, price, available date | The portfolio rows |
| Leased or not (the truth) | Single-family copy |
| On the market, at what price (the truth) | The live listing |
| Home | Reading |
|---|---|
| 363 Ember | Listed, available now, $2,550 |
| 364 Ember | Listed, available now, $2,795 |
| 2863 Florida | Listed, from Nov 2, $2,775 |
| 365 Ember | Delisted Oct 27. Clara's $2,300 and 1,228 sq ft came from this home. |
| 374 Ember | Occupied. Clara named it as the home. |
| 372, 362 Ember; 2867 Florida | Occupied |
| 19 others | Unleased, not listed |
Other customers. Situs has the same shape: its "DU Portfolio" (property 43) holds 17 rows; 16 of those houses are occupied or pre-leased (14 occupied, 2 marked vacant-rented). 2281 S Lafayette reads open at $2,500 because "S." breaks the match, though its house is occupied (whether offered: not checked). JP&Co: none.
| Option | What | Cost |
|---|---|---|
| A (recommended) | The home is the single-family record. Ember Estates becomes a marketing parent holding the community's names ("Ember Estates", "2858 C 1/2 Rd", the Zillow building id). Portfolio rows become the listing feed, linked to their home by listing id, then by a letter-aware address plus size. | The lease is the durable fact; one id from prospect to resident; fits Gera's "a group sits between" shape. |
| B | The home is the portfolio unit; the single-family copies become occupancy feeds. | Every lease, tenant and maintenance record must be remapped; residents keep two ids per home. |
| C | Keep both copies and patch the links (letters, "S.", a reverse check, price from the live listing). | Cheapest, but every home stays twice in search, lists and pricing, and the shape recurs (Situs). |
In every option the link is made at the PMS sync boundary (the adapter), never in core flows, and a row that does not link cleanly stays visibly unresolved. Source: research_notes/Ember Estates property addresses/ember_double_representation.md (read-only, Oct 28).