cocottetech/@platform/codebase/@features/prospecting/docs/warm-intros.screen.md

5.7 KiB

warm-intros.screen — web FE

Priority: Low. Warm intros are a conversational primitive; the card appears inline in chat/voice surfaces. This screen exists for the back-office — managing intro policy, replaying negotiations, reviewing declined proposals.

Surface: quinn.prospecting/warm-intros route. Calls: platform.api only.

Layout — inbox view

┌────────────────────────────────────────────────────────────────────┐
│  Warm intros                       [policy] [received] [sent]      │
├────────────────────────────────────────────────────────────────────┤
│  Surfaced       (3 awaiting your tap)                              │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │ from: provider-447   • net rep: high  • category: weekend    │  │
│  │ "Vouching for a returning client who's a fit for your        │  │
│  │  weekend-only policy and pre-verified photo."                │  │
│  │  [accept]  [decline]  [defer 24h]    [why my copilot showed] │  │
│  └──────────────────────────────────────────────────────────────┘  │
├────────────────────────────────────────────────────────────────────┤
│  Silently declined  (12 in last 7d)              [show reasons]    │
│  ─ over-capacity (4)  ─ low-reputation (5)  ─ out-of-scope (3)     │
├────────────────────────────────────────────────────────────────────┤
│  Sent           (you proposed 7 in last 30d)                       │
│  ─ accepted 2  ─ declined-not-now 3  ─ declined-flagged 0  ─ ...   │
└────────────────────────────────────────────────────────────────────┘

Layout — policy editor

┌────────────────────────────────────────────────────────────────────┐
│  Intro policy                                                       │
├────────────────────────────────────────────────────────────────────┤
│  Surface threshold:  [conservative ──●─── permissive ]              │
│  Categories I accept:  [weekend] [first-time] [returning] [add+]    │
│  Calendar pressure cutoff:  surface only when load ≤  [60%] ▾       │
│  Sender minimum reputation:  [medium ▾] from cross-provider graph   │
│  Hard blocks:  any coop-flagged sender (cannot be disabled)         │
└────────────────────────────────────────────────────────────────────┘

Gestures

  • Tap surfaced card → [accept] → triggers warm_intro_accept; opens the resulting thread in the primary messenger surface; warm-intro packet pinned.
  • Tap [decline] → records explicit decline (sender sees declined-by-human).
  • Tap [defer 24h] → re-surface in 24h unless capacity changes.
  • Tap [why my copilot showed] → opens replay of recipient-side evaluation (per I-audit-trust-replay.brief.md).
  • Long-press silently-declined reason chip → opens correction prompt: "I would have wanted to see one of these" → feeds correction lens.

States

State Behaviour
No copilot adoption among peers Screen surfaces a banner explaining warm intros activate when peers in your category bring their copilots online.
First-time use Policy editor opens first; thresholds default conservative; no intros surface until policy is confirmed.
Hard-blocked sender attempted intro Never surfaces; appears in audit only, never in the "silently declined" reason chips (no inference of block status).
Audit replay Renders the negotiation transcript step-by-step, both sides' reasoning, with timestamps.

Privacy invariants

  • The "silently declined" reasons aggregate is recipient-only. Senders never see the recipient's policy or capacity state.
  • The "why my copilot showed" replay never shows the sender's internal copilot state — only the packet they sent and the recipient-side evaluation.
  • Accept-tap is the only path to opening a thread. No background auto-accept under any circumstance.
  • Coop-flagged senders are never represented in this screen's UI (no chip, no count, no replay entry visible to the recipient human; audit only).
  • warm-intros.brief.md, warm-intros.contract.md
  • cross-provider-graph.screen.md (reputation source UI)
  • @features/ai-copilot/docs/chat-home.screen.md (where the inline card appears in primary flow)
  • @features/ai-copilot/docs/audit-drawer.screen.md
  • @features/ai-copilot/docs/I-audit-trust-replay.brief.md