Repository navigation
Checklist search
github-actions[bot] edited this page Nov 12, 2026
·
1 revision
Generated by
pnpm gen:checklist-statusfromdocs/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 isChecklist-search.
Record search — $search executor, field scoping, RLS composition, pinyin recall, freshness
8 active · 0 planned
| 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 |