cocottetech/@platform/codebase/@features/ai-copilot/docs/S-settings-ia.brief.md
natalie 1b719e1fd7 chore(bootstrap): initial V4 commit
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>
2026-05-18 08:11:41 -07:00

12 KiB
Raw Blame History

S — Settings information architecture

Goal

Settings are scattered across the brief corpus — C has a notifications matrix, K has blocklist rules, L has a fleet roster, P has per-source triage posture, R has tour preferences, F has accessibility, voice has TTS prefs. No single brief defines the IA. This brief is the settings backbone: where every toggle lives, how Quinn finds it, how surface depth maps to commitment, and how the index stays fresh as briefs add new prefs.

Settings is not a section of chat — it's a parallel access layer reached from chat-home's top-bar overlay (per brief A), but the contents are owned by other briefs. This brief is an index + UX-of-the-index, not a re-spec of each setting's behavior.

Designer skim

  • Headline UX: One settings overlay. Three depth levels — quick toggles (one tap from chat), category drawers (one tap into a topic), per-row sheets (the deep edit). Search across all settings is first-class.
  • Categories (8): S1 Account / S2 Voice & input / S3 Notifications / S4 Specialists / S5 Surfaces / S6 Safety / S7 Tours / S8 Privacy & data.
  • Pair-with: surfaces-settings.screen.md, the unified-inbox per-source policy editor, K3 onboarding screen.
  • Blocking Qs: see OPEN-DECISIONS.md → S-Q1 (search vs browse default), S-Q2 (advanced toggles gating).

States to design

  • Settings overlay landing (categories grid).
  • Category drawer (S1S8, one each).
  • Per-setting sheet (universal pattern: name + current value + explainer + revert + audit-when-changed).
  • Search result list.
  • "Recently changed" rolldown (the last 10 setting changes Quinn made, with revert affordances).
  • Empty search.
  • "Advanced" gate confirmation ("show advanced toggles? these can break Cocotte's autonomy").
  • Setting-conflict warning (changing one setting requires Quinn to confirm a dependent setting also changes).

S1S8 — Category map

Every setting in CocotteAI lives in exactly one of these. New settings introduced by future briefs land in one of these eight; don't add a ninth without revisiting IA.

S1 — Account

  • SSO identity, device-link list, sign-out from this device.
  • Active org / persona switcher (per platform DESIGN §org-overlay; P5+).
  • Bundle identity, build version, feedback affordance.
  • Source briefs: D.

S2 — Voice & input

  • Voice trigger word / always tap-to-talk (A-Q1).
  • Silence-window duration tunable (A-Q4).
  • TTS voice character + register prosody (voice §V4 + voice-Q1).
  • Interruptible TTS while speaking next question (D-Q2).
  • Photo-drop default action (open variant-producer vs prompt-first).
  • Dynamic Type override.
  • Source briefs: A, D, voice, 00-system-visual-system.

S3 — Notifications

  • Channel × stakes × specialist matrix (brief C §Settings UI).
  • Quiet hours (C-Q2).
  • Email digest cadence (C-Q3).
  • iMessage/push exclusivity vs additive (C-Q1).
  • Recently-fired notifications log (deeplink to source card).
  • Source briefs: C, referenced by M §M4 fallback hierarchy.

S4 — Specialists

  • Fleet roster (B6 spec — also reachable from chat).
  • Per-specialist trust panel + policy graduations (I §I5).
  • Promote/demote per-directory adapters (within bookings-directories).
  • "Show specialist chatter" toggle (L-Q1).
  • Per-specialist voice lean override (voice §V4).
  • Source briefs: L, I, all specialist-*.contract.md files.

S5 — Surfaces

  • Surface roster (live / pending / blocked) — full screen at surfaces-settings.screen.md.
  • Per-surface policy (cadence, active hours, vacation overrides — brief H §H1).
  • Per-surface NSFW allow flag (overrides K3a defaults).
  • Auto-cross-post rules per-surface (content-social config).
  • Enable/disable a surface entirely.
  • Source briefs: O, F §F5, H, K §K3a/K3b.

S6 — Safety

  • K1 prospect blocklist (add/edit/expire/reason).
  • K2 phrase / topic blocklist.
  • K3 cross-surface rules (K3aK3k toggle matrix per K3j onboarding defaults).
  • K4 jurisdiction declarations.
  • Kill switch (K5 — top-of-page red destructive).
  • Auto-added blocklist entries (chargeback / harassment) — confirm or revert.
  • Coop memberships (per brief N — opt in / out, anonymity defaults).
  • "Show what was blocked" toggle (K-Q1 privacy).
  • Source briefs: K, N.

S7 — Tours

  • Default revenue floor / target ratios per leg type (R1b).
  • Default hotel budget as % of floor (R1c).
  • Personal preference weights — loved cities / never-again cities (R6 optimizer inputs).
  • Auto-update location on bookings-tryst / ts4rent during active legs (R1d default ON).
  • Mid-tour re-route refund attempt policy (R6-Q5).
  • Source briefs: R.

S8 — Privacy & data

  • Journal retention policy (Q-Q5).
  • Data export (account-wide; legal/GDPR).
  • Right-to-erasure (delete account).
  • Vigil + journal multi-tenant scope (Q-Q2 — user_id only by default).
  • Cross-device handoff (web companion access list).
  • Screen-share / screen-record privacy hooks (per Q vigil-close-digest.screen privacy reminder).
  • Source briefs: Q, E, legal/compliance docs (TBD).

S9 — Three depth levels (UX commitment to surface depth)

