5.7 KiB
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]→ triggerswarm_intro_accept; opens the resulting thread in the primary messenger surface; warm-intro packet pinned. - Tap
[decline]→ records explicit decline (sender seesdeclined-by-human). - Tap
[defer 24h]→ re-surface in 24h unless capacity changes. - Tap
[why my copilot showed]→ opens replay of recipient-side evaluation (perI-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).
Related docs
warm-intros.brief.md,warm-intros.contract.mdcross-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