Repository source: docs/plans/board_search_checklist.md
Board Search Checklist
Working checklist for full-text search of the zenmemes board from the ordinary web UI. It is not a Railspike artifact and approves no implementation. Start each item as its own Railspike cycle or Direct change, following AGENTS.md. Record progress, checks and limitations here.
Requested by the user on 2026-11-03: as a zenmemes user, search the board from the frontend, reusing the qdb search where possible.
Reuse inventory
src/ForumRewrite/ReadModel/QdbPage.phpalready selects search results by counting matches, choosing one page of thread IDs and then hydrating them. Its eligibility rules are qdb-specific.templates/pages/qdb_search.phpis a plain GET form with a result count and the sharedpartials/board_pagination_nav.php. Its quote cards do not fit zenmemes, which uses the list board card./searchis already in the application route list. Its nav icon already exists inpublic/assets/theme-nav-icons.cssfor Word97, Chicago and Midnight.BoardPageController::search()has no caller. It filters every thread in memory and should be removed rather than copied.src/ForumRewrite/Analysis/RelatedContentSearchService.phphas tokenizing and excerpt code that later items can reuse.Docs search is a browser-side JSON index and does not fit the board.
Estimates
Stage-work judgments on the railspike-effort R1 scale, where 1.0 is the
largest comfortably approved single-cycle slice. R1 hashes were verified on
2026-11-03. These are single exposed-rater annotations, not ledger
snapshots, and must not be summed. A cycle that starts an item records its
own intake snapshot under protocol P2.
Checklist
Extract the count, select and hydrate flow from
QdbPageinto a shared selection. qdb keeps its eligibility rules and output unchanged.Serve
/search?q=for zenmemes with the existing list board card. The page has one search field and no explanatory copy. It works without JavaScript and is final on first paint.Add a Search entry to the zenmemes app navigation. Check the existing icon in Word97, Chicago and Midnight, and check text in the other permitted themes.
Remove the unused
BoardPageController::search().Verify through the ordinary UI that an empty query, no results, multiple pages and a just-retracted thread all behave correctly. Run the qdb search tests to confirm qdb is unchanged.
No read-model schema change and no new dependency.
_Done 2026-11-03 as the board thread search one-shot._ Two planning assumptions were corrected during execution. The shared Previous/Next pagination is canonical for new lists, so search shares a keyset adapter with tag pages rather than qdb's numbered count/select flow; only the literal match rule is shared with qdb. The new query also needed read-model version 47 under the CONTRIBUTING query contract. Search sits in the app account menu, not the phone tab bar.
Open questions
Resolved 2026-11-03: high-traffic mode and the offline worker do not cover
/search, so no special handling is needed.Resolved 2026-11-03: the user chose
q. qdb's classicsearchparameter is unchanged.Open: whether Search should move into the phone tab bar, which would need a decision about what it displaces.