Replace the FTS-only seed phase with hybrid search that combines FTS5
full-text matching with vector similarity via Reciprocal Rank Fusion
(RRF), matching the approach already proven in the search command.
Key changes:
- seed_timeline is now async, accepting an optional OllamaClient for
vector embedding. Gracefully falls back to FTS-only when Ollama is
unavailable (same pattern as search_hybrid).
- SeedResult now includes search_mode ("hybrid", "lexical", or
"lexical (hybrid fallback)") for provenance tracking in both human
and robot output.
- run_timeline and handle_timeline are now async to propagate the
seed_timeline future.
- Timeline result metadata includes the search mode used.
- Seed retrieval uses 3x oversampling (max_seeds * 3) then deduplicates
to the requested entity count, improving recall for discussion-heavy
entities.
Test updates:
- All seed tests updated for the new async + OllamaClient signature
(client=None exercises the FTS fallback path).
- Pipeline integration tests updated similarly.
- timeline.rs gains #[derive(Debug)] on TimelineResult for test
assertions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>