# HAC-29 Browse And Search Baseline Stabilization Date: 2026-03-31 UTC Owner: Senior Frontend Engineer Issue: HAC-29 Scope: `desktop-v1` browse/search hardening only ## Context - `apps/desktop` already supports live browse pagination and DB-scoped search, but the visible search surface still leaves a few operator-facing gaps: - no explicit feedback about whether input is treated as substring matching or raw Redis pattern matching - no bounded clear action from the browser header - one generic empty-state sentence was doing too much work across loading, empty DB, and filtered no-match cases - Current phase must stay inside browse/search hardening and must not expand into Add Key, delete execution, non-string editing, or visual refresh work. ## Decision - Keep the existing workspace layout and backend contracts unchanged. - Extract search-state interpretation into a shared frontend helper so visible UI copy and backend browse requests use the same source of truth. - Improve only the key-browser and inspector feedback layer: - explicit search mode label (`all keys`, `contains`, `pattern`) - concise result-status message under the search input - clear action for returning to normal browse state - distinct empty-state copy for loading, empty DB, and no-match search results ## Implemented Slice 1. Added `apps/desktop/src/lib/key-browser-search.ts` plus focused tests for: - blank input vs contains search vs raw wildcard-pattern classification - backend request-pattern generation - browser status and empty-state copy - inspector empty-state copy aligned to the same search state 2. Updated `apps/desktop/src/App.tsx` to: - consume the shared search helper for live browse requests - render a visible search-mode badge and status line under the browser search field - expose a bounded clear action when search input is active - keep browser and inspector empty-state feedback aligned 3. Updated `docs/frontend-workspace-baseline.md` so the shared acceptance language now includes the search-mode feedback, clear action, and differentiated empty states. ## Verification - `pnpm --filter @redis-gui/desktop test` -> pass (9 files / 33 tests) - `pnpm run desktop:build` -> pass ## Remaining Risk - This environment still cannot launch a visible Tauri window, so final GUI-level browse/search smoke evidence remains a QA follow-up even though the frontend code and build path are green.