Huginn/crates
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 4b5eaf9b8f Semantic search refuses while the index rebuilds; bound, cancel and re-verify
Operator ruling 2026-09-30: while the index is rebuilding (a re-pulled model,
a lost collection, Reconciling or Behind) a semantic search refuses with a
typed Unavailable naming the state and the pending count, at the sink and
again in Projector::search, and never answers from a half-filled collection.

Soul's findings on 11b:
- a failed search clears the reconciliation, so whoami stops reporting Current
  and the worker verifies again; the idle recheck is an absolute time that
  searches no longer push out;
- the queue holds at most SEARCHES_QUEUED_MAX and refuses the rest by name;
  the worker serves one search per turn and returns to its writes; the serve
  loop takes back a search it timed out (IndexSink::abandon), so a queued one
  is never embedded;
- the model identity is read again after the query is embedded, and the
  collection's label is re-read before it: a search is one decision;
- a failure report's pending count is refreshed under the lock that takes the
  inbox (absorb);
- wait_status has one overall deadline, and the test gate and worker-stop
  waits are bounded, so a mutant fails instead of hanging.

Tests pin each rule: ticket uniqueness, searched() returning exactly what the
worker answered, the refuse_searches call site, serving between batches, the
bound, abandonment, the rechecks and the label.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 16:25:55 +02:00
..
eureka-state Add the empty Rust workspace 2026-09-16 15:11:05 +02:00
huginn-daemon Semantic search refuses while the index rebuilds; bound, cancel and re-verify 2026-09-29 16:25:55 +02:00
huginn-mind Mind::rank returns the refs it dropped; delete Daemon::unheld 2026-09-29 16:25:46 +02:00