docs/testing/2026-10-09-menu-test-pruning/README.md

TUI menu test pruning — VUH-1925

Eight mixed TUI files lose presentation assertions and two incidental or higher-tier-duplicate cases. No E2E, integration, golden, published contract or real-bug regression case is removed. The review remains incomplete.

Reviewed cuts and retained behavior

  • external-activity.test.ts: remove exact collapsed heading/fallback copy. Keep the real component's expanded quoted Linear payload.
  • machines-menu.test.ts: remove picker ordering and agent-count hint copy. Keep exact command dispatch, discovered transport, protected default session, named connection grants, reconnect and refusal before subsequent mutations.
  • product-navigation.test.ts: remove menu title and empty-state copy; compare membership as sets instead of requiring incidental order. Preserve selected conversation, agent-thread exclusion, reachable history and native agent identity.
  • settings-menus.test.ts: remove quiet-hour title and recording hint snapshots. Keep actual persisted quiet hours, recording toggle and failure detection.
  • setup-commands.test.ts: remove setup prompt/hint/description/result copy and unused test-only captures. The duplicated worker-option assertion remains covered by the explicit doctor-session checklist case. Keep credential readiness, abandonment, routed commands, autostart calls, editable draft, pairing/sign-in routing and refusal to draft a message when the console is unavailable.
  • voice-commands.test.ts: remove repeated helper-description labels and cosmetic wizard/status copy. The deleted helper case supplied no secret marker and only checked labels. Keep the actual wizard/API integration, broker-owned credentials, marker-based output/settings redaction, effective-environment refusal, canceled and stale drafts, URL-safe identifiers and optional model persistence.
  • persona-commands.test.ts: remove prompt label arrays. Keep actual current-value defaults and alias-step recovery, stale-write refusal and service-unavailable mutation refusal without changing local data.
  • project-menu.test.ts: remove first-row hint formatting. Keep the complete revision-bearing API/settings integration for edits and project creation.

The only product-source change removes the describeVoice export used by the removed helper snapshot: export-only, no behaviour change. Its body and internal caller remain byte-identical; all other test/product source stays intact. No Knip exemption, test selector, fixture timeout or replacement snapshot is added.

Lines and cases

File under apps/tui/test/BeforeAfterRemoved
setup-commands.test.ts31228923
product-navigation.test.ts1021002
machines-menu.test.ts1071043
settings-menus.test.ts63576
external-activity.test.ts322210
voice-commands.test.ts34731631
persona-commands.test.ts1231158
project-menu.test.ts84822

Total test source: 1,170 → 1,085 lines. Cases in these eight files: 38 → 36. Three navigation membership assertions retain their exact sets while allowing incidental order to change.

Measurement and landing

The one baseline root check:landing passed 21/21 cases in five files, with sourceStable: true, in 43.41 seconds against 909ee29bdca76c6b2e1666cbee8f7c523484902a. Temporary comment-only edits selected those files; all comments were removed before pruning. Original files, JSON results, phases and load samples remain under .local/vuh-1925/menu-before-*.

Main subsequently advanced. This batch is based on fetched current main; additional reviewed voice/persona/project files enlarge the cut, and the private helper changes native import-based selection. The baseline and landing gate therefore are not a matched speedup comparison. No extra timing run is performed. The committed-head root gate passed 36/36 cases in all eight edited files in 38.52 seconds (39.56 seconds including command startup), exit 0, sourceStable: true, Knip and TUI typecheck green. Checked HEAD: d8304c59e13102f6023adb0a9e841144bc3cbab3; pinned base: 501922c9c0d54c7d07a807afcd63264072115979. That green gate authorized the push to main.

Baseline and landing JSON/logs/load samples, per-file counts and export-only proof live in the archived capture bundle listed in evidence.json: clankie://evidence/sha256/f904fedbf4ffae02dc2e589b4461a5ee0eab5c2317f99c7d8ce9a2350094ce60. Raw bytes stay outside git.

The per-file before/after counts and final root evidence are attached to VUH-1925. Its final cumulative tally will be posted only when the inventory is complete; this batch does not claim completion. No deployments or evaluations are performed.