Clean successor to V3 (forge: lilith/atlilith). Seeded from local Mac working tree at ~/Code/@projects/@cocottetech/. node_modules and build artifacts excluded via .gitignore. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.4 KiB
8.4 KiB
coop-drawer.screen
The interior of brief N §N3 — 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 §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
- Member, active (default) — full layout as drawn.
- 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]."
- Invited (one or more pending invites) — coop selector shows "+ join (2 ▾)" with pulsing dot. Tap expands the invitations list per brief N §N2b.
- 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.
- 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.
- Left — coop greyed in selector; tap shows "You left this coop on {date}. Your reports remain published unless individually withdrawn."
- 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.
- Coop being dissolved (per N §N6d) — banner: "This coop is being dissolved. Member-archive view available; no new reports accepted."
- 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 — parent design (N1–N7).
- Brief L §L3
triage+prospect-resolver— primary consumers of coop intel. - Brief K §K1 — personal blocklist (complementary to coop).
- publish-report.screen.md — the deliberate publish flow opened from this drawer.
- Brief I — every coop action is an
agent_actionsrow. voice.md§V2c — plain register copy throughout.
Out of scope
- The publish-report compose flow (separate screen: 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).