Huginn/crates
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens e99dc4404e Decide and take a search under one guard; a refill is a rebuild; a first build is lag
S1. serve_search absorbed the inbox and judged pending under one lock and
popped the search under a second, so an admission acknowledged before the
search was asked could be missed. The absorb, the judgement and the take are
now one critical section, and take_search never takes a search while the inbox
is non-empty or anything ahead of it is owed.

S2. The projector carries Build (Unbuilt, Built, Rebuilding). A collection made
again (label mismatch, or lost after it was once built) is Rebuilding until the
entries it owes are written; settle() is the one place that clears it, so a
failure mid-refill does not end the rebuild. Rebuilding reports Reconciling.
unsearchable stays the only refusal predicate.

S3. A mind whose index was never built is Unbuilt: its first build reports
Behind, so the search waits and answers whichever side looked first. Only a
rebuild of an index that exists refuses.

S5. ServeOptions::search_timeout is deleted. The sink owns the deadline
(Backoff::search_deadline, stamped on every search) and the serve loop asks
the daemon for it (IndexSink::search_deadline), so the loop's wait and the
worker's bound are one value. A mind with no identity and documents owed is
Reconciling, so a search is taken and refused rather than left for a spinning
worker.

S4. A test pins that a later call's bound shrinks as the search spends time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 20:28:22 +02:00
..
eureka-state Add the empty Rust workspace 2026-09-16 15:11:05 +02:00
huginn-daemon Decide and take a search under one guard; a refill is a rebuild; a first build is lag 2026-09-29 20:28:22 +02:00
huginn-mind Mind::rank returns the refs it dropped; delete Daemon::unheld 2026-09-29 16:25:46 +02:00