CocotteAI settings span trivial (toggle a notification cadence) to dangerous (graduate a specialist's auto-confidence threshold). The UX should match commitment:

S9a — Quick toggles (1 tap from chat-home)

A short list accessible from chat-home's top-bar overflow. The 68 most-flipped controls based on prior usage. Default seed:

  • Vacation mode (H1 master).
  • Quiet hours now (C — one-tap snooze).
  • Pause autoconvos globally (Q3).
  • Kill switch (K5 — top, red, always-present here too).
  • Switch active tour (if multiple legs are simultaneous — rare, surfaces only when applicable).

Quick toggles do NOT include destructive or irreversible actions other than the kill switch (whose UX is intentionally hard-to-misfire per K5).

S9b — Category drawers (2 taps; one category at a time)

S1S8 each open as a full-screen drawer (sibling pattern to brief B drawers). Same dismiss + swipe-back semantics. Browse-able, scannable; row-per-setting + last-changed timestamp.

S9c — Per-setting sheets (3 taps; deep edit)

Tap any row → bottom sheet with:

  • Setting name.
  • Current value + control (toggle / slider / picker / freeform).
  • Explainer paragraph — what changing this does, who it affects, examples.
  • Revert affordance (back to previous value, OR back to default).
  • Last changed (when, where from — chat / settings / voice).
  • See in audit (jump to agent_actions log for setting-change rows).

Setting changes are themselves logged in agent_actions with action_type='setting_changed' (per brief I append-only). Quinn can replay/audit changes she forgot making.

A top-of-overlay search input. Searches setting names, categories, and explainer text. Fuzzy on names; exact-token on category. Returns ranked results with category breadcrumb. Lean: searching is the default affordance — Quinn types "vacation" and lands on the H1 master, not browses to S5 then S5-policies.

Search is shared logic with the audit drawer search (brief I §I2) — same component, scoped differently.

S11 — Advanced / power-user toggles

Some settings can break Cocotte's autonomy if misconfigured (e.g. relaxing every K3 default; setting a specialist's auto-confidence threshold below 0.3). These live behind an "Advanced" gate — a toggle at the top of relevant category drawers that reveals additional rows. Once enabled, persists per-device.

Activating Advanced fires a confirmation:

Advanced toggles let you change defaults Cocotte uses for safety. Misconfigured, these can publish drafts you didn't intend or block prospects you didn't mean to. Audit any changes. Continue.

After enabling, the gate is one tap to toggle off again.

S12 — Recently changed (the audit-shadow)

A pinned section at the top of the settings landing showing the last 10 setting changes. Per-row: setting name, old → new, when, "revert" button. Pulls from the agent_actions log scoped to action_type='setting_changed'. Resolves a common UX bug: "I changed something and now Cocotte's acting weird, what did I change?"

S13 — Conflict warnings

Some setting changes implicate others. Examples:

  • Quinn flips Auto-publish for content-onlyfans to ON → must confirm trust panel implications (per I §I5).
  • Quinn disables K3c-1: never echo govt-nameREJECTED (it's a hard rule, not Quinn-editable; the toggle is locked with a lock glyph and explainer).
  • Quinn enables vacation mode while a tour is active → confirmation: "Berlin leg is active. Vacation pauses bumps. Continue (pauses Berlin too) or hold off?"

Conflict warnings are sheets, not banners — Quinn must respond before the change persists.

In-the-wild copy

Settings landing header (working — entry to a decision surface):

Settings. Eight categories below; search the lot above.

Quick-toggle vacation flip (hearth — receipt):

Vacation on. Bumps paused everywhere. Tours that are already active keep running — they'll wind down on their schedule.

Advanced gate confirmation (plain — V2c, no flourish):

Advanced toggles can break Cocotte's safety defaults. Continue or hold.

Hard-rule lock glyph explainer (plain):

🔒 This rule is locked. Cocotte will never echo your govt name in any draft, anywhere. Not editable.

Conflict warning (plain):

Berlin leg is active. Vacation pauses bumps. Continue pauses Berlin's bumps too. Hold off keeps Berlin running.

Recently-changed row (working):

Quiet hours · 22:00 → 23:00 · 11 min ago · revert

Out of scope

  • Admin / billing / payments — separate platform-admin surface, different brief.
  • Multi-user / org-level governance (manager-can-veto-Quinn settings) — single-Quinn for P0.
  • Settings export/import — defer until cross-device parity is needed at scale.

Open questions

  • S-Q1 Default landing — categories grid or search-focused? Lean: categories first-time, search-focused on repeat visits (cached preference). [blocking]
  • S-Q2 Advanced gate persistence — per-device or per-account? Lean: per-device (a borrowed laptop shouldn't inherit Quinn's advanced state). [blocking]
  • S-Q3 Conflict warnings — sheet (interrupting) or inline (confirm-before-persist)? Lean: sheet for cross-category conflicts, inline for same-category. [nice-to-have]
  • S-Q4 Hard-locked rules (K3c-1, K3c-2, K3f-1) — render in settings at all, or only in K's brief? Lean: render with lock glyph + explainer for transparency. [nice-to-have] — leaning yes.
  • S-Q5 Recently-changed list scope — global or per-category? Lean: global on landing, per-category inside each drawer. [nice-to-have]
  • brief A — top-bar overflow that opens settings.
  • brief B — drawer chrome reuse.
  • brief C — owns S3 notifications.
  • brief D — first-run sets initial defaults across S1S8.
  • brief I — every setting change writes an agent_actions row; powers S12.
  • brief K — owns S6 safety.
  • brief L — owns S4 specialists.
  • brief O — owns S5 surface roster.
  • brief P — per-source triage posture (within S5 or S3 depending on framing — see open Q).
  • brief R — owns S7 tours.
  • brief Q — owns S8 retention + privacy.
  • surfaces-settings.screen.md — implementation of S5.
  • voice, visual-system — accessibility + voice prefs in S2.