cocottetech/@platform/codebase/@features/ai-copilot/docs/audit-row-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.5 KiB
Raw Blame History

audit-row-detail.screen

Single-screen breakdown for the audit row detail sheet — what Quinn sees when she taps a single agent_actions row in the audit drawer (brief I §3) to investigate, give feedback on, or counter-act it. Voice register: working for routine inspection, plain when something failed (brief voice §V2b/§V2c).

Layout (full-screen sheet, scrollable)

┌─────────────────────────────────────────────────┐
│ ◄ Audit                                  Done   │ 56pt — top bar
├─────────────────────────────────────────────────┤
│                                                 │
│  ▢ Bumped Tryst availability                    │   action verb, large title
│  bookings-tryst · 14:02 · auto                  │   specialist · time · auto/approved chip
│                                                 │
│  Stakes: medium · Confidence: 0.91              │   stakes color dot + value
│  ┃                                              │
│ ┌─────────────────────────────────────────────┐ │
│ │ Target                                      │ │   target card
│ │ Tryst listing · "transquinnftw" · live      │ │
│ │ [ View on Tryst ↗ ]                          │ │
│ └─────────────────────────────────────────────┘ │
│                                                 │
│ Why                                             │   reasoning
│ Cadence policy: every 4h, active hours          │
│ 10:0002:00. Last bump was 10:02. Pre-fire      │
│ gates: pass.                                    │
│ [ See full reasoning ▾ ]                        │   expands CoT brief
│                                                 │
│ Result                                          │   outcome
│ ✓ Tryst accepted the bump. Listing visible at   │
│ rank ~4 in your filter.                         │
│                                                 │
│ Feedback                                        │   teach-the-system row
│ [ 👍 ]  [ 👎 ]   [ Counter-action ▾ ]           │
│                                                 │
│ Counter-actions                                 │   collapsible
│ • Pause future bumps for 1h                     │
│ • Skip next bump                                │
│ • Re-bump now                                   │
│ • Revert this listing to invisible              │
│                                                 │
│ Lineage                                         │   parent / children
│ Parent: H1 policy "Tryst bumps"                 │
│ Children: scheduled-send #4521                  │
│ [ ↻ Replay this with different inputs ]         │
│                                                 │
│ Raw                                              │   collapsed by default
│ [ Show JSON ▾ ]                                 │
│                                                 │
└─────────────────────────────────────────────────┘

Components

Component Notes
Top bar Back arrow + "Done" right (closes the sheet).
Header Action verb + descriptive title (e.g. "Bumped Tryst availability"). Plain-language not action_type slug.
Meta row Specialist link (tappable → specialist-drawer.screen.md), timestamp, auto-vs-approved chip.
Stakes + confidence Color dot per F §F1; numeric confidence to 2 decimals.
Target card What got touched. Includes deep link to external surface if applicable ("View on Tryst ↗").
Why One-paragraph rationale + expand-to-CoT-brief affordance. CoT brief is the 6-step ported from v2 per brief J.
Result Outcome of the action. Success / partial / failed. Plain register on failure.
Feedback 👍 / 👎 — recorded as a correction row per brief I §5 + v2's record_correction MCP. 👎 expands a structured correction form (which CoT step failed, what Quinn would have done).
Counter-actions Per brief I §counter-actions — list of available reversal/follow-up actions. Lists are action-type specific (a bump has different counter-actions from a profile edit).
Lineage Parent (the policy / specialist decision that produced this row) and children (downstream rows). All tappable, opening their own row detail.
Replay Opens the action with editable inputs — "what if Cocotte had run this differently?" Doesn't commit until Quinn approves.
Raw JSON of the underlying agent_actions row + adapter response. Collapsed by default; for power users.

States

  1. Default (successful action) — full layout as drawn.
  2. In-flight (auto-action mid-execution) — Result section shows "Running…" with a spinner; counter-actions limited to "abandon" only.
  3. Failed (action ran but external service rejected) — Result section uses plain-register copy (per voice §V2c). Lineage shows the retry attempts. Counter-actions include "retry now" and "stop auto-retry."
  4. Approved-by-Quinn (vs auto) — meta row chip says "approved (you · 14:02)" instead of "auto"; an extra "approval card" row links back to the original card.
  5. Declined-by-Quinn — header tinted muted; Result is "Declined. Reason: {reason}" if Quinn provided one.
  6. Counter-acted — banner at top: "You counter-acted this on 18:33. See {linked row}." Original action still visible; user understands it's been undone/reverted.
  7. High-stakes (brief K phrase-block, brief N coop hit) — top inline pill: "🛡 Filtered by your 'real name' rule" or "🛡 Subject has 2 coop reports." Tap pill for full explanation.
  8. Replay open — sheet becomes editable; an action bar at the bottom: "Run this version" / "Cancel."
  9. VoiceOver / accessibility — same content; reading order: header → meta → why → result → feedback → counter-actions.
  10. Encrypted payload — signed out (per brief AF §AF9) — outcome_json ciphertext-only. Body section labeled "Result" shows a single plain-register line: "Encrypted payload — sign in to view." Replay action disabled with the same line; feedback affordances disabled. Tap routes to signin.screen.md then returns. Once signed-in, the user's ai-copilot decrypts under the user's auth scope (per AF6 server-side wrapped DEK) and the row re-renders as state 1 (Pending) or the appropriate live state. The audit row's metadata columns (action_type, timestamps, target_id, stakes, confidence) remain plaintext-readable regardless of sign-in state — only the payload is gated. Tombstone variant: if the user erased this row's payload (brief V V2 cryptographic erasure), the line reads "Erased — payload unrecoverable" and remains so; sign-in does not restore it.

Interactions / gestures

  • Tap specialist name in meta row → opens specialist-drawer.screen.md scoped to that specialist's recent actions.
  • Tap "See full reasoning" → expands the CoT brief in place (the 6-step labels become headers).
  • Tap any lineage row → opens that row's detail (recursive navigation; iOS native back chevron returns).
  • Tap "Show JSON" → expands raw row as monospaced code; long-press copies.
  • Tap 👎 → opens correction form sheet; submission feeds v2's record_correction MCP per brief J.
  • Tap a counter-action → opens an approval card for the counter-action (it's also an action requiring approval, per recursive trust).
  • Swipe-down to dismiss → standard iOS modal sheet dismiss.

Edge cases

  • Row whose target was deleted/expired (e.g. Tryst removed the listing entirely) — Target card shows "Target no longer reachable" with last-known state.
  • Row from a specialist that no longer exists (retired per brief L §L4) — Specialist link is greyed; tapping opens specialist archive view.
  • VoiceOver: counter-actions list — read as a single grouped list; each item has hint "double-tap to dispatch."
  • JSON view exceeds reasonable height — capped at 12 lines with scroll-within-sheet; full payload available via share.
  • Multi-surface action's row detail — Target card lists per-surface rows; each per-surface result is its own sub-row with its own deep link.
  • Replay of an action that includes random-by-design (e.g. variant generation) — explicit note: "Replays may produce different output."
  • Brief I §3 row detail; §5 trust panel; §counter-actions.
  • Brief J — CoT brief shape; correction-loop MCP integration.
  • Brief L — specialist-drawer link target.
  • Brief K, brief N — filtered-by chips.
  • Brief F §F1 — stakes color dot.
  • Brief M §M3c — in-flight + failed states.

Out of scope

  • The audit drawer list view itself (separate screen — could become audit-drawer.screen.md if needed).
  • Counter-action approval cards (covered by approval-card.screen.md).
  • Specialist-trust panel (separate screen, brief I §5).