Foundation build + Track F feature map — short branded links, one-click proposed-time accept, prep material, full pipeline test.
Proposing a meeting today means a long parameter-encoded Cal.com URL — fragile in transit (broke in the Arndís test), ugly to send, and the recipient lands on a generic booker: no "this is the proposed time" framing, no prep material.
meet.boas.dev/p/arndis-jun18 — short, branded, zero parameters. The page does the rest.Both paths converge on the proven booking pipeline — nothing downstream changes.
| Decision | Ruling |
|---|---|
| Board placement | #8 Themis-PM, new Track F epic — project-grep verified all scheduling/meet/cal work lives there. No new board. |
| athena-063 (#39) — meet.boas.dev canonical repo | constellation-metis. Apollo PRs into it; metis reviews domain code. |
| metis-072 (#60) — Cal.com revive or drop | Stays. Accept-flow + slot inventory are built on it. Close #60 with this ruling. |
| Short-link domain | meet.boas.dev/p/<slug> — existing Pages project, /p/ avoids room catch-all. No new zone. |
| Long URLs to recipients | Forbidden (operator). Slug is the link; Cal params stay server-side. |
proposals tablePantheon Supabase, sibling of meetings/events. Slug, proposed time, attendee, prep markdown, status (pending/accepted/declined/expired), booking_uid on accept. New RLS role proposal_writer; anon read by slug only — slug is the capability, no enumeration. DDL via proteus (data-feed leg).
proposal_createAny agent session: "propose 18 Jun 11:00 to Arndís" → validates slot against Cal.com availability → inserts row → returns the short link. Companions: proposal_list, proposal_cancel.
GET /p/<slug>Hero: title + proposed time in the recipient's local timezone. One-click Accept → server-side Cal.com v2 booking (email prompted if not pre-set). Fallback slot picker, day-prefilled. Prep markdown rendered. States: pending / accepted / expired / declined.
CAL_API_KEY newly minted (recurring server-side need now justified), PROPOSAL_WRITER_KEY RLS-scoped JWT — both vaulted + staged on the meet-boas-dev Pages project. Zero key material client-side.
Slot taken between mint and accept → "that time was just taken" + picker fallback. Missing env → fail-closed 503, never silent degrade (Hub mock-tier lesson). {error} envelopes everywhere.
Engineering hands over with unit tests green (Cal API mocked) + preview deploys verified. Metis then owns the full-pipeline E2E: mint → page → accept → Cal invite → webhook → meetings/events → /calendar render → ICS feed. That E2E is the "full test of this pipeline" ordered — covering the task-023 gap (source-verified, never click-tested).
| # | Feature | Note |
|---|---|---|
| F2 | Operator creation UI | mint from /calendar or /me — removes agent-mediated minting |
| F3 | Multi-option proposals (2–3 slots) | most-requested scheduling pattern |
| F4 | Multi-attendee polls | doodle-class; bigger model, separate design |
| F5 | Expiry + automatic nudges | needs send-infra decision (Cal vs mercury/SMTP) |
| F6 | Decline-with-message + reschedule request | |
| F7 | CRM linkage | attendee ↔ contacts; auto-prep from CRM; ties to B0.8 |
| F8 | Proposal templates + prep defaults | |
| F9 | Analytics (open/accept rates) | privacy-light, page-side only |
| F10 | Branded short domain (boas.dev/m/…) | only if meet branding insufficient |
| Step | Who | What |
|---|---|---|
| 1 | proteus | DDL + proposal_writer role (data-feed leg per operator ruling) |
| 2 | hades | CAL_API_KEY mint + key staging |
| 3 | apollo | page + functions + mcp tool — PRs into constellation-metis, Class C → heph |
| 4 | metis | ratify Track F (#73 merge) + roadmap amendment + full E2E + integration sign-off |
| 5 | athena | epic + F2–F10 children on #8 · close #39/#60 with rulings · evidence comment |