boas.dev Scheduling Suite — Product-Ship Roadmap
GitHub Project #26 · ship whole products in order · Calendar first · draft pending athena · metis 2026-06-21
Operating principle. The suite ships as discrete working products, one finished before the next — not cross-cutting layers (operator ruling 2026-06-21). Launch = live + E2E-verified, not merged-and-claimed. Dates are dependency-ordered proposals (P11).
Ship order
| # | Product | One-line | State | Epic |
| 1 | Canonical Calendar App | one place to see/control all events; bookings auto-appear; ICS subscribe | ~85% — verify+close | #70 |
| 2 | Meet (rooms + invitee/dashboard) | book → invited → join → manage → post-meeting hub | mostly live | #41 |
| 3 | Proposals & Negotiation | send booking proposals; accept/decline/counter/reschedule | F1/F12 live, rest open | #74 |
| 4 | CRM (Client Pipeline) | bookings auto-enrich contacts/orgs/deals | Shape-4 locked | #43 |
| 5 | Transcription Engine | consented transcripts on /m/ | research-stage | #110 |
Cross-cutting, threaded in (not standalone): Mercury email delivery (#42) · Auth pivot (#97) · Foundation infra meet auto-deploy #132 + wrong-project key #133 — both pulled forward into Calendar.
PRODUCT 1 — Canonical Calendar App
Epic #70 rescope "Forward Scheduling & Canonical Calendar" → "Canonical Calendar App (v1)". Design of record: 2026-06-11-pantheon-calendar-design.md.
Definition of done: operator opens pantheon.boas.dev/calendar, sees all events from every source (month/week/day), creates/edits/drag-reschedules, subscribes via ICS, and cal.boas.dev bookings auto-appear. events is the canonical SSOT. Every input stream proven E2E.
Components — build state (ground-truthed 2026-06-21)
| LIVE | events SSOT — DDL, RFC-5545, booking trigger, RLS grants | proteus 20260611_events_calendar.sql |
| LIVE | Hub Calendar VIEW — month/week/day, create/edit/drag, kind picker, rrule presets, meet-link, ICS panel | _K4120S/pantheon CalendarPage.tsx |
| LIVE | Hub backend /api/events (GET/POST/PATCH/DELETE), tier auto-detect | routes/events.ts (tier:"live" 06-11) |
| LIVE | ICS feed out — /api/cal/<token>.ics, TRANSP map, tombstones | meet-boas-dev; EVENTS_RO_KEY wired |
| BUILT | sched-mcp — 6 tools, PostgREST two-header, rrule expand | 41 unit tests pass; live E2E pending |
Data streams INTO events (the SSOT)
| Source | Write path | Status |
| cal.com | booking → CF shield → n8n → meetings → DB trigger → events | LIVE (re-confirm post-shield = the one open proof) |
| session | sched-mcp schedule_create (any Claude session) | E2E PENDING → flips 79ca3cd2 wired |
| hub | Hub UI create → POST /api/events | LIVE but #115 no idempotency (dup rows) |
| mercury | mercury → events (DDL allows source=mercury) | UNVERIFIED — no path confirmed. v1 or v2? |
OUT: ICS feed (Fastmail/Apple) ✅ · Hub view ✅ · meet /m/,/me read events ✅
Remaining tasks to DoD
| # | Task | Owner | Issue |
| 1 | sched-mcp live E2E round-trip (create→list→update→delete) → flip 79ca3cd2 wired — proves session stream | metis | #62 |
| 2 | events dedup idempotency on Hub create path (kill dup rows) | metis/apollo | #115 |
| 3 | mercury→events stream — decide v1-needed; wire+prove or mark v2 | metis | file |
| 4 | AUTH-4 calendar-surface auth — CF Access can't be passed by cal apps → resolve Hub-view vs ICS split | metis+athena | #101 |
| 5 | meet CF auto-deploy — ICS feed on meet-boas-dev; manual-deploy drift | hades/ops | #132 |
| 6 | /api/events/meta tier test + fresh-session env audit (writer/anon/feed token in Hub env) | metis/hades | file |
| 7 | heph PR#72 window-overlap advisory fold-in | metis | PR#72 |
| 8 | wrong-project key — metis-direct events write hits boas.dev not Pantheon | hades/proteus | #133 |
| 9 | personal_schedule retirement — confirm+close (orphan, never existed) | proteus | close |
| 10 | Board close-out reconcile | metis | #62#69#70 |
Critical path: sched-mcp E2E (1) → wired flip → idempotency #115 (2) + auth resolve #101 (4) + auto-deploy #132 (5) → meta/env audit (6) → board close (10). Tasks 3,7,8,9 parallel/cleanup. Then: Calendar = SHIPPED.
Carved OUT to Calendar v2: sched Worker remote MCP (#116/#117) · CalDAV server/adapter · external 2-way sync · AI auto-scheduling (deferred — "ritual > AI") · double-booking warnings · multi-person attendee UI · ICS token-regen UI.
Products 2–5 — headlines (detailed when their turn comes)
- P2 Meet #41: /m/ post-meeting hub (#124), full E2E suite (#126), /p/ shell (#128), send-invite date bug (#129), Cal↔Meet bridge (#71) + auth-pivot slice (#55,#58,#59,#98–#109).
- P3 Proposals #74: F2–F11 (#75–#83), F11 hub UI (#91), reschedule-by-negotiation (PR#130 + proteus schema + hades PROPOSAL_HOST_HMAC) + Mercury nudge slice (#95,#96).
- P4 CRM #43: crm-v1 Stage-1 enrichment; cross-links P2 #59 + P3 F7 #80.
- P5 Transcription #110: file D1–D6; D5 consent HARD GATE; surfaces on P2 #124 /m/ hub.
Athena ratification asks
- Ratify product-ship-order framing + "everything-works" no-fabricated-date posture.
- Authorize rescoping #70 → "Canonical Calendar App (v1)" + carving forward-scheduling (#116/#117 + CalDAV/AI) to a new v2 epic.
- Board machinery on #26: tag Product-1 issues to a "P1 Calendar" iteration; rule cross-fleet dep tracking (proteus/hades/apollo as #26 deps vs home boards).
- Resolve calendar-surface auth (#101): CF Access can't be passed by calendar apps — confirm Hub-view (Supabase session) vs ICS-feed (token) split.