Research · Proposed — pending review

What approved applicants actually ask — and what we can answer today

Three parallel research passes, synthesised: outside renter evidence on what gets asked between approved and keys in hand, a code-level inventory of what our shipped lease-answer engine covers, and a scan of ten competing AI leasing assistants. Scope is the post-approval / pre-move-in stage only — approved → lease sent → signed → move-in — for prospects and applicants. Residents are separate scope.

8 / 10vendors scanned whose published scope stops at the application
0 / 10vendors who answer the policy-fact questions themselves
69% / 51%renters expecting a reply under 24h vs actually getting one (Zillow — unverified this pass)
>70%renters paying at least one mandatory fee beyond rent (unverified this pass)

The headline

This stage is thinly covered, and nobody answers the questions themselves. No vendor scanned advertises answering proration, an itemized move-in charge, utility setup, key pickup, or the application-vs-lease confusion. That is the real gap.

But "nobody goes here" is too strong, and we should not say it. Two vendors publish post-application work. EliseAI has a dedicated Move-In product page — move-in checklists, document verification, "cut time by up to 60%", plus a "65% Reduction in Lead-to-Lease Timeline" case study. RealPage's AI Resident Agent page covers post-application resident Q&A. Funnel's 70% number is post-approval too: "slashing approval-to-lease distribution timing by more than 70%". So the stage is not a blank; it is covered by workflow automation, not by answering.

Our published-policy answers are strong and live on voice, SMS and email: lease lengths offered, the what-happens-next sequence, the start convention and proration mechanics, deposit tiers, application fee per applicant, parking rate, utility billing mode and per-utility setup (including the "is this third-party bill a scam?" answer), and move-in specials with their eligibility.

The personal half is built, correct, and unreachable. Their move-in date, their prorated first charge, their deposit, their household fee total, whether the special applies to them, and which step they are on — all computed in code, none of it ever rendered. That is the single largest gap against the "wow" bar.

1 · The top 10 questions, ranked

Ranked by how often the question recurs across renter-facing guides, plus two survey numbers, cross-checked against what our classifier and eval datasets were built to recognise — several patterns exist because a real Camellia conversation produced them. One sourcing caveat. Reddit is hard-blocked in the research environment, so there are zero Reddit citations and none were invented. Frequency here means editorial consensus, not upvote counts. Classifier patterns: answer-engine.ts:44-104.

#QuestionCan we answer it?What the field does
1"What exactly do I owe at move-in, and when?" — the itemized all-in numberPartialNobody publishes a move-in quote answer
2"Is this fee legit?" — admin / amenity / tech / pest / third-party utility billPartialNobody publishes fee-legitimacy answering
3"Does approval mean I have the apartment? Was the application the lease?"YesEntrata "guides through next steps" — nudges, not answers
4"When do I get my keys, and what gates them?"RoutedEliseAI closest — a Move-In product page with checklists and document verification
5"Why is my first month's rent a weird number?" — proration, and "am I being double-charged?"PartialZero. No vendor mentions proration at all
6"How long do I have to sign before I lose it?"Not modeledNobody
7"Which utilities do I set up vs. which are included, and by when?"Yes (no deadline)Nobody
8"The deposit — how much, and is the holding fee the same thing?"Yes (holding: no)Nobody claims deposit-policy Q&A
9"Why is my lease 5 or 7 months — and does the special still apply?"Yes (no "why")Funnel's lease-clause extraction is the nearest claim
10"What else do you need from me before move-in?" — insurance, funds form, outstanding docsNot modeledNobody

Just below the line (real, deliberately cut to keep ten): can I move in early / lease-start-date vs move-in-date; the move-in inspection and how to log damage; when do I get my deposit back and what can be kept; and the logistics tail — elevator and loading-dock reservation, move-in time windows, parking assignment, package and mail access, pet screening. That tail is low-anxiety, high-volume and 100% answerable from property policy data, which makes it the classic never-should-have-been-transferred category and the cheapest wow-per-field on the whole list.

