cocottetech/@platform/codebase/@features/prospecting/docs/auto-qualify-draft.screen.md

83 lines
5.8 KiB
Markdown
Raw Normal View History

# auto-qualify-draft.screen — web FE
**Priority:** Low. The primary surface is the existing inline `approval-card` (in chat/voice). This screen exists for batch-review and policy tuning.
**Surface:** `quinn.prospecting``/auto-qualify` route.
**Calls:** `platform.api` only.
## Layout — batch inbox
```
┌────────────────────────────────────────────────────────────────────┐
│ Auto-qualify queue [class ▾] [confidence ▾] [policy] │
├────────────────────────────────────────────────────────────────────┤
│ engage-priority (5) │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ prospect-2014 • score 0.86 • graph: high-rep returning │ │
│ │ inbound: "Hi, available Sat evening?" │ │
│ │ draft: "Yes — 8pm or 10pm Sat. Same arrangements as last?" │ │
│ │ why this draft ▾ │ │
│ │ • graph fingerprint: weekend-only, returning, pre-verified │ │
│ │ • local touchpoint: 3 prior, last conversion 6w ago │ │
│ │ • calendar: Sat 8pm + 10pm currently open │ │
│ │ [send] [edit] [decline] [wrong score] │ │
│ └──────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────┤
│ engage-now (11) triage (4) │
│ auto-decline-soft (3, 2 already approved-sent) │
└────────────────────────────────────────────────────────────────────┘
```
## Layout — policy editor
```
┌────────────────────────────────────────────────────────────────────┐
│ Auto-qualify policy │
├────────────────────────────────────────────────────────────────────┤
│ Qualifying questions I always need: │
│ [photo / age verification] [budget] [time window] [add+] │
│ Voice profile: [calibrating · 32/50 sends] [retrain] │
│ Class thresholds: │
│ engage-priority ≥ [0.75] │
│ engage-now ≥ [0.50] │
│ triage ≥ [0.25] │
│ auto-decline-soft < 0.25
│ Graph dependency: [allow] / [require] / [ignore] │
└────────────────────────────────────────────────────────────────────┘
```
## Gestures
- **Tap `[send]`** → submits draft as-is (positive label).
- **Tap `[edit]`** → opens inline editor; edit-and-send records the diff as a correction.
- **Tap `[decline]`** → record class override; surfaces a class-correction prompt.
- **Tap `[wrong score]`** → score correction with reason picker.
- **Tap `why this draft ▾`** → expands feature provenance (per `qualify_replay`).
- **Long-press class header** → bulk action ("send all in this class as-drafted") for high-trust periods. Requires per-session re-consent; never persistent.
## States
| State | Behaviour |
|-------|-----------|
| **Cold voice profile** | Draft cards carry an explicit "voice calibrating" badge. Conservative defaults. |
| **Graph offline** | Cards show "graph offline" badge; scores rendered with widened error bars. |
| **Safety-flagged touchpoint** | Does not appear in this queue at all; routed to `K-safety-blocklist`. |
| **Score-only (latency breach)** | Card renders without a draft; provider sees score+class and must compose manually. |
| **Audit replay** | Per-card replay shows feature provenance as of the original score timestamp. |
| **Bulk-send mode** | A persistent banner names the active bulk session and offers one-tap cancel; bulk auto-revokes after 10 minutes. |
## Privacy invariants
- "Why this draft" never names a graph contributor.
- Drafts never quote another provider's content; the editor cannot paste cross-tenant text.
- Bulk-send is gated; never sticky across sessions.
- Voice-profile retraining uses only the provider's own past sent messages; never cross-tenant.
## Related docs
- `auto-qualify-draft.brief.md`, `auto-qualify-draft.contract.md`
- `@features/ai-copilot/docs/approval-card.screen.md` (the primary inline surface)
- `@features/ai-copilot/docs/chat-home.screen.md` (conversational entry point)
- `@features/ai-copilot/docs/00-system-voice.md`
- `@features/ai-copilot/docs/K-safety-blocklist.brief.md`