cocottetech/@platform/codebase/@features/ai-copilot/docs/coop-intel-detail.screen.md
natalie 1b719e1fd7 chore(bootstrap): initial V4 commit
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>
2026-05-18 08:11:41 -07:00

9.7 KiB
Raw Blame History

Coop intel detail · screen

Single coop-intel report inspected. Reached from a triage card (when an inbound matches a subject with peer reports), from a prospect drawer (B3) when the prospect is flagged, or directly from the coop drawer's report list.

Pairs with brief N §N1N8. Voice register: plain throughout — coop misreads are too expensive for warmth.

Layout

┌────────────────────────────────────────┐
│  ←  Coop intel · report                │
├────────────────────────────────────────┤
│  Subject                               │
│  +1 415 555 0142                       │
│  (also seen on: @felix.x, OF DM)       │
├────────────────────────────────────────┤
│  Coop: Berlin Providers · attributed   │
│  Reported by: provider-3a4f (verified) │
│  Filed: Apr 14, 2024                   │
├────────────────────────────────────────┤
│  Rating · 1 / 5                        │
│  Flags · UNSAFE, AGGRESSIVE            │
│  Would work again · NO                 │
├────────────────────────────────────────┤
│  Notes                                 │
│  ┌──────────────────────────────────┐  │
│  │ Refused safe-word check at the   │  │
│  │ start. Escalated when reminded   │  │
│  │ of boundary. Left after 20min,   │  │
│  │ argued about deposit by SMS for  │  │
│  │ 2 days after. PII redacted by    │  │
│  │ Cocotte on submit.               │  │
│  └──────────────────────────────────┘  │
│  3 attachments · encrypted             │
│  [ Decrypt to view ]                   │
├────────────────────────────────────────┤
│  Peer reports on same subject (2)      │
│  · BOUNDARY_VIOLATION · Berlin · Oct'24│
│  · TIME_WASTER · TG-vertical · Jul'24  │
├────────────────────────────────────────┤
│  [ Dispute this report ]               │
│  [ Add my own report ]                 │
│  [ Block this subject in K1 ]          │
└────────────────────────────────────────┘

Sections

Header — subject identity

  • Hashed identifier display (phone / email / handle / PII-hash).
  • "Also seen on" — cross-surface aliases linked by prospect-resolver (P4). Quinn-side join only; never echoes to peers.
  • Reveal gate: full identifier always shown to Quinn for her own subjects; never revealed in screenshots or exports (per brief N §N7).

Provenance — coop + reporter

  • Coop name + scope (regional / agency / vertical).
  • Reporter chip: either provider-3a4f (verified) for attributed, or anonymous member if the report was anonymous-by-choice (per brief N §N5).
  • Filed date.
  • Withdrawn marker (if withdrawn_at is set — visible to moderators + Quinn-as-reporter only).

The verdict block

  • Rating (15; nullable for flag-only reports). Color: rose for ≤2, neutral for 3, accent-green for ≥4.
  • safety_flags enumeration (UNSAFE / AGGRESSIVE / BOUNDARY_VIOLATION / NON_PAY / TIME_WASTER / SCAM). Plain register, all-caps preserved (these are categorical, not editorial).
  • would_work_again boolean rendered as YES / NO / —.

Notes

  • Free-text incident summary.
  • PII-redaction notice: Cocotte client-side-scanned the notes on submit (per brief N open Q-2 reporter-retaliation protection). The redaction marker is always shown so reader knows redaction happened.

Attachments (always encrypted at rest)

  • Count + thumbnails-locked.
  • "Decrypt to view" — per-attachment decryption gated on coop membership + active session. Decrypted views auto-revoke after 5 min.
  • Attachments are never bulk-exported; every view is logged in agent_actions (brief I).

Peer reports (cross-coop view)

  • Same subject, other coops Quinn is a member of.
  • Per-row: flag-or-rating summary + coop + date.
  • Tap → opens that report (recurses into this same screen).
  • Empty state: "No other coops have a report on this subject. Yours is the first."

Actions

Three distinct affordances, plain language:

