Skip to content

[feat] templates search field + community provider search/sorts (76 FW3a) - #477

Open
AlexZ005 wants to merge 1 commit into
feat/76from
feat/76-community
Open

AlexZ005 wants to merge 1 commit into
feat/76from
feat/76-community

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

Roadmap 76 FW3a, the core half: search and sorts on the Templates modal's Community tab. Additive, no CLOUD_HOOKS_VERSION bump (documented in OPEN-CORE.md).

  • One search field on every Templates tab. Every word must match a card's title, description, author or tags (src/lib/communitySearch.js, pure). The OSS GitHub gallery is searchable with no server. The query survives a tab switch, and Escape clears a non-empty field before it closes the modal.
  • Provider members, typeof-probed. search: true → list({q}), debounced 300 ms. sorts: [{id,label}] → chips beside the field (the first is the default and is never sent). A 36-era provider without either is still called list({force}) exactly as before, and its rows are filtered client-side.
  • A re-list keeps the grid up and shows "Searching…". A late answer to an older query is dropped. An empty answer reads "No scenes match “q”".

Proof: unit communitySearch (7) + the contentIndex memo pin; e2e community-search 49/49 (OSS, 36-era provider, searching provider, the stale-answer counterfactual, N6 folded 390×896 / unfolded 770×850, the field and sort chips 44 px on a coarse pointer at any width), templates-modal + community-seams ALL PASS. Full vitest 2777/2777; check-ratchet at baseline.

The cloud half (Worker /community?q=, Top windows, the plugin provider declaring search + sorts) ships in the private repo.

🤖 Generated with Claude Code

…W3a)

- one search field on every Templates tab: every word must match title, description,
  author or tags (communitySearch.matchesQuery) — the OSS GitHub gallery is searchable
  with no server; the query survives a tab switch, Escape clears it first
- provider `search: true` gets list({q}) debounced 300 ms; `sorts: [{id,label}]` render as
  chips beside the field (first = default, never sent); absent = absent, a 36-era provider
  is called list({force}) exactly as before
- a re-list keeps the grid up ("Searching…"), an older query's late answer is dropped,
  an empty answer reads "No scenes match"
- OPEN-CORE.md documents the additive members (no CLOUD_HOOKS_VERSION bump)
- unit communitySearch (7) + contentIndex memo pin; e2e community-search (OSS, 36-era and
  searching providers, stale-answer counterfactual, N6 folded + unfolded)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant