Filters are evaluated once into an id set used by both search branches.
Adds tests for age/genre/mechanic filters with a search term, rank 2 vs 3
and null p_limit. approxNormalize uses NFKD. Perf script checks confirm_local
value and unix socket and re-analyzes after rollback. Adds
docs/specs/3-katalog-suche-umsetzung.md (measurements, log check incl. GET
finding), release checklist section 2a and the CSV-only note for alt titles.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds the unchanged runbook queries (rolconfig, pg_available_extensions,
pg_settings) and asserts the settings that keep search terms out of logs.
katalog-pflege 8.2 now states that the three log settings depend on each other.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
supabase/perf/catalog_search_perf.sql loads synthetic data in one rolled-back
transaction and measures search_catalog_games as anon with RLS (explain and
p50/p95/p99 per case). Lives outside supabase/tests so it never runs in CI.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rank 4 and the genre/mechanic filters ran a correlated subplan per game
(13 s at 10 000 games). Now: one set-based word coverage, filters as one hashed
IN set, 'like all' patterns, similarity only for hits. Adds pgTAP cases found
by mutation testing (paging by relevance, alt title choice, duplicate words,
mechanic duplicates) and a Deno case for mark characters.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Parses de:Title;en:Title (';' forbidden in titles, errors with line number),
generates an idempotent reconcile for game_alt_titles, adds an info row to
checks.sql and attaches alternative titles to Testspiel B. Regenerated files.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>