cocottetech/@platform/codebase/@features/ai-copilot/docs/tryst-connect.flow.md

152 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# tryst-connect.flow — Conversational connect flow for Tryst
The **canonical** way Quinn connects Tryst. Conversation, not a form. Implements the principle in [00-system-conversational-ux.md](./00-system-conversational-ux.md): screens are inspectors / fallbacks; conversation is the primary path. The [tryst-connect.screen.md](./tryst-connect.screen.md) exists as a fallback for when Quinn explicitly wants the form; this flow is what happens first.
Two paths covered: cookie-paste (fast) and full-credentials (auto-re-login). Cocotte asks which Quinn wants; everything else follows.
## Transcript — cookie path (the most common first-time flow)
> **Quinn**: connect tryst
>
> **Cocotte**: Two ways to connect Tryst — a fast one and a long-haul one. Want to hear both?
>
> **Quinn**: yes
>
> **Cocotte**:
> - **Cookie paste** is faster. Sign in to tryst.link in Safari, copy a session cookie, paste it here. Done in 30 seconds. You'll re-paste every ~30 days when Tryst rotates the session.
> - **Full credentials** is longer to set up — your username + password + 2FA secret if you use one. I sign in for you each time the session expires. No re-paste needed, but the first sign-in might hit a captcha I have to solve.
>
> Which way?
>
> **Quinn**: cookie
>
> **Cocotte**: Got it. Open tryst.link in Safari, sign in. Then:
> 1. Tap the address bar → AA → Website Settings (or Safari menu on Mac → Develop → Storage).
> 2. Find the `session` cookie for tryst.link.
> 3. Copy its value.
>
> Tell me when you've got it, or paste it here and I'll grab it.
>
> *(Cocotte waits. Quinn taps the deep link "Open tryst.link" if she wants; otherwise she switches apps and comes back.)*
>
> **Quinn**: *(pastes a long opaque string)*
>
> **Cocotte**: Got it. Testing the connection through my browser container — one second...
>
> *(25 seconds; chat shows a single subtle pulse indicating Cocotte is working)*
>
> **Cocotte**: ✓ Connected. You're on Tryst as **@transquinnftw**, TLC Premium tier, 3-city slot, Sumsub-verified through 2027-03-04. Listing's active in San Francisco + Berkeley.
>
> Want me to start bumping on your usual cadence (every 2h since you're on Premium+, 10am2am)? Or change anything?
>
> **Quinn**: yeah start bumps. and pause overnight 2 to 8
>
> **Cocotte**: Done. Bumping every 2h between 8am and 2am. Pausing 28am. First bump in 12 minutes.
That's the entire connect-and-go interaction. **Zero screens opened.** The fallback screen [tryst-connect.screen.md](./tryst-connect.screen.md) is available if Quinn says "show me the form" or if something goes wrong.
## Transcript — full-credentials path
> **Quinn**: connect tryst
>
> **Cocotte**: Two ways to connect Tryst — a fast one and a long-haul one. Want to hear both?
>
> **Quinn**: just do the long one
>
> **Cocotte**: OK — username + password + 2FA secret if you have one. Tell me your username first.
>
> **Quinn**: transquinnftw@... *(types email)*
>
> **Cocotte**: Got it. Password? *(input field appears inline in the chat with secure-input affordance; auto-clears from chat history after submit)*
>
> **Quinn**: *(enters password)*
>
> **Cocotte**: 2FA — got a TOTP secret? You can paste the `otpauth://` URL or the raw base32 secret, or tap the camera to scan a QR. Or skip if you don't use 2FA on Tryst.
>
> **Quinn**: skip
>
> **Cocotte**: Signing in for you now — opening Tryst in my container, filling the form, watching for captchas...
>
> *(530 seconds; pulse indicator. If a captcha appears: Cocotte runs Tier 1 anti-detection → Tier 2 ML solver → Tier 3 HITL. If HITL kicks in, Cocotte sends Quinn a push notification with the challenge image to solve.)*
>
> **Cocotte**: ✓ Connected. Tryst threw a captcha at sign-in but I solved it. You're on as @transquinnftw, TLC Premium, all the usual. From now on I'll re-sign-in automatically whenever the session expires — you won't see it.
>
> Same cadence as before? Or different this time?
## What Cocotte's behavior contains (parsing + flow control)
These are the patterns the conversational entry parses:
| Quinn says | Cocotte parses as | Resulting flow |
|---|---|---|
| "connect tryst" / "add tryst" / "set up tryst" | Tryst-connect intent | This flow |
| "connect everything" / "set up all my surfaces" | Multi-surface connect — sequential flow asking surface-by-surface | Defer; see [cross-surface-fanout.brief.md](./cross-surface-fanout.brief.md) §7 |
| "the cookie one" / "fast way" / "cookie" | Cookie-mode branch | Cookie path above |
| "the full one" / "long way" / "credentials" / "password" | Full-creds branch | Full-creds path above |
| "show me the form" / "open the screen" | Open [tryst-connect.screen.md](./tryst-connect.screen.md) | Screen opens; conversation pauses |
| "what is a session cookie" / "I don't know how" | Explainer (one paragraph) + same prompt | Same step, longer explanation |
## Failure paths in conversation (not screens)
**Cookie invalid:**
> **Cocotte**: That cookie didn't take — Tryst returned a sign-in page. Could be expired, or maybe a different domain's cookie. Try copying again from a freshly-signed-in tab?
**Password wrong:**
> **Cocotte**: Tryst said that username + password don't match. Want to try again, or use the cookie path instead?
**Captcha solver unavailable (ML + HITL both down):**
> **Cocotte**: Tryst showed a captcha and I can't solve it right now — my solver service is down and you're not available to solve it manually. Want to try the cookie path while I'm waiting on the solver?
**Account flagged / locked:**
> **Cocotte**: Tryst flagged this account: "under review by compliance." That's their side, not mine — open tryst.link to see why, then come back when it's clear.
**Captcha needs Quinn (HITL):**
> **Cocotte**: Tryst showed a captcha I can't auto-solve. I sent you a push — tap it and you'll see the image. Solve it there and I'll resume.
In each failure case, the conversation continues — Quinn isn't bounced into a screen unless she asks.
## When Cocotte upgrades to the screen
Cocotte opens [tryst-connect.screen.md](./tryst-connect.screen.md) on:
- Quinn explicitly asks: "show me the form / screen / settings."
- Quinn switches modes after first connect: "switch to credentials path."
- A complex multi-account case: "I have two Tryst accounts" — the screen handles disambiguation more cleanly than chat.
In all other cases, the conversation completes without a screen ever rendering.
## Voice mode
Identical flow over voice (per [voice-input-settings.screen.md](./voice-input-settings.screen.md)) with two adaptations:
- **Secure inputs spoken**: when Quinn needs to dictate a password / cookie / TOTP, Cocotte mutes TTS readback ("password not echoed for your ears only") and accepts dictation; or surfaces an iOS secure-input affordance that Quinn types on while voice continues for everything else.
- **Status announcements**: "Connected. Touring Bay Area, TLC tier" replaces the chat receipt.
## Per-surface adaptation
This flow is the **template** for every per-surface connect interaction (per [00-system-conversational-ux.md](./00-system-conversational-ux.md)). Other surfaces follow the same shape with variants:
- **TS4Rent**: identical to Tryst + Sumsub-handle question on first connect.
- **Slixa / Eros**: same shape; per-surface auth specifics.
- **OnlyFans**: same shape + device-pairing warning + per-OF 2FA pattern.
- **X / Threads / Bluesky**: skips cookie/credentials — Cocotte opens iOS OAuth; conversation says "tap to authorize me on X — back in a sec" then handles return.
- **WhatsApp / Telegram / Signal**: QR-pair conversation — Cocotte shows QR, Quinn scans with her device, conversation continues.
Every per-surface brief gets a connect.flow.md companion documenting its surface-specific conversation.
## Related
- [00-system-conversational-ux.md](./00-system-conversational-ux.md) — principle establishing flows as canonical.
- [tryst-connect.screen.md](./tryst-connect.screen.md) — fallback screen (role: fallback editor).
- [surface-tryst.brief.md §2](./surface-tryst.brief.md) — dual-mode auth design (this flow is the primary realization).
- [_engineering-surface-adapter-container.md](./_engineering-surface-adapter-container.md) — the container that runs both modes' login under the hood.
- [_engineering-credentials-vault.md](./_engineering-credentials-vault.md) — encrypted storage for both modes' artifacts.
- [voice-input-settings.screen.md](./voice-input-settings.screen.md) — voice-mode adaptation reference.
- [cross-surface-fanout.brief.md](./cross-surface-fanout.brief.md) §7 — multi-surface connect ("connect everything") is a sister flow.
- [A-chat-surface.brief.md](./A-chat-surface.brief.md) — the surface this flow plays out on.
- Future `captcha-solve.screen.md` — HITL captcha surface (modal during the failure path).
## Out of scope
- The captcha-solve modal interior (separate screen).
- Mode-switching post-connect (handled by [tryst-connect.screen.md](./tryst-connect.screen.md) advanced surface).
- Multi-account disambiguation (handled by the screen).