9.5 KiB
9.5 KiB
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
- Default (successful action) — full layout as drawn.
- In-flight (auto-action mid-execution) — Result section shows "Running…" with a spinner; counter-actions limited to "abandon" only.
- 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."
- 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.
- Declined-by-Quinn — header tinted muted; Result is "Declined. Reason: {reason}" if Quinn provided one.
- 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.
- 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.
- Replay open — sheet becomes editable; an action bar at the bottom: "Run this version" / "Cancel."
- VoiceOver / accessibility — same content; reading order: header → meta → why → result → feedback → counter-actions.
- Encrypted payload — signed out (per brief AF §AF9) —
outcome_jsonciphertext-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 tosignin.screen.mdthen returns. Once signed-in, the user'sai-copilotdecrypts 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_correctionMCP 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 §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.mdif needed). - Counter-action approval cards (covered by
approval-card.screen.md). - Specialist-trust panel (separate screen, brief I §5).