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

153 lines
8.9 KiB
Markdown
Raw Normal View History

# 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 4h, 10am2am)? Or change anything?
>
> **Quinn**: yeah start bumps. and pause overnight 2 to 8
>
> **Cocotte**: Done. Bumping every 4h 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).