# Agent Activity — design-sweep dossier

Files: `apps/web/src/routes/agent/Activity.tsx` (1558 lines), `activity.css` (279
lines). Also imports `review-queue.css` (shared with ReviewQueue, out of scope here).
Reached via `/agent/activity` (App.tsx / agentRoutes).

**Legacy markers: 0.** Neither file appears in `conformance.test.ts`'s
`LEGACY_BASELINE` — this is swept surface, held to zero violations, currently
passing (confirmed by reading the baseline map, not by running the test — a
logic-fix seat is editing the .tsx live right now, read-only per group note).
CSS is 100% `--cm-*` tokens; a prior coverage-lock fix already killed a leaked
gold focus ring on the segmented control (conformance.test.ts:132-136).

Raw form elements: 4 `<select>` (channel/outcome/source filters + Mark
dropdown), 2 `<input>` (row checkbox, "other reason" text), 3 `<textarea>`
(reply composer, held-reply edit, dm_opener edit). All carry `cm-input` +
`aria-label`/`<label>`. No custom Select/Combobox component exists yet in
`ui/index.js` (Button, Chip, EmptyState, Pill, SegmentedControl, Table only) —
raw selects are the current house style pending the headless layer, not a
one-off violation.

## Five lenses

- **IA/concept count — high.** This is a deliberate merge (operator ruling,
  agent-scope-5: "ONE screen, ONE list"): Feed/Needs preset, 3 filter selects +
  post-picker + per-post mute lens, replay estimate/run, a 5-action bulk bar
  (export JSON, export MD, replay, hide, delete, right/wrong), 2 confirm
  dialogs, a table with an overlaid mark-badge on the outcome cell, and a right
  panel whose `RowActions` branches into 6 distinct shapes by `reviewKind`
  (label/approve/crm_action/dm_opener×3-states/moderate) plus `ConsoleActions`
  (hide/unhide/delete/reply) plus a Mark dropdown plus history+undo plus a
  collapsible trace. A first-time operator holds a lot at once; a returning
  operator (the actual persona — this is a daily-drain console) is well served.
- **Interaction — good for power users, weak for discovery.** Single-letter
  keyboard shortcuts (j/k/a/h/u/r/d/g/b) are context-overloaded (`u` = unhide
  on a console row, restore on a review row) and documented only in one small
  `<p>` under the table — easy to miss on first visit. Guarded correctly
  against input/textarea focus traps (line 610). Row click + Enter/Space both
  select; checkboxes stop propagation correctly. No dead ends found.
- **Content/copy — clean.** `VERDICT_LABEL`/`KIND_LABEL`/`needsLabel` maps are
  explicit anti-engineering-vocabulary translations (comments say so directly:
  "never the engine words"). No AI-isms, no jargon leaking into operator-facing
  strings.
- **Visual/tokens — clean.** See marker count above; nothing to flag beyond
  what conformance.test.ts already enforces.
- **A11y+responsive — mostly solid, one real gap.** aria-labels on every
  select/checkbox/region (`role="alertdialog"`/`role="status"` used
  correctly for confirms/replay output), tabIndex+keydown on rows, focus-visible
  override in place. Split grid collapses to one column under 1180px; the
  26ch-truncated snippet cell is a data-density choice, not a layout break.
  Gap: the single-letter shortcut set has no accessible affordance (no
  `<kbd>` legend until scrolled to, no screen-reader announcement of what
  a keypress did beyond the toast) — a real, fixable a11y note, not a
  blocker.

## Verdict: polish

Tokens are already clean and the concept density is a stated, deliberate
operator ruling, not drift — so this is not a rebuild candidate on its current
evidence. Two sub-parts already have operator-ordered, mockup-gated redesigns
in flight (**detail panel**, **filter bar**) — this dossier does not re-score
those; treat their outcome as pending. For the remainder (table, bulk bar,
replay panel, keyboard-shortcut layer), the fix is discoverability and
grouping, not tokens or IA removal.

## Forks

1. The detail-panel redesign is already ordered — should it also collapse
   `RowActions`' 6 `reviewKind` branches toward one shared action shape, or
   is per-kind branching staying (each kind has a genuinely different
   contract: send/reject vs mark-handled vs restore/delete)? *Recommend:
   keep branching — the kinds are not interchangeable — but fold to a shared
   primary/secondary button pattern to feel like one system.*
2. The bulk bar mixes export (JSON/MD), replay, moderate (hide/delete), and
   label (right/wrong) in one row — five unrelated actions, one bar. Split by
   concept, or keep merged since "operator selected some rows" is the one
   shared frame? *Recommend: keep merged (matches the "one list" ruling) but
   group with dividers so the five don't read as one flat menu.*
3. Keyboard shortcuts are power-user-only and currently near-invisible
   (one small hint line). Worth a visible `?`-triggered cheat sheet, or is
   silent power-user tooling the intended trade-off for this console?
   *Recommend: add the cheat sheet — it's a small, additive fix.*