The ten, in detail

1

"What exactly do I owe at move-in, and when?"

Evidence: appears in every post-approval guide found. LeaseRunner makes "Clarify Total Move-In Costs — request itemized breakdown of all fees" an explicit numbered step (3 of 9). The stack is deposit + first month + prorated rent + pet deposit/rent + parking + amenity + admin. Renters do not know the all-in number until someone hands them a line-item ledger.

We can answer every piece, but never the total. Deposit tier, application fee per applicant, parking rate and proration mechanics all come from published policy. The sum does not: their prorated lines, their household fee total and their resolved deposit are all computed and never rendered. So the most-asked question in the stage goes to a human today.

The identity rule is deliberate. We will not even multiply the app fee by the number of people a caller mentions — "a household total is a personal figure however it is hedged."

Published pieces: generic-grounding.ts:199-244 (deposit tiers), :246-247 (app fee), :249-252 (parking), :187-193 (proration). Computed-but-unrendered: answer-engine.ts:601-612, :680-688, :673-678. Identity rule: generic-grounding.ts:453-455.

Field: nobody advertises a move-in quote.

2

"Is this fee legit?"

Evidence — the best-evidenced item in the stage. >70% of renters report paying at least one mandatory fee beyond monthly rent. The FTC opened an ANPRM on unfair and deceptive rental fee practices (Mar 2026) naming fees "not clearly disclosed" and "move-in costs not itemized upfront", and is mailing $47.2M to 444,131 Invitation Homes renters over undisclosed fees. All three of these external figures are carried over from the earlier pass and were not re-verified this time.

This is our strongest answer, over a narrow slice. The "is this third-party bill a scam?" answer is purpose-built, with its own classifier patterns and a widening safety valve. Per utility we carry who opens the account, who bills, the admin fee and the first-bill delay. Absence is never a default — a missing admin fee does not mean $0.

The slice is narrow. The only fees modeled anywhere are the application fee, parking, the utility admin fee and flat monthly fee, and the deposit tiers. There is no admin, amenity, technology, pest, trash or convenience fee catalog. "Is this $250 admin fee real?" has no answer.

billLegitimacyLines at answer-engine.ts:935; utilitySetupLines at :1003-1076; ambiguous patterns :85-99; 'other'-widening valve :139-141. Per-utility shape and the no-default rule: types.ts:98-115 and :93-97.

Field: no vendor makes any claim about fee legitimacy or itemization.

3

"Does approval mean I have the apartment? Was the application the lease?"

Evidence: explicitly flagged as a widespread misunderstanding — "an approved application only means the tenant passed screening; the apartment is secured only after both parties sign." Until signature either party can walk, and an application fee creates no contract. Carries a corollary: "can they still change their mind after approving me?" (yes, pre-signature).

We answer this well, and we know it is a real question. The published block spells out the sequence: lease prepared, lease sent, lease signed, then move-in charges due. It explicitly forbids replying with only a hand-off — "replying with only the hand-off, and none of the sequence, is the punt this block exists to remove." The classifier recognises the phrase "was the application the lease" verbatim, a pattern that exists because someone asked it.

What still routes: which step they are on. Their stage and their next step are computed and never rendered.

Sequence block: generic-grounding.ts:175-185. Classifier: answer-engine.ts:44-104. Stage and next step: answer-engine.ts:531-541, :552.

Field: Entrata's blog says post-tour follow-ups "guide prospects through next steps, such as applications, screening, and lease execution" — reminders, not answers.

4

"When do I get my keys, and what gates them?"

Evidence: keys are conditional and the conditions are the question — lease fully signed, all move-in funds paid (certified funds inside ~7 days), utilities active in the resident's name, renters insurance on file. Operator move-in pages state these as hard gates; The Standard publishes a move-in time table by building floor.

This is the sharpest failure in the set. The booking machinery is real and careful — two tools, signed slot tokens the model cannot forge, nine fail-closed block reasons each with a speakable sentence, and a refusal rather than a false "no conflicts" when the calendar read fails.

But it only serves verified residents. An approved applicant is, by definition, not one. The refusal reads "No verified resident on the conversation — a prospect or an unknown number. Booking is impossible; the leasing flow owns this caller." So exactly the population this feature is for gets turned away on a top-5 question.

One known limit, stated in the file itself. Slot freeness is not re-read at booking time, so two people inside the 10-minute token window can double-book.

Booking rules: src/lib/domain/move-in/key-pickup.ts:121-192; unverified_identity text at :121-123. Double-book window: handle-book-key-pickup.ts:21-31.

Field: EliseAI is closest — a public Move-In product page with move-in checklists and document verification, claiming to "cut time by up to 60%". Their support articles 403 on direct fetch, so how much of that is question-answering versus workflow automation is not verifiable from public docs.

5

"Why is my first month's rent a weird number?"

Evidence: the documented confusion pattern is not the formula, it is the sequence — a mid-month move-in produces a small prorated charge, then a full month's rent on the 1st a couple of weeks later, and the renter reads it as being double-charged.

We explain the mechanics well; we cannot give them their number. The policy row says whether leases start on the first of the month (mid-month arrivals get a one-time prorated charge) or on the move-in date (no partial period), and we render the right branch. We also allow date arithmetic on dates they supply, phrased hypothetically: "a 6-month term starting September 1st runs through the end of February." If that disagrees with the document they were sent, we say so and route the correction.

What routes: their actual prorated amount, with day counts and per-line breakdown. It is built and never rendered, and the identity rule names "their prorated first charge" as forbidden on the published path.

Start convention: generic-grounding.ts:187-193. Hypothetical arithmetic: :405-412. Identity rule: :449-459. Computed proration: answer-engine.ts:594-612.

Field: proration appears in no vendor's published materials.

6

"How long do I have to sign before I lose it?"

Evidence: competitive markets expect signatures in 24-48h, slower ones 3-7 days, 48-72h given as the safe default, with the offer pullable if they delay. Pairs with the standing warning renters are given everywhere: never give notice to your current landlord until the new lease is signed by both parties and the deposit has cleared.

Not modeled. There is no offer-expiry, sign-by or hold-period field anywhere, so there is no answer — it routes. The cost cuts both ways: an applicant who waits loses the unit, and one who assumes it is theirs gives notice on their current place too early. Verified by grep of types.ts.

Field: nobody.

7

"Which utilities do I set up vs. which are included, and by when?"

Evidence: setup takes several business days, utilities must be active in the resident's name at possession or keys are withheld, and which ones are the resident's is lease- and property-specific (water often included or RUBS-billed).

Our best-covered topic — except the deadline. We say whether billing is usage-based or flat, which utilities the resident opens themselves, and per utility who opens the account, who bills it, the admin fee and the first-bill delay. We deliberately refuse to quote a flat amount on the published path, because which cohort a lease sits in is a per-lease fact mid-migration. A missing value reads as "not established", never as "none".

The gap is the deadline. The first-bill delay is about the bill, not about setup. We cannot say "your power must be on in your name before we hand over keys" — the one sentence that prevents a first night without electricity.

generic-grounding.ts:257-267, :268-272, :279-294; answer-engine.ts:834.

Field: nobody.

8

"The deposit — how much, and is the holding fee the same thing?"

Evidence: the holding deposit (non-refundable, takes the unit off market while paperwork finishes) and the refundable security deposit are two different monies with two different refund rules, collected days apart. Reliably confusing. Refundability is state-regulated.

The published tier table is answered well. Deposits are tiered by bedroom band, and on voice there is a rule that beats the obvious failure: do not read the whole table aloud — ask one-bedroom-or-two, then give one figure. If the tiers are empty we say "not established" and route, and that constraint is scoped so it survives every filter. Named unknowns cover a missing bedroom count and a unit size no tier covers.

Not modeled: the holding deposit. There is no such field, so neither the holding-versus-security distinction nor the refundability answer exists. Deposit-return timing is also unmodeled, though that resolves after move-out.

