Phase-4 vendor scheduling — the decision brief

Proposed — decisions pending Fede / Sean / Gera 2026-07-28 companion: turnover scorecard companion: ADR-0116

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

DecisionWho decidesStatus
1. Vacant-unit auto-book autonomyFede/SeanOPEN
2. Outbound vendor voice in Phase 4 vs text-firstFede/SeanEffectively 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 sourceGera (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.

Option A — full auto-book

Clara books first-available, writes the entry window to the work order, and notifies the PM after the fact. Fastest turnaround; zero PM taps; the risk is a bad booking (wrong vendor day, access not ready) discovered after it's confirmed.

Option B — PM approves each booking

Clara proposes the slot, PM taps yes. One tap per job, but it re-introduces the human bottleneck on exactly the case (vacant) where coordination is trivial.

Option C — auto-book with a hold window

Clara books, but the confirmation to the vendor goes out after a short PM veto window (e.g. book at 9am, vendor confirmed at 11am unless the PM objects). Middle ground; costs latency.

Context worth weighing: the turnover flow already texts the PM for vendor selection confirmation ("I need vendor X, Y, Z" → PM says yes). If the PM has already approved the vendor and the work, a second approval on the time slot may be pure friction — which argues for A on turnovers specifically, with B/C reserved for non-turnover maintenance.

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?

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:

  1. propose_schedule currently fabricates generic slots — it must read real VendorMembership.availability before any booking path is honest.
  2. 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.)
  3. Occupied path reuses the in-house availability-relay machinery (composeAvailabilityRelayActivity, awaiting_schedule_tenant) — architecturally supported, needs wiring for external vendors.
  4. 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

Corrected 2026-07-29 after a source audit.

PropFlow Docs