Skip to content

Checklist search

github-actions[bot] edited this page Nov 12, 2026 · 1 revision

search

Generated by pnpm gen:checklist-status from docs/qa/platform-checklist/areas/*.json. ⛔ Do not edit this page — edits go to the area JSON and this page follows on the next run. This page is Checklist-search.

Record search — $search executor, field scoping, RLS composition, pinyin recall, freshness

8 active · 0 planned

Active (8)

id title priority status personas
search.cross-field-object-search $search is a server-resolved cross-field match: terms AND-ed, fields OR-ed, case-insensitive, select labels mapped to values P1 active seeded admin (admin@objectos.ai)
search.field-scoped-narrowing $searchFields narrows and can never widen; a name outside the searchable set is 400 INVALID_FIELD at the ingress, never silently dropped P1 active seeded admin (admin@objectos.ai)
search.rls-both-personas Search honors RLS both ways: a restricted member gets no hits — and no total leakage — from rows they cannot see; the entitled persona finds the same rows P1 active seeded admin (sees all invoices), signed-up member bound to the showcase_contributor position via the qa-contributor-bound-member recipe (invoice_own_rows RLS: owner == current_user.email) — ⛔ NOT one of the seeded demo personas: Mei holds no position (PERMISSION_DENIED, object gate) and Ada holds auditor with viewAllRecords (all 12). See the recipe.
search.pinyin-flag-both-sides Pinyin recall is gated end-to-end by OS_SEARCH_PINYIN_ENABLED: on, latin pinyin (full + initials) hits CJK names; off, it does not — while CJK terms keep matching P1 active seeded admin (admin@objectos.ai)
search.freshness-and-empty Search reflects create/update/delete immediately (query-time expansion, no async index) and a no-hit search degrades to a clean empty result, never an error P2 active seeded admin (admin@objectos.ai)
search.console-global-search The console global search — ⌘K palette, header Search button, and /search page — drives ONE path (GET /api/v1/search): hits group under object headings, RLS hides invisible rows, Enter opens the record, empty input shows recents P1 active seeded admin (admin@objectos.ai — sees all), signed-up member bound to the showcase_contributor position (invoice_own_rows RLS — the same restricted persona as search.rls-both-personas)
search.command-palette-navigation The ⌘K palette is a NAVIGATOR beyond record search: the active app's nav corpus renders grouped (Objects/Dashboards/Pages/Reports), Enter navigates each type, app-switch and theme commands dispatch for real, and visibility-gated / inactive entries stay absent P2 active seeded admin (admin@objectos.ai)
search.global-search-skips-unreadable Global search (GET /api/v1/search) skips what the caller cannot read instead of failing: an unreadable object is never queried, named or counted; a readable object is searched only on fields the caller may query; row scope still narrows every searched object P1 active seeded admin (admin@objectos.ai): the negative control, who sees every object and field, signed-up member bound to the showcase_contributor position via the qa-contributor-bound-member recipe: a strict subset reader of showcase_invoice (invoice_own_rows), refused some objects outright, and refused the admin-only search columns of sys_user

Clone this wiki locally