Phase-4 vendor scheduling — the decision brief
Phase 4 of the vendor-coordination plan (ADR-0059) is the calendar/booking work: Clara actually placing external vendors on a schedule. The build is deliberately held until the decisions below are made (sequence discipline in the plan: "do not start Phase 4 build before its three design decisions are made by Fede/Sean/Gera"). This page lays them out so they can be decided in one sitting.
Status of the original three
| Decision | Who decides | Status |
|---|---|---|
| 1. Vacant-unit auto-book autonomy | Fede/Sean | OPEN |
| 2. Outbound vendor voice in Phase 4 vs text-first | Fede/Sean | Effectively decided 2026-07-28 — outbound calling is built, evaled, and merged (PO-lead opener, #4782); it exists ahead of Phase 4 rather than inside it |
| 3. Occupied/vacant flag source | Gera (architecture) | OPEN |
Decision 1 — Vacant-unit auto-book: how much autonomy?
When a unit is vacant there is no tenant to coordinate with, so Clara could book the vendor's first available slot with no human touch. The question is whether she may.
Decision 2 — Occupied/vacant flag: derived or stamped? (Gera)
Scheduling branches on occupancy (occupied = tenant-availability relay; vacant = book-first-available). Where does that flag come from?
- Derive at schedule time from unit occupancy + turnover context: always current (a unit that fills between WO creation and scheduling flips correctly), but the schedule path takes a dependency on occupancy data being reliable at read time.
- Stamp on the WO at creation: deterministic and auditable per work order, but can go stale — the known failure shape is scheduling a "vacant" unit someone has moved into.
This is Gera's call per the plan; the recommendation whoever builds it will need is a single source-of-truth function either way, not scattered reads.
Not decisions, but blockers the build hits immediately
From the plan's Phase-4 item list — these are engineering gaps, listed so the decision meeting knows the true scope:
propose_schedulecurrently fabricates generic slots — it must read realVendorMembership.availabilitybefore any booking path is honest.- Structured scheduled-window capture — most WOs have null windows today; the calendar feature is blocked on this data, not on UI. (This is also why bench Clara "couldn't answer when it's scheduled for" on the 2026-07-28 live test: no scheduled date existed to read.)
- Occupied path reuses the in-house availability-relay machinery
(
composeAvailabilityRelayActivity,awaiting_schedule_tenant) — architecturally supported, needs wiring for external vendors. - Day-of reminders + "on my way" relays for external vendors (timer patterns exist; "on the way" is external-vendor-only per the 2026-06-16 decision).
Related decisions already made elsewhere
- Outbound calls lead with the PO or don't happen at purchase_order properties (ADR-0116 §6, shipped #4782): the no-PO case holds the dial and prompts the PM to mint one first. The gate — no work scheduled without a PO — is Joanna's (Camellia PM) ruling, single-sourced to her 2026-07-28 SMS; the opener position (saying the number first) is a PropFlow design decision supported by the invoice-PDF field statistic. Any Phase-4 booking flow at a PO property inherits this gate.
- No proactive AI disclosure on outbound vendor calls; disclose honestly if asked (Fede, 2026-07-28).
- Calendar surfacing for the PM team must not block tours (July 22 brief, item 15).
Corrected 2026-07-29 after a source audit.