7 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5 2b82800c23 test(search): strengthen stability test to detect broken tie-break
The "results are stable" test queried "budget", a single-match query,
so the sort had nothing to reorder and would pass even with a broken
or removed ascending-id tie-break. Switch to "muller", where docs 1
and 5 tie on score, so the assertion actually exercises the tie-break.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-24 08:55:59 +02:00
Lucas WintherandClaude Opus 5 e4777e59e0 test(search): add recall suite for realistic natural-language queries
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-24 08:50:02 +02:00
Lucas WintherandClaude Opus 5 c47f0669ca feat(search): add two-phase pipeline with bounded concurrency and recency backfill
Adds searchPipeline, which ranks candidates shallowly at no API cost, then
enriches a bounded subset (DEFAULT_ENRICH_LIMIT=25, DEFAULT_CONCURRENCY=8)
and re-ranks, taking max(shallow, deep) so a strong title match is never
diluted by unrelated deep content. Auth and rate-limit errors abort the
whole search via isFatalSearchError instead of degrading silently; other
enrichment failures degrade one record and are counted. A recency backfill
spends leftover enrichment budget on the most recently updated candidates
so a deep-only match is reachable at all. Adds the src/search/ barrel
export.

Reconciles the previously uncommitted pipeline.ts (written against an
earlier, defective version of this task's brief) with the corrected brief:
mapWithConcurrency's phase-2 callback is now given an explicit
EnrichedCandidate return type so its `deep: TDeep | undefined` field is a
single type rather than an inferred union, which is what the `entry is
Pair` narrowing predicate requires under TS2677.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-18 07:30:48 +02:00
Lucas WintherandClaude Opus 5 3d3b8ff512 feat(search): add generic field-spec record ranking with exact-mode bypass
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:55:37 +02:00
Lucas WintherandClaude Haiku 4.5 df9f093b5d feat(search): add match-centred snippet extraction
Co-Authored-By: Claude Haiku 4.5 <[email protected]>
2026-09-17 10:50:54 +02:00
Lucas WintherandClaude Opus 5 926e241c7b feat(search): add bounded levenshtein and coverage-weighted field scoring
Adds boundedLevenshtein with row-minimum early exit, token scoring
(exact / prefix / contains / shared-prefix / edit distance), and
coverage-weighted field aggregation scaled by BASE_SCALE so that only a
verbatim phrase match reaches 1.0.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:46:58 +02:00
Lucas WintherandClaude Opus 5 5b0f73ae0e feat(search): add unicode-aware tokenizer with original-text offsets
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 10:14:30 +02:00