ADR-0072 — Walk-in (on-site) prospects are tracked, not booked

Context

Clara talks to prospects over voice, SMS, and email, and her leasing flow is built around scheduling a future tour (schedule_tourcheck_availability → propose/confirm a slot). That framing fails the hottest lead there is: a prospect who is physically on-site right now.

In the 2026-06-29 on-site incident, a Spanish-speaking prospect drove to a community, stood outside, and could not find the leasing office. Clara gave him the street address he was already standing on, pointed him at a website map, handed him a phone number that looped back to Clara, and offered to book a tour for the next day. A human walked out and found him ~37 minutes later.

There are two distinct gaps:

  1. Behavior — Clara does not recognize "I'm here now / I can't find the office" and respond with wayfinding + a get-them-in-now path. (Partly addressed for voice already — see Consequences.)
  2. Data — a walk-in creates no record. A PM cannot see it happened, measure how often it happens, know whether the prospect ever toured, or follow up. Conversion tracking and lead-source ROI are impossible without a record.

Research (industry + this codebase) settles the modeling question:

Decision

Treat an on-site / walk-in prospect as a first-class, tracked arrival event, modeled as a lead-source distinction — not a new tour-format type, and not a self-guided tour.

Behavior. When a prospect signals they are physically on-site or can't find the office, Clara:

Data model — prospect-only (decided). No new export interface, and no Tour row is created for a walk-in:

This ADR adds no new entity and no new field — it activates an existing enum value on ProspectInquiry (canonical, spine-traced via personId). The ADR-0027 new-entity classification table is therefore omitted.

What is the same, and what is different (walk-in vs. scheduled tour)

Scheduled tour Walk-in (on-site)
Prospect captured on the spine (Person + ProspectInquiry)
Appears in the prospect pipeline + conversion reporting ✅ (filterable by source = walk_in)
Clara captures name/contact, answers questions, can escalate
Fair-Housing-consistent intake / disposition
Arrival booked a future date/time physically here, now, no appointment
schedule_tour / a future calendar slot ✅ created ❌ not created
Outlook / Google Calendar event ✅ synced ❌ none (it already happened / is happening)
24h pre-tour reminder SMS ✅ armed ❌ never armed (would fire immediately)
Lead source inbound channel (phone/email/website…) walk_in
Clara's first move check availability → propose a slot → confirm read office wayfinding → get them in now → escalate to a human if stuck
Follow-up anchor the future tour time the visit time (createdAt)
Post-visit "apply now" link after the tour completes may fire promptly
Tour record created (mode: in_person|virtual) none — tracked on the prospect (source = walk_in), no Tour row
Self-guided / one-time unit access code ❌ (only office wayfinding, from property knowledge)

Consequences

Alternatives considered