From 7e900a0f7f540e0dd7a64ec1befd1c5a743aed16 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Fri, 10 Jul 2026 06:30:09 -0700 Subject: [PATCH 1/2] =?UTF-8?q?#326:=20point=20facets=5Furl=20at=20sample?= =?UTF-8?q?=5Ffacets=5Fv4=20=E2=80=94=20place=5Fname=20search=20now=20work?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause of #326 (search can't find "Axial seamount summit caldera" despite it showing in the table's Place column): the deployed isamples_202608_sample_facets_v3.parquet predates the #311 builder fix (merged in #318), so its place_name column is NULL for all 6,026,242 rows — while the table displays Place from samples_map_lite_v3, which DID get the fix in #319. The search scoring weights place_name (w=2), but every value it scanned was NULL: any sample findable only by place could never match. Fix mirrors #319 exactly: rebuilt sample_facets from the live prod 202608 wide (downloaded fresh; samp/samp_geo counts match the builder manifest) with the current build_frontend_derived.py, and uploaded as isamples_202608_sample_facets_v4.parquet — a NEW filename, never an overwrite (immutable-cache rule). Validation: - 6,026,242 rows (unchanged universe) - place_name coverage 2,263,648 (37.6% — identical to #319's lite numbers) - ZERO rows differ from v3 on any non-place column (pure column-content fix) - "axial seamount summit caldera" → 284 matches, exactly consistent with lite_v3's exact-phrase count (my earlier 805 was a broader substring) - spot: IGSN:321000001 → "[Axial Seamount summit caldera]" The v3 references remaining in comments describe the flat facets file generically and are left untouched to keep this diff one line. Fixes #326 (part 1: missing results). Part 2 (search hang) is being characterized separately — likely the #190 full-read fallback pulling the (now 69.4 MB) facets file cold. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01AjnkWb4HpuLeDbYfzmY3X9 --- explorer.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explorer.qmd b/explorer.qmd index bfa6390..fcd15ef 100644 --- a/explorer.qmd +++ b/explorer.qmd @@ -822,7 +822,7 @@ lite_url = `${R2_BASE}/isamples_202608_samples_map_lite_v3.parquet` // pinning the version here keeps staging and prod each self-consistent. wide_url = `${R2_BASE}/isamples_202608_wide.parquet` // v2 carries object_type alongside material and context (URI-string columns). -facets_url = `${R2_BASE}/isamples_202608_sample_facets_v3.parquet` +facets_url = `${R2_BASE}/isamples_202608_sample_facets_v4.parquet` facet_summaries_url = `${R2_BASE}/isamples_202608_facet_summaries.parquet` // Pre-aggregated single-filter cache for fast cross-filtered facet counts. cross_filter_url = `${R2_BASE}/isamples_202608_facet_cross_filter.parquet` From 04806dc0934b3aa8b5e992e3274d5133c5e48d05 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Fri, 10 Jul 2026 07:29:45 -0700 Subject: [PATCH 2/2] =?UTF-8?q?#326:=20raise=20smoke=20search=20budget=209?= =?UTF-8?q?0s=E2=86=92150s=20=E2=80=94=20facets=20grew=2062.5=E2=86=9269.4?= =?UTF-8?q?=20MB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The pre-deploy smoke's "pottery" search must cold-download the full facets parquet (the #190 range-request fallback applies on CI) before scanning it. 90s was already documented as marginal for broad terms; the #326 place-name rebuild grew the file ~11% (real place strings replacing NULLs) and pushed borderline runners over the line — the same commit passed this gate at 06:20 and failed it twice ~07:15 (2026-07-10), failing at test_smoke.py:119 both times with boot checks green. 150 s keeps the gate a liveness check (dead search wiring still fails fast via the pageerror / fatal-console asserts) without flaking on runner variance. Latency itself is tracked by #167 instrumentation, #190, and the FTS track #169–#172. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01AjnkWb4HpuLeDbYfzmY3X9 --- tests/test_smoke.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/test_smoke.py b/tests/test_smoke.py index ebe5630..4bd51cd 100644 --- a/tests/test_smoke.py +++ b/tests/test_smoke.py @@ -122,10 +122,20 @@ def _on_console(msg): const t = (el && el.textContent || '').trim(); return t && !/Searching/i.test(t) && /result/i.test(t); }""", - # Aligned with the perf test's 90s search budget — a cold - # DuckDB-WASM query + remote parquet fetch on a slow CI - # runner can exceed 60s without the build being broken. - timeout=90_000, + # Liveness budget, not a latency SLA. A cold DuckDB-WASM query + # must download the FULL facets parquet on CI (the #190 + # range-request fallback), then ILIKE-scan it; on a slow shared + # runner 90s was already marginal for broad terms like + # "pottery", and the #326 place-name rebuild grew the file + # 62.5→69.4 MB (real place strings), which pushed borderline + # runners over: the same commit passed this gate at 06:20 and + # failed it twice ~07:15 on 2026-07-10. 150s keeps the gate + # meaningful (dead search wiring still fails fast via the + # pageerror/fatal-console asserts below) without flaking on + # runner variance. Search *latency* is tracked separately + # (#167 perf instrumentation, #190 fallback, #169–#172 FTS as + # the real fix). + timeout=150_000, ) results_text = page.locator("#searchResults").inner_text().strip()