How a renter's words become a building and a home today, on every channel, and the one central resolver proposed to replace it. Proposed, pending Fede's review. Nothing here is shipped.
2026-10-29 · session 003 · replaces the Oct 28 email-only page (its prototype numbers were withdrawn) as the hub for this effort · Gera's handoff via Agent Smith: handoff page
The fear: a renter says "I'm calling about Aspenleaf" and Clara cannot find it. Today that happens on a miss, not a wrong guess: on 147 real phrases the code missed 343 of 814 testable channel answers and picked a wrong home 4 times.
Three name stores exist and never meet: Gera's saved "other names" (read by the phone building search, never by the home matchers or the company-mailbox email lane that Situs and Western Slope leads take), the listing title and description (read by the home matchers, never by the building search), and the newer address index (phone after-call, calendar blocks, text turn-home and phone maintenance; never email filing). Staff have typed no saved names at either customer; Clara has learned two at Western Slope that sit unconfirmed; a PMS import script exists and has never been run. Western Slope's alias note for Ember Estates sits in a field we do not store.
147 phrases, every one taken from a real place: Situs and Western Slope guest cards and calls, Eileen's onboarding calls, Ember Estates, and 14 recorded incidents. Each phrase runs through the real entry function of 6 channels against the customers' real building lists. Local only, zero CI.
| Channel | Pass | Fail | Untestable |
|---|---|---|---|
| Company mailbox email | 78 | 52 | 17 |
| Listing-site "New Lead for X" email | 44 | 86 | 17 |
| Phone, during the call | 82 | 65 | 0 |
| Phone, after the call | 107 | 40 | 0 |
| Text on the company line | 80 | 50 | 17 |
| Staff desk hint | 80 | 50 | 17 |
| All | 471 | 343 | 68 |
Untestable = spoken-only phrases (speech garbles) on text and email. 52 of the passes are "nothing happened" on phrases where Clara should have asked which home; no channel asked. Prototype scores on the same phrases: below.
All four wrong-home guesses come from the after-call step that keeps its best guess when several homes match.
| Prototype | Right of 147 | Wrong home | Asked, rightly | Asked, should have found it | Channel results right of 814 |
|---|---|---|---|---|---|
| Today's code | — | 4 | 0 | — | 471 |
| P1: keys, then one cleaner over the full home list | 132 | 0 | 10 | 5 | 760 |
| P2: P1 plus nearby-streets geography | 132 | 0 | 10 | 5 | 760 |
| P3: P1 plus a model tie-break on the undecided 40 | 139–140 | 0 | 10–11 | 1–2 | 778–780 |
| P1 on property names and addresses only (no unit lines) | 112 | 0 | 10 | 17 | 644 |
What moved the number: the unit street lines the home list already holds (112 to 132). Saved other names added nothing on these phrases; geography added nothing. The model sees only the 40 phrases the rules cannot decide, answered the same way on 38 and 40 of them when asked twice, and every model answer passes two fixed checks (a house number must belong to the home it picks; a word that only names a place never picks a single home). The 7 it still misses are names no record holds ("The Oaks", "the Yulara", "Elevate"), two speech garbles, and an owner-company name; none files a wrong home. Caveat: the place check was added after one wrong file in the run, so the zero is tuned on these phrases. Local only, model answers cached, no production reads or writes.
resolveHome(words, company, context) and gets back one home, a short list with one question, or "none" with the one question to ask. Every miss is written to the name book.Geography (nearby streets, neighborhoods, landmarks) plugs in as a name-book source, not a fourth layer. Maintenance and other modules call the same function later.
| # | Question | Options | Recommendation |
|---|---|---|---|
| 1 | Several homes fit the words | a) ask once with the list · b) best guess (today, after the call) · c) front door | a. The 4 wrong homes in the run all came from b. |
| 2 | Names Clara learns from a miss | a) active on arrival (your Oct 28 Pick A) · b) a person confirms first (Gera's ADR-0147) | a, guarded by uniqueness. b is why "2858 C 1/2 Rd" sat unconfirmed twice. |
| 3 | A home held under two records (Ember's 27, Situs's 17 DU houses) | a) the single-home record is the home, the community is a marketing parent · b) the building's unit wins (ADR-0147) | a. The PMS setup is the customer's call; the resolver must accept either name and never pick a different home. |
| 4 | Past names after a rename in AppFolio | a) kept automatically as other names · b) typed by staff | a. Nobody typed any at two customers. |
| 5 | Where a miss ends | a) hold with one question and a team note · b) silent front door (today) · c) drop | a. 126 conversations sat on the front door in October, none moved. |
| 6 | A model in the loop | a) none, rules only · b) model only as the tie-break for "several" or "none" · c) model decides | b. Rules get 132 with zero wrong homes; the model on the undecided 40 adds 7 to 8 more, still zero wrong. Build P1 first, add the tie-break as its own PR. |
All files are in session 003's scratchpad, folder amberlane/: consolidated.md (33 matchers, 31 composers, 145 call sites, 21 normalizers, keys unused, misses unrecorded), inventory/voice.md, inventory/text-and-guest-card.md, inventory/email.md, inventory/data-sync-staff.md, inventory/geo-spoken-home.md, alias-architecture.md, history.md (timeline, 22 incidents, 14 rulings), data-audit.md (75 caller phrases), situs-transcripts.md (8 calls, 81 passages), transcript.md (Western Slope Ember call), our-side.md (Ember in AppFolio vs our record), smith/handoff.txt.
Prototypes: scripts/home-identity-harness/prototypes/, results in results/prototypes-2026-10-29.md, local commit only. Harness: local branch fede/home-matching-harness, scripts/home-identity-harness/channels/, runner npm run test:harness:home-matching, results in results/before-2026-10-29.md, mutation control in results/mutation-control-2026-10-29.md. Not pushed, no PR.
Data facts worth keeping: Situs 53 properties / 442 units, Western Slope 90 / 254, saved other names in use 0 / 0 (2 learned, unconfirmed, at Western Slope); 19 live Situs AppFolio properties and 13 Western Slope ones are missing from our records (Fox Street Apartments is one renters ask about); guest cards name the home in 168 distinct ways at Situs (27 not an exact match) and 182 at Western Slope (60 not); 83 of 90 Western Slope property names are just the address. Zillow still advertises Ember Estates as "2858 C 1/2 Rd"; Clara learned it twice and nobody confirmed it.
What the customers said (verbatim, Eileen, Sep 29): "we call it Aspenleaf colloquially… they'll either say IH Holdings 22 or Aspenleaf, or they'll say 60-90 Wadsworth." "At Bryant Gardens there's 4 buildings with 4 separate addresses." "someone could call you and say, I'm calling from the Elevate property… that's only the 85 building at Bryant Gardens." Western Slope, Oct 28: "it's also caused a lot of confusion for Clara, reading our AppFolio."