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>
10 KiB
10 KiB
persona-seed-interview.screen
Single-screen breakdown for the persona-seed interview — the first-run conversational flow where Quinn teaches Cocotte who she is, what her voice sounds like, what's off-limits, and what brands she operates. Outputs become rows in personas, brands, and safety_blocklist. Voice register: hearth, dialed warmer than usual (this is the brand's strongest first impression — per 00-system/voice.md §V5).
Context
- Entered after SSO device-link (brief D step 1) → empty CocotteAI state.
- Conversational, not form-based. Cocotte asks one question at a time; Quinn answers in natural language.
- Skippable per-question (Quinn can say "skip" or "later"); skipped seeds use sensible defaults Cocotte will refine over time.
- ~6–8 questions; total ~5 minutes if Quinn answers tersely, ~15 if she expands.
- Outputs visible immediately in the persona drawer (brief B5) so Quinn can edit if Cocotte misread.
Layout (full-screen onboarding chat — not the regular chat-home)
┌─────────────────────────────────────────────────┐
│ Skip │ 44pt — minimal top bar
├─────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ 1 of 8 · Voice │ │ progress dot row + label
│ │ ━━░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │
│ └─────────────────────────────────────────┘ │
│ │
│ Cocotte │
│ Welcome. Set the kitchen up so I can │ hearth register; warm opening
│ start tending well. │
│ │
│ First — how do you talk to fans? Pick one or │ the question
│ describe it your way. │
│ │
│ ┌─────────────────────────────────────────┐ │ suggested chips (tap-to-fill)
│ │ Playful · teasing │ │
│ ├─────────────────────────────────────────┤ │
│ │ Direct · businesslike │ │
│ ├─────────────────────────────────────────┤ │
│ │ Editorial · slightly literary │ │
│ ├─────────────────────────────────────────┤ │
│ │ Warm · soft │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ╭─────────────────────────────╮ [🎤] │ free-text composer (always available)
│ │ Or describe it your way… │ │
│ ╰─────────────────────────────╯ │
│ │
└─────────────────────────────────────────────────┘
│ 34pt — home indicator
Question sequence (8 questions; reorderable / extensible)
| # | Topic | Goal | Stored in |
|---|---|---|---|
| 1 | Voice register | How Quinn talks to fans (chips + free text) | personas.voice_register, becomes brief J ported persona |
| 2 | Off-limits phrases / topics | What never appears in outbound copy | safety_blocklist.kind='phrase', per brief K |
| 3 | Brands operated | Which surfaces Cocotte will tend (Tryst, TS4R, OF, X, brand sites) | directory_handles, social_handles per platform.db schema |
| 4 | Tours / travel posture | Does Quinn travel? How far in advance to announce? Lead-time guardrail | tours.config per brief H §H3 |
| 5 | Autonomy comfort | How much should Cocotte auto-act vs ask? Anchors initial confidence thresholds | per-specialist defaults, brief L §L3 + brief I §5 |
| 6 | Quiet hours | When should Cocotte never bother her? | global notification config per brief C |
| 7 | Coop membership (optional) | Should Cocotte invite her to a coop network? | brief N coop invitations; defaults to no auto-join |
| 8 | Anything else | Free-text catch-all; Cocotte uses it to seed Facts DB | per brief J Facts DB (key/value memory) |
Components
| Component | Notes |
|---|---|
| Top bar | "Skip" rightward — skips current question. No back chevron (it's a forward flow); long-press progress dots to revisit. |
| Progress strip | Dot row + label; tap any past dot to revisit/edit that answer. |
| Question card | Cocotte's bubble + the actual prompt below. Voice: hearth, with warmest delivery for #1 (Welcome) and #8 (catch-all). |
| Suggested chips | 3–5 quick-fill options per question. Tappable, mutually exclusive (chip), or multi-select (chip set). Tappable to fill the composer, then user can edit before submitting. |
| Composer | Always available below the chips. Voice mic active. Submitting advances to next question. |
States
- Welcome (Q1 init) — first question; warmest copy.
- Mid-flow (Q2–Q7) — standard format; user can skip per-question or back-tap progress.
- Free-text answer pending — user typing; chips dim; submit-arrow on composer.
- Chip selected (filling composer) — chip text inserted in composer; user can append or just submit.
- Multi-select chip set (Q3 brands, Q4 tour cities) — chip set allows N selections; "Continue" CTA appears.
- Cocotte clarifying — if Quinn's answer is ambiguous, Cocotte asks one follow-up: "By 'editorial', do you mean longer-form like Vogue, or shorter and witty?" Then advances.
- Skip confirmation — first skip: small toast "OK, I'll use a safe default and learn over time." Subsequent skips: no toast (don't nag).
- Final question (Q8 catch-all) — also offers "I'm done" CTA in addition to "Continue".
- Complete — Cocotte: "Set up. I'll get tending — say hi when you want." Routes to chat-home in the "first-day quiet" state (per chat-home.screen.md state 2).
- Connection lost mid-flow — answers cached locally; on reconnect, flow resumes where Quinn left off (per brief M §M2c offline).
Interactions / gestures
- Tap chip → fills composer, but does NOT auto-submit. User decides.
- Voice mic on composer → tap = push-to-talk; long-press = hands-free (per A §voice).
- Submit arrow → advances to next question + animates the question card up + brings the next card in from below.
- Long-press progress dot for a past question → re-opens that question with the previous answer pre-filled.
- Skip (top-right) → records skip event; advances.
- Two-finger swipe down on the screen → minimize-and-resume-later (rare; defaults to staying in flow).
Edge cases
- Quinn refuses to answer Q2 (off-limits) — Cocotte respects, but inserts a recommended-defaults card: "Some defaults I'll start with — you can edit these later." (Real-name redaction, location-fuzzing, etc.) per brief K §K2.
- Quinn enters a brand handle that doesn't validate (Q3) — gentle: "I can't reach Tryst with that handle. Skip and add later?" Doesn't block flow.
- VoiceOver / accessibility — full flow readable; chips are buttons with hints "answers question {N}".
- Reduced motion — replace card-slide-up with crossfade.
- First-run on iPad / web companion — flow runs on iPhone only at P0; iPad/web prompts user to "open CocotteAI on phone to set up" per brief E.
- Quinn already had v2 data (per brief J port) — interview is shorter (skips brands, off-limits if already in v2); imports them silently and confirms each: "I see you have these handles from v2 — keep them?"
- Mid-interview push notification arrives — DO NOT interrupt onboarding. Notifications queue per brief C; the interview keeps the screen.
Outputs (data written)
On completion, the following rows are written via platform.api:
personasrow (Q1 voice + Q3 brand seeds)safety_blocklistrows (Q2 phrases)directory_handles+social_handlesrows (Q3)tours.config(Q4)- per-specialist
policyrows with initial auto/draft posture (Q5) notification_config(Q6)- Optional
coop_invitations_consent(Q7) factsentries (Q8)
Each write emits an agent_actions row of action_type='persona_seed_set' so first-run is auditable.
Related
- Brief D — full onboarding sequence; this screen is its centerpiece.
- Brief K §K2, §K-default-on platform rules — Q2 produces blocklist entries; default-on platform rules onboarding may extend this flow.
- Brief H §H3 — Q4 tours feeds H3 calendar.
- Brief L §L3 — Q5 sets initial per-specialist posture.
- Brief C — Q6 quiet hours.
- Brief N — Q7 coop invitation seed.
- Brief J — facts DB destination (Q8) + persona port.
00-system/voice.md§V5 — hearth-dialed-warmer copy register.
Out of scope
- iPad / Mac / web variants of the interview (defer; iPhone-only at P0).
- The "import from v2" sub-flow (separate
v2-import.flow.mdif it gets complex). - Re-interview mechanic (running this flow again later to refine) — covered conceptually but no dedicated state here.