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.php already 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.php is a plain GET form with a result count and the shared partials/board_pagination_nav.php. Its quote cards do not fit zenmemes, which uses the list board card.

  • /search is already in the application route list. Its nav icon already exists in public/assets/theme-nav-icons.css for 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.php has 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 QdbPage into 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 classic search parameter is unchanged.

  • Open: whether Search should move into the phone tab bar, which would need a decision about what it displaces.