Tiers: generic-grounding.ts:199-244; spoken rule :225-229; fail-closed constraint :242-243. Named unknowns: answer-engine.ts:342.

Field: nobody claims deposit-policy Q&A.

9

"Why is my lease 5 or 7 months — and does the special still apply?"

Evidence: odd terms are deliberate operator-side lease-expiration staggering, so expirations do not cluster or land in bad leasing season. Renters read an odd term as a mistake or a trick unless told the reason, and immediately ask whether the rent or the special differs for it.

Answered from policy, with careful mechanics. Allowed terms are listed, and any other length is declared not standard and handed over rather than priced. Concessions carry their description, which terms they apply to, whether they are new-leases-only, whether they survive a transfer, how they work (first month free versus amortized) and what happens on early termination — and "unknown" is a real value, not a silent no. An empty list means "none on file; do not mention or imply one." Eligibility must be stated in the same breath as mechanics, a rule an email eval found. A term we do not offer is treated as structurally absent: "It is not withheld; it does not exist."

Not modeled: the why. We can say a 7-month term is offered. We cannot say why it exists. That is one string on the policy row and a pure wow win.

Terms: generic-grounding.ts:154-158. Concessions: :298-373 and types.ts:172-190; eligibility rule :366-371. "It is not withheld" at answer-engine.ts:527.

Field: Funnel Leasing claims to extract and summarise a real lease clause in plain English (their example is early termination). Nearest thing in the market, but it is a marketing blog with no metrics.

10

"What else do you need from me before move-in?"

Evidence: three separate asks that arrive as one question. Renters insurance — proof before keys, commonly $100k liability, landlord as additional interest, effective on or before lease start. Payment form — certified funds when move-in is within ~7 days, funds must clear before access. Conditional approval — pay stubs, bank statements, W-2, guarantor paperwork, plus the recurring cosigner-vs-guarantor question.

Not modeled, none of it. No insurance field, no accepted-payment-forms or certified-funds field, no outstanding-documents model. The insurance and funds halves are published policy and cheap to add. The conditional-approval half needs live application state and is a larger build.

Field: nobody advertises answering this. AppFolio's product page reads as framing human staff, not the AI, as who serves new residents — but that is an inference from marketing copy, not a documented boundary.

2 · What the competitors actually do

Ranked by how close each gets to the bar. Every row was fetched directly except where noted. Read the last column as "published scope", not "capability" — absence of a marketing claim is not proof of an absent feature, and several of these could plausibly answer some of this from a configured knowledge base. That is what a demo should probe, not something this scan can settle.

VendorClosest thing to post-approvalPublished number for this stage
EliseAIThe only vendor with a dedicated post-application product. A public Move-In page covering move-in checklists and document verification, plus trigger-based approved → signed → pre-move-in onboarding keyed to PMS status. Support articles 403 on fetch, so how much is answering versus workflow is unknown."Cut time by up to 60%" on move-in, and a case study claiming a 65% reduction in lead-to-lease timeline
Funnel LeasingClaims plain-English lease-clause extraction and summarization. Marketing blog, not docs.Has a post-approval number: a press release claims to slash approval-to-lease distribution timing by more than 70%. Their other numbers (94% inbound auto-answered, 196% faster response) are lead-stage
Yardi Chat IQStrongest grounding claim in the market: "Chat IQ never guesses. All responses are grounded in verified Yardi data." And: "No fabricated numbers. No false availability. No policy assumptions. No hallucinations."None. Deflection language is qualitative, never a number
Knock / RealPageKnock is lead-stage: inquiry response, floor plans, tour scheduling, post-tour follow-up. But RealPage's AI Resident Agent page does cover post-application resident Q&AUp to 86% of inquiries resolved without staff, up to 30% tour conversion — footnoted as aggregate AI Voice customer results
Entrata ELI+Product page scoped "lead-to-lease", stops at application conversion. A blog claims follow-ups "guide prospects through next steps… lease execution" — nudge framingNone
AppFolio (Lisa / Realm-X)No published post-approval answering. Marketing copy reads as framing humans, not the AI, as who serves new residents — an inference, not a stated boundary10 hrs/week saved and a 73% relative lift in lead-to-showing versus non-users — both belong to Realm-X Flows, not Lisa, and both are lead-stage
Zuma, PERQ, Travtus, ColleenNo post-approval question answering. PERQ documents the anti-pattern outright: it hands off "when prospects schedule a tour, ask questions the AI cannot answer, or specifically request an agent". Colleen is a different stage entirely (collections, move-out) — this row was not re-verified in this passAll lead-stage or post-resident (unverified this pass)

