For Florida law firms
Calendar — OAuth push (Google / Microsoft)
firm lane · Connector
Current availability
StagedBuilt and dormant until a firm turns it on: the firm's own OAuth credentials.
- Where it lives
- /api/calendar/connect
- What unlocks it
- a firm admin
Status is evaluated against this deployment's configuration by the capability-status service at build time; the catalogue's facts were last reviewed on the date shown.
Capabilities
- StagedPush a matter's CONFIRMED dates into the firm's own calendar by API — never a proposal: one all-day event per step, updated in place when a date changes (master plan Phase 12 part 3, M-1204; the plan's M-1506 is this same push, recorded in Phase 15 with nothing new to build).
- StagedEach event says where it came from and how the date was reached: the matter, the rule and the edition it was read in, the event the count starts from and where that date came from, the counting method, that it is an all-day Florida calendar date, and who confirmed it and when — and, once its facts change, that the firm confirms the newer date before this one changes.
- StagedNothing is deleted: a step that is done keeps its event, marked closed; an event changed in the calendar since it was pushed is left as it is (the version the platform last wrote is checked first); an event its owner removed is not added back; a provider that cannot take an event now is said, and the next push tries again.
- StagedOne event per step even when a record is lost: every create carries the step's own identifier, so a create whose answer or record was lost finds its event on the next push instead of adding a second.
Limits
- Dormant until the firm supplies its own OAuth credentials; the ICS feed works today.
- An event changed or removed in the calendar stays as its owner left it — the push does not take it back.
What EstateDraftFL refuses
| Reason code | HTTP | What it means |
|---|---|---|
| matter_archived | 409 | An archived matter's dates are not pushed. |
| unavailable | 503 | The matter's dates could not be read just now — nothing was pushed. |
Evidence
- src/lib/calendar.ts
- src/lib/deadline-count/push-plan.test.ts
- src/lib/phase12-part3-routes.test.ts
- src/lib/deadline-count/push-plan.ts
- src/app/api/calendar/sync/route.ts
- supabase/migrations/20260930210000_phase12_calendar_push.sql
Last reviewed 2026-10-02