# Vacation-mode flow End-to-end: from "I'm off Tuesday–Sunday" through auto-resume + digest. Pairs with [brief H](./H-recurring-chores.brief.md) §H1 vacation-mode and the per-source posture in [brief P](./P-inboxes.brief.md) §P3. Sibling-of-but-different-from the [kill-switch flow](./kill-switch.flow.md). Both are staged pauses, but: - **Kill switch** — instant, plain-register throughout, "stop everything," no time-bound, no per-surface wording shifts, single fast tap. - **Vacation** — declarative time-bound mass-pause with positive framing ("returning Monday"), working register for the decision, hearth for receipts, plain only when something fails. Side-effects fan out across bumping specialists, tour wording, DM auto-replies. Designed for *planned absence*, not panic. Quinn invokes vacation in advance and lives in it for days. The kill switch is for *right now*. ## Triggers (three entry points) | # | Entry | Register | Latency target | |---|---|---|---| | 1 | Voice: **"I'm off Tuesday through Sunday"** / "Take me out next week" → ai-copilot parses date range, returns confirmation card | working | <2s incl. STT | | 2 | Chat-home top bar quick-toggle (per [brief S](./S-settings-ia.brief.md) §S5 surfaces row) — pill labeled "Vacation" → opens date picker sheet | working | <1s | | 3 | Settings → S5 per-surface category → "Vacation mode" row → date picker + per-surface override checklist | working | n/a (deliberate path) | All three converge on the same `vacation-mode-activate` action. Voice + quick-toggle skip per-surface curation (use defaults — all bumping surfaces in scope); the S5 path is the place to opt out a surface. ## Step 1 — first-time explainer card Fires only on Quinn's *first* invocation of vacation mode. Subsequent invocations skip straight to Step 2 with a small "?" affordance to re-read. Working register, with detailed side-effects spelled out per brief H §H1: ``` Vacation mode · first time What this means: • Bumps pause on Tryst, TS4Rent, Slixa — every directory you're currently bumping on. • Tour wording shifts to "returning Monday" on directories that support it. Location detail stays locked (K3f-3). • DM auto-replies switch to "away" posture across iMessage, SMS, Proton, Gmail, per-surface DMs (P §P3). • Posts you've already scheduled still publish. Vacation pauses *future* drafts, not the queue. • Daily digest still arrives — quieter, mostly receipts of what didn't run. [ ] Don't show this again [ Cancel ] [ Continue ] ``` - "Don't show this again" defaults **off** — Quinn opts out, not in (per H §H1). - Continue advances to Step 2. Cancel returns to chat. ## Step 2 — confirmation card Working register. Date range echoed back; per-surface scope summarized; one tap to commit. ``` Vacation · Tue May 19 → Sun May 24 Pausing 8 bumping surfaces. Tour wording shifts on 6. DM auto-reply: away. Scheduled posts still publish. Resume automatically Monday May 25, 06:00 local. [ Set aside ] [ Confirm ] ``` - "Set aside" is the voice-aligned cancel (per [voice](./00-system-voice.md) §V7). - Confirm proceeds to Step 3 dispatch. - Tiny "?" affordance top-right re-opens the Step 1 explainer. ## Step 3 — mass-pause dispatch On confirm, ai-copilot fans out across every bumping specialist (per [brief L](./L-specialists-fleet.brief.md) — every `bookings-{directory}` instance): 1. Publish `vacation-mode.activated` event to Redis pub/sub with `{user_id, start_at, end_at, scope[]}`. 2. Each `bookings-{directory}` specialist freezes its H1 cadence policy (sets `policy.paused_until = end_at`); records an `agent_actions` row with `action_type='vacation_mode_paused'`. 3. `triage` specialist flips DM auto-reply posture to `away` per source (P §P3). 4. `bookings-*` specialists dispatch tour-wording updates (Step 4, below) to directories that support it. 5. platform.api sets `vacation_mode_active=true` + range on the user row. 6. Notifier emits a single low-stakes hearth-register push: "Vacation set Tue → Sun. Cocotte's on it." Dispatch is **idempotent** — re-confirming the same range during the active window is a no-op (Edge cases, below). ## Step 4 — tour wording auto-update Where directories support free-form tour copy (Tryst, TS4Rent, brand sites), ai-copilot writes "returning Monday May 25" or equivalent per-surface tone. Where directories only support **structured location detail** ([brief K](./K-safety-blocklist.brief.md) §K3f-3 — location-detail still gated), wording stays at the last-approved value; the structured *city* field isn't touched without explicit approval. This is a hard edge: vacation doesn't get to reveal "she's home in $CITY" by accident. Each per-surface update emits an `agent_actions` row, batched into a single H4-pattern multi-surface receipt: > Tour wording shifted on 6 surfaces. tqftw.com and bio-site say "returning Mon May 25." Tryst, TS4Rent, Slixa, Eros say the same in their fields. ## Step 5 — DM auto-reply switch Per [brief P](./P-inboxes.brief.md) §P3 per-source posture, vacation flips each unified-inbox source to its `away` template: | Source | Away posture | |---|---| | iMessage / SMS | Polite human-toned away message; preserves per-prospect tone (`triage` writes it) | | Proton / Gmail | Slightly longer, working-register away copy | | Per-surface DM (Tryst, OF, TS4Rent) | Surface-native away wording; respects K3 blocked terms | | Provider-coop channels (N) | Untouched — vacation doesn't silence coop | Quinn can per-source override in S5 before confirming (Step 2's per-surface checklist). ## Step 6 — vacation-active banner across surfaces Persistent until end of range or manual end. Hearth register (this is ambient, not interrupt): > 🏖 Vacation through Sun May 24 · 5 days remaining · Cocotte's keeping things steady. - Banner sits below the chat-home top bar, in the audit drawer header, in the calendar drawer, on the web companion (`ai.cocotte.maison`). - Approval cards for bumping specialists are greyed out during the window (per H §H1 state "Vacation mode active") — tap surfaces a toast: "paused for vacation — end vacation to dispatch." - ai-copilot keeps responding in chat. Strategist still drafts background analysis. Content drafts still arrive (scheduled posts in queue still publish, per H §H1). - Tap banner → vacation-detail sheet (date range · scope · per-source posture · end-now affordance). ## Step 7 — daily reminder of remaining days Once per vigil close (per [brief Q](./Q-vigil-journal-auto-conversations.brief.md) + [brief I](./I-audit-trust-replay.brief.md) §I1 daily digest), the digest leads with a quiet hearth line: > Day 3 of 6. Bumps off across 8 directories. Tour wording holds at "returning Mon." Two DMs auto-replied with the away note — held for your eyes when you're back. If vacation will end inside the next 24h, the line shifts: > Vacation winds down tomorrow at 06:00. Cocotte starts bumps back up from where they left off — no replay flood. ## Step 8 — auto-resume or manual end **Auto-resume** (default): at `end_at`, ai-copilot reverses the dispatch from Step 3: 1. `vacation-mode.deactivated` event to Redis. 2. Each `bookings-{directory}` specialist clears `policy.paused_until`, resumes its H1 cadence from *now* (no backfill — replaying 6 days of missed bumps would burn ranking; just pick up the cadence forward). 3. Tour wording reverts to pre-vacation copy (drafted by each `bookings-*`, no approval needed — restoring prior state is auto). 4. Triage `away` posture clears across all sources. 5. Notifier emits one hearth push: "Back on. Cocotte's tending to things again." **Manual end** (from banner detail sheet or "end vacation" voice): same dispatch path, fires at the tap moment instead of `end_at`. Confirmation card (working register) before commit: > End vacation 2 days early? Bumps resume immediately on 8 directories. Tour wording reverts. Away auto-replies stop. > > [ Hold ] [ End now ] ## Step 9 — resume receipts digest Per [brief I](./I-audit-trust-replay.brief.md) §I1, the first daily digest after resume includes a vacation-block summary (hearth register, magazine-like): > Vacation Tue → Sun. Bumps stayed off across 8 directories — Tryst's "last seen" badge held steady, no ranking penalty. Tour wording said "returning Mon" everywhere it could. 23 DMs auto-replied with the away note; 4 are flagged for your read — one VIP, three with tour questions. Two scheduled posts published as planned (OF Wed 9pm, X Fri 3pm — both green). No failures. Each per-surface action is linked into the audit drawer with `vacation_replay=false` (these aren't replays — they're the vacation pause itself); the resume actions carry `resumed_from_vacation=true` so the audit shows the boundary. ## Edge cases - **Overlap with active tour** (per H §H-Q1): if a declared tour ([brief H](./H-recurring-chores.brief.md) §H3) overlaps the vacation range, the confirmation card surfaces a working-register warning: "Berlin tour Oct 3–7 sits inside this vacation. Vacation wins — tour wording shifts to 'returning Monday' even on the Berlin announcement. Confirm anyway, or shorten vacation?" Quinn picks. Default is vacation-wins (safer); shorten-vacation reopens Step 2 date picker. - **Scheduled posts already in queue**: per H §H1, vacation pauses *future* drafts only. Anything already in the publisher queue still fires at its scheduled time. Mentioned explicitly in Step 1 explainer so this never surprises. - **Re-enable mid-vacation**: tapping vacation toggle while already active is a **no-op** (silently). To extend, Quinn opens the banner sheet → "extend by 1 day / 3 days / through next Sunday." To shorten, "end now" path (Step 8 manual end). - **Vacation extends past 30d default**: vacation mode is capped at 30 days at confirmation time. If Quinn picks a range > 30d, the picker shows a working-register inline note: "Vacation longer than 30 days? Cocotte will check in at day 30 to confirm you still want it off." At day 30, a low-stakes push asks Quinn to extend or end. No auto-end at 30d — the check-in is informational. - **Vacation + kill switch active simultaneously**: kill switch takes precedence (plain register beats hearth). Vacation banner is replaced by kill-switch banner. On kill-switch resume, vacation resumes its remaining range without re-confirmation. - **Voice "I'm off" with ambiguous date range** ("next week"): ai-copilot disambiguates in chat before the confirmation card. "Next week — Mon May 25 through Sun May 31? Or starting today?" - **Provider-coop incoming during vacation** (per [brief N](./N-provider-coop.brief.md)): coop intel still arrives and gets logged. `triage` still flags safety-relevant items as high-stakes interrupts — vacation doesn't silence the safety axis. ## Voice / TTS specifics Voice trigger "**I'm off Tuesday through Sunday**" / "**take me out next week**" routes through ai-copilot's intent classifier (not the kill-switch keyword spotter — this isn't a panic path). Latency target <2s including STT. Spoken confirmation, working register: > Vacation Tuesday through Sunday. Eight directories off, tour wording shifts, DMs auto-reply away. Confirm? Quinn says "yes" → activated. "No" or "wait" → "Holding off. Tell me when." First-time invocation also reads the Step 1 explainer aloud if invoked by voice (TTS reads the bullet list as prose — per [voice](./00-system-voice.md) §V8 read-aloud check). On auto-resume morning, the daily digest's TTS opening drops to hearth-warmest: > Back on. Six steady days. Bumps starting up again across the directories. On failure (a `bookings-*` specialist couldn't pause one of its surfaces): voice flips to plain. > Couldn't pause TS4Rent — they didn't accept the change. You're still bumping there. Re-auth or pause by hand? ## Related - [brief H](./H-recurring-chores.brief.md) §H1 — vacation-mode spec + explainer detail. - [brief K](./K-safety-blocklist.brief.md) §K3f — location-detail gating during tour wording shift. [`kill-switch.flow.md`](./kill-switch.flow.md) — parallel staged-pause pattern. - [brief R](./R-tours-events-hotels.brief.md) — tour-vacation conflict resolution (H-Q1). - [brief P](./P-inboxes.brief.md) §P3 — per-source DM posture during away. - [brief C](./C-notifications.brief.md) §C1 — quiet-hours interaction (vacation respects quiet hours; doesn't override them). - [brief I](./I-audit-trust-replay.brief.md) §I1 — daily digest renders the vacation block + resume receipts. - [brief L](./L-specialists-fleet.brief.md) — bumping specialists that subscribe to the mass-pause event. - [brief S](./S-settings-ia.brief.md) §S5 — per-surface vacation overrides. - [voice](./00-system-voice.md) §V2a/b/c — hearth for receipts, working for the decision, plain for failure.