Every setting a property manager can see in PropFlow, what it is called, where it is stored, where its value comes from, and what Clara does with it. The phone-number fields come first, because one of them caused the Camellia transfer loop.
Captured 2026-10-21 on production, look-only (nothing saved), on the test company Fairhaven Residential (TEST) · code read at the tip of main the same day · Proposed — pending review · background: Camellia phone line RCA
The short version. "A caller wants a person" is answered by two different mechanisms: lists of people (ring lists, Talk to a person) and a free-typed Office phone per building. The lists check for loops when saved and keep a history. The Office phone checks format only, keeps no history, fires no alert, and any team member can change it at any time.
The only loop guard is a hand-kept list of lines that forward into Clara. Camellia's main line was never on it, so typing it into Office phone sent every person-ask back into Clara.
Ten settings decide who a call goes to. Rows marked risk are free-typed numbers a manager can save with no check that the number rings back into Clara.
| Shown as | Where | Stored as | Who can change it | Checked on save | History | What Clara does with it |
|---|---|---|---|---|---|---|
| Office phone risk | Calls & messages, building only | Property.officePhone | Any team member, any time, also after go-live | Format only | None | Dialed when a person-ask finds no list. Also dialed directly by the vendor transfer and the on-site-access transfer |
| Emergency phone risk | Calls & messages, building only | Property.emergencyPhone | Any team member | Format only | None | Emergency relay call (no loop guard); second choice behind Office phone |
| Talk to a person partly | Calls & messages, company and building | setting human_handoff | Company: PropFlow only. Building: any member | Number format, 1–5 entries. No loop check. Accepts typed numbers, not only teammates | Yes | Rings the list in order, then takes a message |
| When a leasing caller asks for a person, Clara rings | Call routing card, company | ring_list.leasing | PropFlow; the company only before go-live | Teammates; refuses numbers that loop | Yes | Rings the list; wins first for leasing asks |
| When a maintenance caller asks for a person… | Call routing card | ring_list.maintenance | Same | Same | Yes | Rings the list |
| When any other caller asks for a person… | Call routing card | ring_list.catch_all | Same | Same | Yes | Rings the list |
| Calls Clara can't help with forward to | Call routing card | catch_all.office_line | Same | Format + loop refusal | Yes | Forwards everything else |
| Maintenance calls go to | Call routing card, read-only | maintenance.intake_route | Onboarding answers and scripts | Format | Yes | Sends repair calls to the call center |
| Emergency on-call | Calls & messages, company | emergency.route.* | PropFlow and company admins | Teammates, at least 2, loop refusal | Yes | Calls, texts and emails in order until someone answers |
| Office phone Clara may give residents | Onboarding, General questions | settings.emailSignature.phone | Members before go-live, PropFlow after | — | Onboarding stamp | Printed in emails. Never dialed, despite the same name |
Not in the app: a building's leasingDeskPhone (set by script only; the number Clara reads out to callers). Escalation owner is an email, not a phone. Sources: scoped-fields/calls.ts, human-handoff-route.ts, call-outcomes.ts, api/settings/call-routing/route.ts, api/properties/[id]/route.ts.

(303) 555-0142 reads like a saved value. The help text says "Clara transfers callers here… when they ask to speak with someone."






human-handoff-route.ts lines 500–544, voice personalization route (office-phone fallback, vendor and on-site transfers), clara-line-loop.ts, config/phone-registry.json.Follow-ups card plus links to every topic page.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Follow-ups | when Clara chases quiet leads, tenants, vendors | both | card only | typed | member or staff | size and delay limits | FOLLOWUP# cadence rows |