3 · The gap list

Sixteen gaps, grouped by what they actually are. Blocker means an approved Camellia applicant will hit it during the rollout and get handed to a human for something we could have answered. Later means real but survivable. The numbering is unchanged — G1 through G17 are the same gaps people have been referring to.

Why nothing is live at Camellia yet

Camellia is untouched: nothing renders there until a lease policy is written onto its settings row and its mailbox flag is flipped. These two gaps gate every other row on this list. This section describes main at commit 52eba3c6e. The single-knowledgebase consolidation now in flight will move where applicationLeasePolicy lives.

#GapTagFix shape
G1Camellia has the facts, but not in the typed shape the engine reads. Its knowledge row already holds structured pricing (deposit, pet fee and rent, application fee, surface and garage parking), two concessions with full mechanics, the utility payer split, and eight curated free-text sections — including the tiered $300 studio/1BR and $400 2BR deposits and the 6-/12-month same-rate terms. What is missing is the typed applicationLeasePolicy: the settings row exists, the attribute does not. So most of this is transcription, not discovery. Two things genuinely need Kenya. First, four facts nobody has written down anywhere: the lease start convention, the utility billing mode, the utility admin fee and third-party biller, and what happens to a concession on early termination. Second, a real contradiction — the structured deposit says a flat $300 while the manual section says $400 for two-bedrooms. Until the policy is typed and valid, Clara renders no answer block at all and every question goes to a person. That is deliberate. Reason on record, paraphrased: defaulting a term list or a deposit tier so the block always renders would put a plausible number in front of someone budgeting real money against it. Fail-closed behavior lives in policy-store.ts.BlockerAn afternoon with Kenya: resolve the $300-vs-$400 conflict, answer the four unknowns, transcribe the rest. Prerequisite to every other row here
G2Answers with someone's own numbers in them are switched off everywhere. The reason is small: we never save the lease term the two sides agreed on, so there is nothing to do the math against. Anything personal goes to a human — their move-in date, their prorated first charge, their deposit, their household's fee total, whether the concession applies, and which step they are on. Answers that only quote published policy do work. The renderer is called in production, but every call site passes termMonths: undefined and the guard short-circuits first. The term exists on renewal and lease shapes in types.ts; it is not persisted on the application record the resolver reads. Verified by grep at 52eba3c6e.BlockerSave the agreed term, then turn the call sites on. A tripwire test, clara-lease-answer-caller-wiring.test.ts, fails the day a call site passes one — so the flip is guarded, not silent

Questions we can't answer because a field doesn't exist yet

These six are all the same shape: a renter asks something ordinary, and we have nowhere to keep the answer. All six are being added as optional fields in the single-knowledgebase consolidation already in flight. They start out empty, and Clara keeps punting until a property fills in real values.

