A website prospect (Jayson Edwards, studio, move-in Aug 9) asked email Clara:
“Could you give me a rough estimate on what the deposit would look like?”
Clara escalated to the property team instead of answering — even though Camellia's
knowledge base has a flat $300 security deposit on file
(verified in prod DynamoDB pricingDetails.securityDeposit).
The escalation was not a bug and not a hallucination: Clara followed
RULE 7.0 in clara-leasing.ts exactly as written. The problem is the rule itself —
and that voice Clara follows the opposite rule.
| 2026-03-13 | get_property_details split into focused tools. The new
get_pricing_details returns the security deposit but its description never
mentions it (“parking, pet deposit/rent, admin fee, application fee”) — a latent
tool-routing gap from day one. |
| 2026-05-27 | PR #1545 (anti-over-escalation, RULE 7.4) lists “an applicant-specific deposit amount” under WHAT STILL ESCALATES. |
| 2026-07-19 | INJECT-4: voice calls get a {{pricing_fees}} block injected at
call start, including “Security deposit: $300”. |
| 2026-07-21 | PR #4283 adds RULE 7.0 ALWAYS-ROUTE to the text/email prompt: “what's my deposit?”, “how much upfront?” → never quote a figure, always forward to the team. Motivation: a red eval sweep where Haiku ad-hoc answered fair-housing-sensitive asks (deposit assistance, vouchers, credit minimums). |
| 2026-07-22 | PR #4316 locks the voice design the opposite way: deposit amounts are quotable; only absent refund terms defer to the team. Verified live the same day. |
| 2026-08-03 | The Jayson conversation hits the contradiction on the email side. |
| Channel | Prospect asks “what's the deposit?” | Source |
|---|---|---|
| Voice | Quotes “$300” (defers refund terms only) | leasing-context-injection.ts, PR #4316 |
| Email / SMS | Always escalates to the property team | clara-leasing.ts RULE 7.0, PR #4283 |
Same property, same $300 flat deposit on file, same question — opposite behavior, shipped one day apart.
PR #4283's target was legitimate: deposit assistance is a source-of-income /
protected-class topic (Denver/CO), and credit/income eligibility is genuinely applicant-specific.
But the rule as written also captures the plain “what's the deposit amount?” ask — which, at a
property with a flat published deposit, is ordinary pricing data Clara already quotes on voice.
The fix PR was aimed at Haiku's eval-bridge behavior, but CLARA_CONCERNS_RULES ships
to production for every model and channel.
Narrow RULE 7.0's deposit clause: when the property has pricingDetails.securityDeposit
on file, quote it as the standard deposit (“the standard deposit is $300; the final amount is
confirmed with your application”) and defer refund terms unless on file. Keep ALWAYS-ROUTE for
deposit assistance, vouchers, credit/income eligibility, and any “what will my
deposit be after screening?” follow-up. Also add “security deposit” to the
get_pricing_details tool description so the lookup fires.
Remove the security-deposit line from the voice {{pricing_fees}} injection and route
deposit-amount asks on every channel.
Accept that written channels are conservatively routed while voice quotes the amount.
5ad73675-7da0-43e6-bee3-ebafe6d0f2b3 (Camellia, email, escalated 2026-08-03 16:42 UTC). Forward reason generated by Clara: “security deposit amount … applicant-specific and requires human review” — paraphrases RULE 7.0.PROP#1773625953462 / KNOWLEDGE → pricingDetails: securityDeposit 300, petDeposit 100, petFee 250, petRent 35, applicationFee 38, adminFee 0, parking 80–95.agents/clara/lib/agent/clara-leasing.ts (PR #4283, commit 62de14a75).src/lib/integrations/voice/leasing-context-injection.ts (PR #4316, commit 36b750d98).get_pricing_details description omits security deposit since the 2026-03-13 tool split (commit a05ccb826).