# coop-drawer.screen The interior of [brief N §N3](./N-provider-coop.brief.md) — provider-coop safety-intel network UI. The drawer lives as a top-level chat-home affordance (top-bar overflow → "Coop") and is accessed by voice ("show me coop"). Multi-coop aware: switching between coops is a horizontal pill at the top. Voice register: **plain** throughout (per [`voice.md`](./00-system-voice.md) §V2c — the cost of misread coop intel is too high for hearth). ## Layout (full-screen drawer) ``` ┌─────────────────────────────────────────────────┐ │ ◄ Chat ⚙ │ 56pt — top bar; ⚙ = coop config sheet ├─────────────────────────────────────────────────┤ │ [Berlin · 12][Demimonde internal · 4][+ join ▾]│ 36pt — coop selector (horizontal scroll) ├─────────────────────────────────────────────────┤ │ │ │ Berlin escort coop · 12 members │ │ Moderators: rosa, mari │ │ │ │ ─── Recent activity · 7d ───────────────── │ │ 🛡 phone:hash:abc123 · UNSAFE · NON_PAY │ subject + flags │ reported by rosa · 4h ago │ │ 🛡 phone:hash:def456 · TIME_WASTER │ │ reported by anonymous · 8h ago │ │ ✓ phone:hash:ghi789 · 4★ │ rating-only positive report │ reported by you · 1d ago │ │ … │ │ [ See all → ] │ │ │ │ ─── Subjects I've reported ────────────────── │ │ 🛡 phone:hash:ghi789 · 4★ · active │ │ 🛡 phone:hash:jkl012 · UNSAFE · withdrawn │ │ [ See all → ] │ │ │ │ ─── Watchlist · 3 ────────────────────────── │ │ ⚠ phone:hash:abc123 · 3 reports │ │ "first reached by 2 peers" │ privacy-preserving race indicator │ ⚠ phone:hash:mno345 · 2 reports │ │ [ See all → ] │ │ │ │ ─── Info ─────────────────────────────────── │ │ Scope: Berlin · escort │ │ Rules: anonymous OK · evidence req. for UNSAFE │ │ Joined: 14 days ago │ │ [ Leave coop ] [ Report a moderator ] │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | Top bar | Back to chat, settings cog → per-coop config sheet. | | Coop selector | Horizontal pill scroller. Active coop highlighted. "+ join ▾" expands invitations / discovery (per N §N2b). | | Header | Coop name + member count + named moderators (tappable to per-member detail). | | Recent activity | Last 20 reports newest-first. Each row: subject hash + safety-flag chips OR star rating + attribution + relative time. Tappable → report-detail sheet. | | Subjects I've reported | Your published reports (active + edited + withdrawn). Tap → edit-or-withdraw sheet. | | Watchlist | Subjects with ≥2 high-severity flags. Privacy-preserving race-indicator: count, not who. | | Info | Static metadata + rule summary. Leave-coop is destructive (double-confirm). Report-a-moderator escalates to platform-level moderation per N §N6c. | ## States 1. **Member, active (default)** — full layout as drawn. 2. **No coops yet** — empty state with onboarding card: "You're not in any coops. Coops are private trust networks among providers. [Browse invitations] [Read about coops]." 3. **Invited (one or more pending invites)** — coop selector shows "+ join (2 ▾)" with pulsing dot. Tap expands the invitations list per brief N §N2b. 4. **Pending** (Quinn applied, moderator hasn't accepted) — coop selected, body replaced with: "Waiting for moderator approval. Joined queue 2 days ago. [Withdraw application]" Other sections hidden. 5. **Suspended** (per brief N §N2e) — header has banner: "You're suspended from this coop until {date}. Reason: {moderator's reason}. You can read but not publish." Publish affordances disabled. 6. **Left** — coop greyed in selector; tap shows "You left this coop on {date}. Your reports remain published unless individually withdrawn." 7. **Moderator view** — if Quinn is a moderator of the active coop, an extra "Moderator queue" section appears between Watchlist and Info, showing disputed reports awaiting review per brief N §N6b. 8. **Coop being dissolved** (per N §N6d) — banner: "This coop is being dissolved. Member-archive view available; no new reports accepted." 9. **Voice / accessibility** — sections read in order; report rows have hint "double-tap to open report detail." ## Interactions / gestures - **Tap a recent-activity row** → report-detail sheet (full report card with reporter attribution, dispute affordance). - **Tap a watchlist row** → all reports on that subject + race-indicator detail. - **Tap a subject-I've-reported row** → my-report-detail (edit / withdraw available). - **Long-press recent-activity row** → quick action menu: "Dispute" / "Copy hash" / "Block subject in my personal blocklist (per brief K §K1)." - **Tap "+ join"** → opens [invitations + discovery sheet] (N §N2b). - **Tap "Leave coop"** → double-confirm; on confirm, drawer dismisses; coop greyed in selector. - **Tap "Report a moderator"** → opens platform-level moderation escalation form per N §N6c. - **Swipe-down** → dismiss drawer. ## Edge cases - **PII hashing mismatch** (subject phone reported with old salt vs new salt — see brief N §N7a) — coop indicator: "Hash format changed; older reports under previous salt are archived but searchable." Quinn sees both eras with a divider line. - **Subject hash matches a prospect in Quinn's active engagement queue** — top inline banner: "⚠ One of these subjects is in a current thread with you. See triage." Tap routes to the prospect's engagement card. - **Subject hash matches Quinn's OWN identity** (e.g. someone reported HER) — high-stakes interrupt: "Someone in this coop reported you. Dispute or contact moderator?" Routes to dispute-against-self flow. - **Coop has 0 recent activity in 7d** — section copy: "Quiet week. The Berlin coop hasn't seen new reports in 7 days." Doesn't feel broken. - **Member count = 1 (Quinn alone)** — coop selector shows just Quinn; banner: "You're the only member here. Reports are private until others join." - **Reduced motion / Dynamic Type XXL** — selector pills wrap; sections collapse to single-line summaries with "see all" affordances. ## Related - [Brief N](./N-provider-coop.brief.md) — parent design (N1–N7). - [Brief L §L3 `triage`](./specialist-triage.contract.md) + [`prospect-resolver`](./specialist-prospect-resolver.contract.md) — primary consumers of coop intel. - [Brief K §K1](./K-safety-blocklist.brief.md) — personal blocklist (complementary to coop). - [publish-report.screen.md](./publish-report.screen.md) — the deliberate publish flow opened from this drawer. - [Brief I](./I-audit-trust-replay.brief.md) — every coop action is an `agent_actions` row. - [`voice.md` §V2c](./00-system-voice.md) — plain register copy throughout. ## Out of scope - The publish-report compose flow (separate screen: [publish-report.screen.md](./publish-report.screen.md)). - Moderator review queue interior (covered briefly in state 7; full screen if it grows beyond a list). - Cross-coop reputation aggregation (brief N §out-of-scope). - Coop discovery catalog (per brief N §open-questions, decision pending; lean private/invite-only).