Action Behavior
Dispute this report Per brief N §N6. Opens dispute composer; reporter is notified; moderator reviews. The original report stays visible while disputed.
Add my own report Opens compose flow scoped to the same subject. Quinn fills in her own rating / flags / notes / attachments. Anonymity is a per-report choice (not inherited from the prior report).
Block this subject in K1 Adds the subject (by hashed identifier) to Quinn's per-user blocklist (brief K §K1). Local to Quinn — does NOT publish a coop report.

States

  1. Attributed report, verified reporter (default, shown above).
  2. Anonymous report — reporter chip says anonymous member. No "tap to message reporter" affordance.
  3. Withdrawn report — soft-grey overlay + banner: "Withdrawn Mar 2025. Visible to you as moderator/reporter only."
  4. Disputed report — yellow chip "Disputed — moderator review pending"; original content stays visible.
  5. Report Quinn wrote — adds a per-row footer with Edit · Withdraw · See dispute (if any).
  6. No peer reports — Peer reports section shows empty-state copy.
  7. Many peer reports (≥5) — collapsed with "5 more across 3 coops · expand" affordance.
  8. Attachment-encrypted-but-coop-key-rotated — attachment section shows "encryption key rotated; contact Berlin-Providers moderator to view" (per brief N open Q PII salt rotation).
  9. Subject cleared — header banner: "Subject has 3 positive peer reports in the same period. Counter-context shown above the warning."

Privacy invariants rendered

  • Subject identifier (phone, email) is never copyable to clipboard. Tap-and-hold opens a privacy reminder, not a copy menu.
  • Attachments cannot be screenshot-protected in iOS, but the app surfaces a "screen capture detected" banner per session if iOS API reports one.
  • No "share" affordance on the screen anywhere. Reports propagate within the coop, never outside.
  • Cross-coop view (peer reports section) respects each coop's visibility rules: a report from a coop Quinn isn't in doesn't appear, regardless of subject match.

Gestures

  • Swipe down: dismiss to the surface that opened this screen (triage card / prospect drawer / coop drawer list).
  • Long-press on a flag chip: opens the flag's definition (e.g. BOUNDARY_VIOLATION → "subject ignored explicit safe-word, hard limit, or pre-agreed activity scope").
  • Tap on the "also seen on" chips: opens prospect drawer (B3) scoped to that surface — local Quinn-side join.
  • Tap on a peer report row: recurses into this screen for that report.

Edge cases

  • Report on a subject Quinn has zero prior contact with (proactive intel browse, not triage-driven): same screen layout, "Block this subject" action becomes "Pre-block" — adds to K1 before any contact.
  • Report on a subject Quinn has positive history with (she's worked with them before, no incidents): banner above the verdict block — "You have 4 prior sessions with this subject, no incidents logged. Read the report with that context."
  • Two reports from different coops disagree (UNSAFE in Berlin coop, EXCELLENT in TG-vertical coop): both render, no synthesis attempted. Quinn judges. ai-copilot does NOT propose blocking based on cross-coop disagreement alone.
  • Coop moderator override (the report has been moderator-suppressed): screen renders an empty stub — "This report was moderator-suppressed on 2025-01-12. Reason: failed dispute review."
  • Quinn is the reporter and dispute landed in her favor: report shows a "Dispute resolved in your favor" footer; report stays published.
  • Quinn is the reporter and dispute landed against her: report shows "Moderator removed this report on 2025-02-04" — Quinn can still see her own draft for reference but it's no longer published.

In-the-wild copy

Verdict block header (plain):

Rating 1/5 · UNSAFE · AGGRESSIVE · would not work again.

Peer-context banner, mixed history (plain):

One prior session with this subject, no incidents. Read the report with that context.

Decrypt-to-view tap confirmation (plain):

Decrypting 3 attachments. View expires in 5 minutes. Logged in audit.

Dispute composer entry (plain):

Dispute this report. The reporter is notified. Moderator reviews. The report stays visible while we work it out.

Block-in-K1 confirmation (plain):

Adding this subject to your blocklist. Triage will hard-block on every channel. Continue?

  • brief N §N1N8 — full design.
  • brief K §K1 — local blocklist this screen can write to.
  • brief I — attachment decrypts + dispute actions land in audit.
  • brief P — triage cards link here when peer reports exist.
  • brief B §B3 — prospect drawer surfaces this screen.
  • voice §V2c — plain register throughout.