Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
13 KiB
Vacation-mode flow
End-to-end: from "I'm off Tuesday–Sunday" through auto-resume + digest. Pairs with brief H §H1 vacation-mode and the per-source posture in brief P §P3.
Sibling-of-but-different-from the kill-switch flow. 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 §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 §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 — every bookings-{directory} instance):
- Publish
vacation-mode.activatedevent to Redis pub/sub with{user_id, start_at, end_at, scope[]}. - Each
bookings-{directory}specialist freezes its H1 cadence policy (setspolicy.paused_until = end_at); records anagent_actionsrow withaction_type='vacation_mode_paused'. triagespecialist flips DM auto-reply posture toawayper source (P §P3).bookings-*specialists dispatch tour-wording updates (Step 4, below) to directories that support it.- platform.api sets
vacation_mode_active=true+ range on the user row. - 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 §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 §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 + brief I §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:
vacation-mode.deactivatedevent to Redis.- Each
bookings-{directory}specialist clearspolicy.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). - Tour wording reverts to pre-vacation copy (drafted by each
bookings-*, no approval needed — restoring prior state is auto). - Triage
awayposture clears across all sources. - 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 §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 §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): coop intel still arrives and gets logged.
triagestill 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 §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 §H1 — vacation-mode spec + explainer detail.
- brief K §K3f — location-detail gating during tour wording shift.
kill-switch.flow.md— parallel staged-pause pattern. - brief R — tour-vacation conflict resolution (H-Q1).
- brief P §P3 — per-source DM posture during away.
- brief C §C1 — quiet-hours interaction (vacation respects quiet hours; doesn't override them).
- brief I §I1 — daily digest renders the vacation block + resume receipts.
- brief L — bumping specialists that subscribe to the mass-pause event.
- brief S §S5 — per-surface vacation overrides.
- voice §V2a/b/c — hearth for receipts, working for the decision, plain for failure.