#What a renter asks / what's missingTagFix shape
G5"What are all these fees?" — we have no fee list. Only the application fee, parking, the utility admin fee and deposit tiers exist today. No admin, amenity, technology, pest, trash or convenience fee. This is the single best-evidenced renter anxiety in the stage, and the FTC is actively rulemaking on exactly it.BlockerA list field: name, amount, cadence, one line on what it is. No new machinery
G6"How long do I have to sign?" — no signing deadline or offer-expiry field. This is the question that decides whether someone gives notice too early or loses the unit.BlockerOne field
G7"What renters insurance do I need?" — nothing modeled: no liability minimum, no additional-interest naming, no effective-by date. It is a hard gate on getting keys and we cannot state it.BlockerThree fields
G8"How do I pay, and where?" — no accepted-payment-forms or certified-funds field, and no place to pay. Renters usually discover this the day before move-in.BlockerTwo fields
G9"By when do I have to set up power?" — we model who sets up which utility and with whom, but not the deadline. So we cannot say the one sentence that prevents a first night without power.BlockerOne field
G10"Is the holding fee the same as the deposit, and do I get it back?" — no holding deposit is modeled at all, so neither question has an answer.Blocker if Camellia collects one; Later if notTwo fields plus a refundability string

Behavior gaps

Here the data exists or is coming; what's wrong is what Clara does.

#GapTagFix shape
G3A lease question in a brand-new email thread waits for a human. If the same question comes as a reply inside a thread we are already in, Clara answers it, and answers it from real data. Assumed, not measured: that approved applicants routinely start a fresh thread off the approval notice rather than replying in one. If that assumption is wrong, this gap is much smaller than it looks — and it is the premise D1 rests on. Camellia's mailbox allowlist is ['tour_request','tour_reply','general']. lease_question is absent from it, so a cold-sender lease question there lands in review_queue — the decision below stands either way. The Willows mailbox now includes lease_question in prod. The active-thread invariant is category-blind on the reasoning that the alternative is not silence but Clara answering ungrounded.BlockerA per-mailbox switch. Fede's call at go-live — Decision D1 below
G4Someone approved but not yet signed asks "when do I get my keys" and gets a refusal. Booking a pickup requires a verified resident with a signed lease, so an approved applicant is turned away on a top-5 question. The refusal comes back as unverified_identity.BlockerGive approved-but-unsigned a staged answer — the published gate list plus expected timing — instead of a refusal; unlock booking the moment the lease is signed. Also close the 10-minute double-book window
G11The green eval grade is grading the path we switched off. The path that actually runs scores 21 of 24 on the judge against a 90% bar, so it fails the gate; its fact check is a clean 24 of 24. The personalized path scores 23 of 24, but it grades a block production never renders. Read the scores as provisional: they come from this session's supervised run and were not committed to the repo, so they need a re-run to reconfirm. The 90% bar itself is real and in the harness. Inference, not measurement: that the base control is failing identically, which is why these blocks look not to be the cause. Bar: eval-post-approval-subscription.ts:387. The harness has documented judge variance of 17/20-20/20 with no code change — sustained drops and named criteria failing every run are signal, single-run deltas are not.Blocker for confidenceFix this before trusting the scoreboard — Decision D4 below

Later (real but survivable)

#GapTagFix shape
G12We say what term is offered, never why it is 5 months.LaterOne string
G13The move-in logistics tail is unmodeled — elevator and dock reservation, move-in windows, parking assignment, package and mail access, pet screening. Low anxiety, high volume, and 100% answerable from policy.LaterA logistics block on the policy row. Cheapest wow-per-field on the list
G14Conditional approvals are unhandled — outstanding documents, guarantor versus cosigner. This one needs live application state, not a policy field.LaterReal build; depends on G2 landing first
G15Deposit-return timing and the move-in inspection. State deadlines run 14 to 60 days and wear and tear cannot be deducted. Asked before move-in, resolved after move-out.LaterA state-law-by-property policy row
G16If a draft lease is wrong about anything other than dates, Clara hands it to a person. The audit checks exactly one class of disagreement — dates. Pets, pet fee, parking, who is named, appliances, or a rent that differs from the quote all get the same treatment: no fact asserted, name the term, hand it over. That behavior is correct as designed.Later correct as designedLeave it. We should not claim to read a document we have not parsed — "our record is not evidence about what the document says"
G17We have no prior research on this stage of the renter journey. The 19 docs in pm-domain-knowledge cover nothing on post-approval questions, move-in cost presentation, or key-pickup norms. The claims about the engine's corpus come from in-repo eval datasets, not a distilled domain doc.LaterDistil this page back into pm-domain-knowledge/ with frontmatter + index entry

