diff --git a/docs/github-list-search.md b/docs/github-list-search.md deleted file mode 100644 index 41c1dbdbf87..00000000000 --- a/docs/github-list-search.md +++ /dev/null @@ -1,57 +0,0 @@ -# GitHub List Search - -## What the code does today - -- `TaskPage` has GitHub Items search input with Enter-to-apply and X-to-clear; it does not claim Cmd/Ctrl+F. -- `ProjectViewWrapper` has a local input (`ProjectSearchInput`) with Enter/blur apply and Esc restore+blur. -- Project X button is **reset to saved view filter**, not clear-to-empty. -- `queryOverride` semantics are: - - `undefined`: use `selectedView.filter` - - `''`: explicit empty filter for this fetch - - any other string: override filter for this fetch -- Shared type docs currently claim `''` and `undefined` are equivalent; that is incorrect. - -## Critical corrections - -1. Shortcut behavior is missing, not partially implemented. -- Add explicit Cmd/Ctrl+F capture in both GitHub Items and Projects modes. -- Use platform check (`navigator.userAgent.includes('Mac') ? metaKey : ctrlKey`) and never hardcode `metaKey`. -- Do not capture while dialogs/modals or editable overlays are active. - -2. Project clear behavior in this doc was wrong. -- Current code resets to saved filter; GitHub-like clear should apply `queryOverride: ''`. -- Keep Esc as the “revert to last applied” interaction. - -3. `queryOverride` contract in shared types is wrong. -- Update `GetProjectViewTableArgs.queryOverride` docs to match main-process behavior and cache key behavior. - -## Edge cases this must explicitly handle - -- IME composition: keep Enter suppression for composing text in GitHub Items and Projects. -- Repeated Cmd/Ctrl+F: always focus the active search box and select all text. -- Mode gating: never steal find when task source is not GitHub, or GitHub mode is not the visible mode. -- View switch race: do not let late responses overwrite the visible search state for a newer view. -- External mutations and multi-window drift: local optimistic edits and per-window cache are non-authoritative; refresh must remain available and predictable. - -## Consistency and concurrency notes - -- Renderer cache TTL for project tables is 60s; user-initiated apply already forces fetch (`force: true`), which is correct. -- Inflight dedupe is per-renderer process only. Separate windows can race and show temporarily different snapshots. -- No push invalidation exists for GitHub-side external changes; consistency is pull-based (refresh/fetch). -- `queryOverride` is part of cache keys; this is required so saved-filter and empty-filter results do not clobber each other. - -## Feasibility check - -- “One call” claims are not valid for most flows: - - `getProjectViewTable` can require multiple GraphQL pages for views, fields, and items. - - Discovery and view resolution are paginated. -- “Free” claims are not valid: - - Every apply/refresh consumes GitHub API budget; forced fetch intentionally bypasses fresh cache. - -## Required doc-aligned implementation outcomes - -1. Cmd/Ctrl+F focuses/selects GitHub Items search when GitHub Items mode is visible. -2. Cmd/Ctrl+F focuses/selects Project search when Project view mode is visible. -3. Project clear button applies empty override (`''`) immediately. -4. Esc in Project search restores last applied query and blurs. -5. Shared type comment for `queryOverride` matches runtime semantics.