Vendor Calling — Turn-On Readiness Scorecard

Overnight measurement campaign, 2026-07-30 → 07-31 · all numbers measured live unless labeled estimate · The Willows bench (appfolio-45) only; no Camellia data touched

Bottom line

The full production loop is proven live end-to-end: review queue → approve → real dial → conversation → transcript → outcome → work order scheduled → calendar mirrored → callback recognized → reschedule applied. The night's open question — IVR menu navigation — is now answered and bounded: the agent cannot press mid-speech (a hard ElevenLabs platform limit, proven across every config), but presses correctly at the first silence 9/9 times. What remains before turn-on is merging tonight's four fix PRs, the arm decision, and a supervised first call.

Scorecard

LaneBefore (start of night)After (measured)Verdict
Real-job E2E (schedule → callback → reschedule)Untested as one loop3/3 legs PASS live — real WO scheduled by a call (firm Aug 4 2:00 PM), vendor callback recognized by phone with correct PO cited, reschedule moved WO + calendar event in place. Call QA 4/5, 5/5.PASS
Review-queue chain (UI → approve → dial → record → transcribe)Assumed built, unprovenSpine proven at every hop with record-level evidence (adversarially audited). 10 defects found, ranked; top 4 fixed same night (PRs #5114, #5115, #5117 + prompt fix).PARTIAL → fixes in flight
Off-phone behavior battery (23 gating scenarios vs live agent)16/23 (two consecutive runs)20–22/23 stable, 23/23 peak across 32 runs. Every targeted scenario flipped green: overnight-hour sanity check, closing discipline, wrong-number etiquette, hold acknowledgment, name-mismatch echo, PO spoken in reason-for-call, no-narration rule. Live agent verified byte-identical to merged source.PASS (87–96%)
Continuous-menu IVR (the Royal Textile failure)0/3 real probes ever pressed; cause unknownCause isolated + bounded: 9/9 pressed correctly at first silence (78.9–83.7s on a 78s menu) over SIP; mid-speech press impossible on any config.BOUNDED
DTMF transportPresses inconsistently heard by real IVRs (in-band)SIP trunking delivers RFC 4733 that Twilio Gather detects, every run. PoC rig standing.SOLVED (migration decision pending)
Human-detection safetyInstant-hangup rule, small sample10/10 clean human aborts across two sweeps (4–27s, zero words spoken to humans, zero forbidden presses incl. explicit emergency-option refusals).PASS
Verified caller ID (Camellia office line)Unproven conceptFull chain proven with test numbers; Camellia runbook written (one 6-digit code keyed at the office). Resolver works unchanged.READY

The turn-taking answer (the night's centerpiece)

Every prior press-failure against real IVRs traced to one cause: ElevenLabs never gives the agent a turn while the far side is speaking. Turn detection is a probability threshold on VAD silence — no silence, no turn, regardless of configuration.

What real businesses actually do (94 dials of ground truth)

FindingEvidence
~53% of vendor-type businesses answer with a human during hours81-business daytime sample
Even at 10:30 PM, ~50% of trade contractors put a live human on the line (answering services, forwarded cells)Sweep 2: 5 humans in 10 calls — "after-hours = unstaffed" is false for this vertical
Gate navigation works on cooperative IVRsRedi Carpet: clean 2-layer navigation to voicemail; Piper: correct option, emergency options explicitly declined
In-band DTMF is unreliable per-platformAllstar + Drain Pros menus replayed verbatim after presses; Miracle Method ZIP gate consumed presses fine → SIP migration is the fix
Dead ends exist that no config solvesRoto-Rooter: pure marketing loop, no menu; Colorado Conveyance: mailbox full — needs re-dial cadence (built, #5063) + eventual cross-channel fallback

Defects found and fixed tonight

Defect (all live-proven)SeverityFix
Callback context pairs one work order's job with another's time — Clara read a nonexistent slot aloud and the vendor confirmed itHighPR #5115
dispatch_work_order silently binds a different vendor while telling the PM "unassigned" (record self-contradicts)HighPR #5114
PO number in payload but never spoken on a purchase-order-mode call (vendor invoices against it)HighMerged (prompt PR) — spoken once in reason-for-call, hard anti-fabrication rule, never leads the call
Agent spoke a narration turn aloud into a real call ("(Menu has finished. Pressing 3…)") despite tool-speech config offMediumMerged (prompt PR) — no-narration rule
PO cache 24h staleness cliff → bogus "PO required" hold for a PO that existsMediumPR #5117
E2E rig reported false green by matching stale queue rowsMedium (test infra)PR #5117
Truncated PO fetch marked real POs removed (wiped bench read model mid-run)MediumMerged (#5111)

Still open, ranked lower: PM notification unproven on bench (email sink), bench units don't exist in AppFolio (PMS-write leg untestable there), audio endpoint ignores Range requests (seek likely broken), stale robo-vendor PO scenario, PO approvalState unfiltered. Details in the QA audit memory/report.

What turning on requires

Sources: live E2E agent report (4 calls), review-queue QA workflow (5 agents, adversarial audit), turn-taking experiment log (10 calls), sweeps 1–2 (23 businesses called of 130 targeted), simulate-battery logs, verified-caller-ID PoC, SIP PoC. All raw call IDs and DDB keys preserved in session records.

PropFlow Docs