Company view; the building view adds four notice switches.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Tour length | length of the calendar block | both | empty → PropFlow default 30 min | typed / onboarding | member or staff | 15–120 | org tourDurationMinutes; building leasing settings | |
| Video tour link | sent in confirmations and reminders | company | blank | PropFlow | staff only | https, checked three times | org videoTourLink | |
| Application link mode | decides who sends the application | company | Same link for everyone | typed | member or staff | allowed values | org applicationLinkMode | |
| Application link | risk a bad link goes straight to prospects | texted and emailed to prospects after tours | building | blank | typed | any member, no lock after go-live | any URL scheme passes (new URL() only) | building leasing settings applicationLink |
| AppFolio sends the application by email only | whether Clara also texts it | company | shown | typed | member or staff | on/off | org applicationLinkClaraTexts | |
| Tour showers | who can be booked for tours | company | none | typed / onboarding | member or staff | teammates only | org tourShowers | |
| Buffer between tours | spacing between booked tours | company | PropFlow default | typed | member or staff | 0–120 | org tourBufferBetweenToursMinutes | |
| Guest card note after a text · Email when a tour can't be booked · Email when a booked time is gone · Text the prospect when a booked time is gone | notes and notices; the last one texts the prospect | building | all off | typed | member (first one needs PropFlow approval) | on/off | building leasing settings |

One company amount, with per-building exceptions.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Application fee · Admin fee | watch Company knowledge text also states an application fee | quoted to prospects | both | Prefilled (unconfirmed) | prefill at property creation | member, no lock | $0–100k | PropertyKnowledge.pricingDetails |
| Security deposit | watch knowledge text says "one month's rent" | quoted | both | PMS backfilled; "Apply to 30 remaining" | AppFolio charges, one-off script | member | $0–100k | same |
| Pet deposit · Pet rent (monthly) | risk same facts show "Not set" on Policies and different amounts in knowledge text | quoted | both | Prefilled | prefill | member | $0–10k | fees.petDeposit, fees.petRent |

Offer rules (read-only card), seven questions, and a per-building start day.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Renewal offers (8 rows: rent, lease lengths, month-to-month premium, past-due, late payments, hold threshold, who sends, review) | watch +$150 here, +$100 in knowledge text | builds and gates each offer | company | market rent; 12 months; month-to-month +$150; …; review on | onboarding | PropFlow after go-live | per-row schema | renewal.* settings |
| Seven follow-up questions (timing, no-reply, eviction marker, do-not-contact…) | watch looks live, isn't | nothing reads them yet ("Clara will use this soon") | company | Not answered | typed | member or staff | ≤1000 chars | onboarding.collected.* |
| Open renewal (days before lease end) | when the renewal starts | building | empty → company 90 | typed | member | 1–365 (company 14–180) | building leasing settings |

The phone rows are in section 2. The rest:
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Ring time (seconds) | how long each phone rings | both | 20 | PropFlow | staff at company, member at building | 5–30 | human_handoff | |
| Office hours | watch knowledge text gives different hours | in-hours vs message | company | Mon–Fri 8:30–5 | onboarding | PropFlow after go-live | hours editor | office_hours |
| Shows (caller ID per destination) | what the person's phone shows | company | caller's number | PropFlow | PropFlow after go-live | two choices | transfer.caller_id_by_destination | |
| Escalation owner | where team notices go when a building names nobody | company, building inherits | a test inbox | onboarding | PropFlow after go-live | valid email | Organization.escalationOwnerEmail | |
| Never say or promise · Main language · Second language | prompt rules; offers Spanish | company | Not answered | typed | member or staff | length / options | onboarding.collected.* | |
| Holiday closures (building) | watch the calendar option is stored but not read | closed days for tours and calls | building | US federal default | typed | member | names only; calendar URL https | PropertyKnowledge.holidayPolicy |
| Other names for this building | matches what callers call the building | building | Juniper House | typed | member | — | PROPALIAS# rows |

Company page; the building page asks you to pick a building.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Who gets the weekly lead summary | watch label says weekly; it sends Monday and Friday | sends the lead summary | company | Not set (off) | onboarding | PropFlow after go-live | valid emails; need not be teammates | leasing_digest.recipients |

| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Leasing email (Microsoft 365) | reads and sends Clara's email | company | connected | typed (sign-in) | member | OAuth | mailbox connection | |
| AppFolio | watch the test company points at a real customer's AppFolio database | sync of units, rents, tenants | company | connected, last synced 12 days ago | PropFlow | staff | — | PMS connection |
| Tour calendars · Maintenance calendars | tour pool (same key as Tour showers); maintenance list is not read | company | nobody | typed | member | teammates | org tourShowers; maintenanceCalendarPeople |

| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Invite email · Role · Building access | who can sign in and see what | company / building | 9 teammates | typed | admin | server checks only for "@" | users and memberships |

| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Plan | — | company | no plan; 200-unit minimum | PropFlow | staff | — | Stripe |

47 questions in ten sections plus 17 free-text knowledge entries, company and building. Grouped by section.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Pet fee · Pet deposit · Monthly pet rent | risk conflicts with Fees page and knowledge text | pet answers | both | Not set | typed | member or staff | $0–10k | fees.pet* |
| Your company: portal link · other names | watch | not read today | company | Not answered | typed / PMS hint | member or staff | no URL check | onboarding.collected.* |
| Pets (1) · Applying (9) · Money (4) · Lease (5) · Rules (5) | what Clara answers | both | some from AppFolio (rent due 16th, month-to-month) | prefill + typed | member or staff, no lock | money 0–1M | knowledge.* | |
| Building & amenities (6) | risk wrong text offered as an answer | what Clara answers | both | Utilities hint is listing marketing text | AppFolio listings ingest | member or staff | money 0–1M | knowledge.* |
| Tours & move-in (4) · Living there (3) · Move-out (3) · Custom (1) | what Clara answers | both | blank | typed | member or staff | length limits | knowledge.* | |
| Company knowledge (17 entries) | risk money in free text that disagrees with the structured fields | what Clara answers | company | written by PropFlow Oct 12 | PropFlow | member or staff | ≤500 chars | knowledge.section.* |

Profile, Sign-in & security, Calendar, My notifications.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Name · Phone | risk editing your profile changes who Clara rings, no loop check | this is the number Clara rings for that person on Talk to a person and Emergency on-call | person | — | typed | the person | E.164 in the browser; server errors not shown | Person record; phone writes the primary phone |
| Email · Role · Time zone · Photo | display | person | Platform Admin | — | the person | time zone list | user record | |
| Second step at sign-in | sign-in | person | none | typed | the person | — | auth | |
| Calendar for the tours you give | books tours on it | person | not connected | typed (sign-in) | the person | OAuth | calendar connection | |
| Email me when a tour is booked… · Text me prospect updates + Your mobile | risk turning on texts also overwrites the number Clara rings | tour emails and texts | person | "couldn't load" for this login | typed | the person | E.164 | staff.tourAlerts + the primary phone |

| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| SMS Messaging · Vendor Quote Emails · Vendor Dispatch Emails | watch reads as per-company, applies to all | global sending switches | every company | shown | PropFlow | staff | on/off | smsEnabled, vendorQuoteEmails, vendorDispatchEmails |

Not under Settings, but it writes settings. Fairhaven: completed Oct 10, answers locked.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Five unanswered call questions (leasing transfer, phone provider, who can change routing, after-hours, catch-all) | watch stuck after go-live | two feed routing; three are not read | company | unanswered | typed | locked after go-live; three have no Settings page | free text, no phone/email check | two write real call keys; three write onboarding.collected.phone-* |
| Buildings (per-building rows) | which buildings Clara serves | building | listed | AppFolio sync + typed | member before go-live | — | property records |