4 · Decisions

Four calls. Pick one option each; answers are shared across everyone signed into the docs site.

D1 — Do cold-sender lease emails at Camellia get answered?

A lease question from a sender with no open thread goes to review_queue at Camellia today, because lease_question is not in that mailbox's allowlist (which is ['tour_request','tour_reply','general']). In-thread questions are already answered and grounded. This decision assumes approved applicants often start a new message rather than replying in the thread — that assumption is not measured, and it is worth checking before choosing.

In plain terms

If someone we just approved sends a fresh email asking about their deposit, right now it sits in a pile for a person to handle. If they had replied to an older email instead, Clara would have answered it correctly, from the property's own rules. Same question, two different experiences, decided by which button the applicant happened to press.

D2 — How do we wake the personalized answers?

The whole personal half is unreachable for one missing input: the agreed term in months. Every call site passes it as undefined, because we never write it onto the application record the resolver reads. Guessing it would put a fabricated lease end date in front of someone about to sign.

In plain terms

We already wrote all the code that tells a specific person their own numbers. It never runs, because nowhere do we write down how many months they agreed to. One saved number switches the whole thing on. We left it off on purpose — making up a lease end date for someone about to sign is worse than saying "let me get someone" — but the fix is small.

D3 — What gets built first for Camellia?

Three plausible orderings for the same list of blockers.

In plain terms

Most of what we cannot answer is not missing code — it is missing facts nobody has typed in yet. What is the admin fee, how much insurance do you need, can I pay by personal check, when must the power be on, how long do I have to sign. Writing those down is an afternoon and it fixes four of the ten questions. The bigger engineering job can follow it.

D4 — The eval gate on the path production actually uses

In this session's supervised run the generic path scored facts 24/24 and judge 21/24 — a fail against the 90% bar. The passing 23/24 belongs to the personalized path, which production never renders. Two caveats before acting on these: the scores were not committed to the repo and need a re-run to reconfirm, and "the merge base fails identically, so this work did not cause it" is an inference from the same unsaved run rather than a measured control.

In plain terms

We have two test scores. The good one grades a version of the answer that never reaches anybody. The one that grades what people actually hear is failing three checks out of twenty-four. Before we switch this on for a real property, we should know whether those three are a real problem or just the grader being moody — the harness is known to wobble by a few points run to run.

5 · Competitive positioning — the honest take

The stage is thinly covered, not empty. Across the specific pages fetched, no vendor advertises answering proration, an itemized move-in charge, utility setup, key pickup, or the application-versus-lease confusion. That is a verified absence over those pages — with two clear counterexamples. EliseAI sells a dedicated Move-In product with checklists and document verification and publishes numbers for it. RealPage covers post-application resident Q&A on its AI Resident Agent page. Funnel's 70% figure is post-approval, not lead-stage. So the honest reading is that the stage is being automated by at least two vendors; what nobody advertises is answering the policy questions themselves.

The likely structural reason — labeled inference. Everyone grounds on PMS transactional data plus a trainable FAQ. That is enough to drive a checklist and chase a signature; it is not enough to say whether a deposit is refundable or who opens the power account. Those facts live in no PMS schema, which is exactly the substrate our per-property policy rows model.

The honest half: our advantage today is architectural, not delivered. Camellia has no typed lease policy yet, the personal half of every answer never renders, key pickup refuses the exact population it exists for, the fee catalog that the best-evidenced renter anxiety needs does not exist, and the eval lane grading what production actually says is red.

What we can defend saying today is narrow, and still worth saying: we built the policy substrate and shipped a grounded published-policy answer across voice, SMS and email. Not "we answer what nobody else can." And absence of a marketing claim is not absence of capability — several of these products could plausibly answer some of this from a configured knowledge base, which a demo should probe rather than assume. This is a window, not a moat, and the blocker list is what closing it costs.

Sourcing notes

PropFlow Docs