feat(web): debounced search, kind/status filter chips, no-match tip (BEN-51)#55
Open
benSepanski wants to merge 1 commit intomainfrom
Open
feat(web): debounced search, kind/status filter chips, no-match tip (BEN-51)#55benSepanski wants to merge 1 commit intomainfrom
benSepanski wants to merge 1 commit intomainfrom
Conversation
…BEN-51) * Search input debounces to 250ms; URL syncs via replaceState while typing and via location.hash on Enter. * Result header summarises matches across runs / turns / events. * Filter chips toggle by matchKind (turn/event) and per-status, all client-side over the existing /api/search payload. * No-match copy now explains how matching works. * Pure helpers extracted to searchUtils.ts with vitest coverage. https://claude.ai/code/session_01Bgm49aWQpv2a6mmddCgW6U
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
src/web/Search.tsxonly searched on Enter, lacked filters, gave no result counts, and the no-match copy didn't explain how matching works. (Linear: BEN-51.)TL;DR
Search updates as you type (250 ms debounce), exposes kind/status filter chips, summarises matches, and explains substring matching when nothing hits.
Summary
replaceStatewhile typing and vialocation.hashon Enter for shareable links.N matches across X runs · Y turns · Z events, with· showing Kwhen filters narrow.turn/eventand per-status, derived from the result set; all filtering is client-side over the existing/api/searchpayload (no extra request).summarizeMatches,filterMatches,availableStatuses,toggleSetMember) intosearchUtils.tswith 12 vitest cases.Demo
n/a — automated cron run with no UI capture;
pnpm build:websucceeds andpnpm allis green. Manual QA recommended on the four canonical journeys before merge (empty / live / failed / past).Alternatives
Test Plan
pnpm all— typecheck + fmt:check + lint + test + eval (163 tests pass)pnpm build:web— web bundle builds (234 kB JS, 23 kB CSS)#/search, confirm results settle without Enter; toggle chips; clear input; verify no-match tip on a query with zero hits.https://claude.ai/code/session_01Bgm49aWQpv2a6mmddCgW6U
Generated by Claude Code