Module is off at Fairhaven, so the page redirects. From code.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Maintenance tech phone | watch | technician dispatch texts go there | building | — | typed | member | dialable + E.164 | maintenance settings |
| Send repair rating texts | rating text after a repair (default on) | company | — | typed | member or staff | on/off | maintenance.ratingPromptEnabled | |
| Auto-approve external vendors under | risk | approves vendor spend without a person | building | — | typed | member | no money limit | aiAutoApproveThreshold |
Module is off at Fairhaven. From code.
| Setting | Flag | What Clara does with it | Scope | On Fairhaven | Comes from | Who edits | Checked on save | Stored as |
|---|---|---|---|---|---|---|---|---|
| Late fee % / flat / grace period | quoted to residents | building | — | typed | member | 0–100 %, cents | fees.lateFee | |
| Past-due rent reminders | reminder schedule | company | — | typed | member or staff | cadence check | TENANT_COLLECTIONS_DELINQUENT cadence |
| # | Field | What goes wrong | Who it hits |
|---|---|---|---|
| 1 | Office phone (building) | Any member can type the line that forwards to Clara. Format check only, no history, no alert. Also dialed directly by vendor and on-site transfers. | Callers asking for a person (Camellia, 13 loops) |
| 2 | Emergency phone (building) | Same free-typed box; the emergency relay call has no loop guard. | Emergency callers |
| 3 | Talk to a person list | Accepts a typed number, not just teammates; no loop check on save. | Callers asking for a person |
| 4 | Profile Phone and Your mobile | Both rewrite the number Clara rings for that teammate on Talk to a person and Emergency on-call. No loop check; save errors not shown. | Transfers and emergencies |
| 5 | Two fields named "Office phone" | One is dialed for transfers, the other (onboarding) is only printed in emails. Same name, different meaning. | Managers filling either one |
| 6 | Application link | Any link scheme passes; any member can change it after go-live. | Prospects |
| 7 | Fees and pet amounts | The same fact lives in Fees, Policies and free-text knowledge with different values. | Prospects quoted money |
| 8 | Office hours vs knowledge text | Two sources of hours that disagree. | Callers after 5 or on Saturday |
| 9 | Auto-approve external vendors under | Money threshold with no upper limit. | Owners' money |
| 10 | Emergency on-call list | Fairhaven holds one person against a two-person minimum, with no email; the minimum is checked only at save time. | Emergency callers |
| 11 | Utilities hint from listings | Marketing text offered as the answer to a factual question. | Prospects |
| 12 | Admin SMS switch | Looks per-company, turns texting off for every company. | Everyone |
Each theme has options and one recommendation (★). Fede picks; nothing here changes until he does.
| Option | Trade-off | |
|---|---|---|
| A1 ★ | One mechanism: lists of teammates. Remove Office phone and Emergency phone from every transfer path (person-ask fallback, vendor transfer, on-site access). No list means Clara takes a message. Camellia and Yale get a list before the switch. | One signal, one mechanism. Customers with no list lose the typed fallback, so lists must be set first. |
| A2 | Keep the box but rename it to what it is, e.g. "Number Clara can give callers", never dialed for transfers; refuse any number that rings Clara. | Keeps a useful public fact; still two boxes to explain. |
| A3 | Keep today's fallback, add a loop refusal on save. | Smallest change. Still two mechanisms; the refusal depends on the forwarded-line list being complete. |
Under every option: a list entry is a teammate, never a typed number. An outside number (call center) is a named contact PropFlow adds.
| Option | Trade-off | |
|---|---|---|
| B1 ★ | Derive, then confirm. Public phone, address, hours, fees and the forwarded main line come from the website and AppFolio, shown with their source and a "this is wrong" link. The forwarded main line is recorded at onboarding and fed into the loop guard automatically. | Fewer typed facts and one source per fact. Needs a source stamp on each field. |
| B2 | Lock call routing, phone fields and fees after go-live (PropFlow edits on request), like Escalation owner today. | Safe, but slower for customers and more work for us. |
| B3 | Leave editing open; rely on (c). | No friction; relies on catching mistakes after they happen. |
| Option | Trade-off | |
|---|---|---|
| C1 ★ | All three, everywhere a number can be dialed (including Profile phone and Your mobile): refuse any number that rings Clara, keep who-changed-what history, and post an alert on every change to a transfer destination. Add the live loop alert from the RCA (a transfer leg that lands on a Clara number). | Most work; closes the class, not just this field. |
| C2 | Loop refusal and history only. | Catches the Camellia shape; a bad but non-looping number still goes unnoticed. |
| C3 | Live loop alert only. | Cheapest; finds the problem after the first caller is dropped. |
| Option | Trade-off | |
|---|---|---|
| D1 ★ | Group by what Clara does: "When someone asks for a person", "When there is an emergency", "What Clara tells callers". Each box says what happens, e.g. "Clara rings these people in order, then takes a message." "What Clara does today" lists every path that can dial a number, including vendor and on-site transfers. | A larger page rework. |
| D2 | Keep the layout; rewrite labels and help text, drop grey example numbers that look saved, and give the two "Office phone" fields different names. | Quick; does not fix the two-mechanism split. |
Also worth one line each: hide the "Clara will use this soon" questions until something reads them; say "Monday and Friday" on the lead summary; label the Admin switches "all companies".