screenText sammelt Ansagen per MutationObserver und vergleicht sie; wartet
auf leere Region mit registrierter Ansage bzw. 400 ms Ruhe. Unload-Skript mit
TCP-Schutz, Doku-Praezisierungen.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Jede Suche enthaelt das Kunstwort des eigenen Datensets (Kollision web/api
behoben); Kachelzaehlung ohne first(), konkrete Trefferzahlen; screenText
wartet auf die Live-Region statt sie zu entfernen; Latenzmessung ueberspringt
bereits sichtbare Treffer, Filtersuchen ergaenzt; Ladeskripte mit Exit-Code
und TCP-Schutz; Doku aktualisiert.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Playwright-Projekt perf (nur mit PERF_WEB_URL, nur lesend, nie in der CI):
CDP-Drosselung 100 ms / 10 Mbit/s, mind. 100 Suchen, Messung im Browser vom
letzten Tastendruck bis zur ersten Kachel. Ladeskript fuer synthetisches
Volumen unter supabase/perf/. Messung und Aussagegrenzen in der Umsetzungsdoku.
Refs #3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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>
Replace tests that could not fail (manual_fields stability, no-op update), select runbook games by id, add grant matrix and forged-admin tests, assert vocabulary seeding and Deno checksum in CI, clarify the set local convention and API notes.
Refs #2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds the checks.sql smoke step, the verified CLI result for generated seed content and the created_at/updated_at note for the API.
Refs #2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Includes the checked CLI assumptions (sql_paths, begin/commit) and implementation notes in the spec.
Refs #2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Deno script validates vocabulary.csv and startbestand.csv and generates the idempotent SQL, key list and checks.sql. startbestand.csv stays header-only; vocabulary.csv is a proposal pending approval (C0). seed.sql no longer inserts genres and mechanics.
Refs #2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sources, publishers, hidden/merged columns, manual_fields triggers, catalog_games view and column grants on games (KAT-05, PR 2a). Fixtures for the tests are generated from supabase/catalog/testdata.
Refs #2
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>