chat: search_chat over the shared source collection, huginn chat search #57

Merged
eureka merged 4 commits from gamecult-chat/chat-search into main 2026-11-11 19:11:25 +00:00

2026-11-11

chat: review fixes (stale corpus refusal, age parsing, mutant-killing tests, CRLF restored)
- A collection built for another corpus set is refused with a stale-index
  error on every read (listing included), not answered with an empty page.
- --after/--before ages parse on char boundaries and overflow is an error.
- Tests for inclusive span bounds, scroll order/filter, nearest filter and
  the corpus and ts_end_ms indexes; all ten surviving mutants now caught.
- index/tests.rs keeps the base file's CRLF endings (diff is content only).
- Drop the exclusion claim from the CLI help; document the listing limit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 18:56:05 +00:00
chat: an age is digits and a unit, never signed
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 17:38:53 +00:00
chat: huginn chat search CLI and render
`huginn chat search [TEXT]... [--room R]... [--after T] [--before T] [--top-k N] [--json]`;
T is an RFC 3339 instant or an age (6h, 2d), one parser. The render prints the
organ's header line per hit and each message verbatim with its event id, and a
truncated listing ends with the --after that continues it. chrono moves from
dev-dependency to dependency of eureka-state (already in the lock graph).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 17:36:20 +00:00
chat: search_chat over the shared source collection (wire, payload contract, Qdrant, queue)
Probe: the deployed Qdrant answers 1.17.1 at 127.0.0.1:6333 (>= 1.8: integer
range payload indexes and scroll order_by exist).

Wire: SearchChat / Chat, ChatQuery (door-checked by field), ChatHit with no
optional room_id, event ids or timestamps, published schemas regenerated.
Index: corpus payload on every point (forge searches must corpus=forge), chat
payload codec derived from the messages, keyword and integer indexes, upsert_chat
/ chat_nearest / chat_scroll on Qdrant and the fakes. CORPUS becomes
forge:GameCult+chat:rooms, so the existing meta mismatch rebuilds the forge index
once at deploy. sources::search_chat shares the identity check and fuse with
the forge search; chat rides the same queue (SourceAsk) and Found::Chat.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 17:34:21 +00:00