# 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 3h (tier-dep, §canonical) │ │ active 10:00–02:00. Last bump 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." ## Related - [Brief I](./I-audit-trust-replay.brief.md) §3 row detail; §5 trust panel; §counter-actions. - [Brief J](./_engineering-v2-port-map.md) — CoT brief shape; correction-loop MCP integration. - [Brief L](./L-specialists-fleet.brief.md) — specialist-drawer link target. - [Brief K, brief N](./K-safety-blocklist.brief.md) — filtered-by chips. - [Brief F](./00-system-visual-system.md) §F1 — stakes color dot. - [Brief M](./M-error-degraded-modes.brief.md) §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).