Commit graph Huginn/crates
Author SHA1 Message Date
Meta Vens
040ae57d53 daemon: a source search is a Search with no mind part (keeps the Handled/Routed sizes clippy already accepted)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:44:49 +01:00
Meta Vens
b16c0619a0 daemon: box the mind search so Pending stays small (clippy)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:43:27 +01:00
Meta Vens
393a0aff62 live smoke: refresh one small public repo into a scratch source collection, search it, delete it; the Qdrant source port can be pointed at a scratch collection
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:40:22 +01:00
Meta Vens
528deb296b sources tests: do not hold the fake's lock across its own accessor
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:32:51 +01:00
Meta Vens
6a66425931 source-search: compile fixes (startup bound, mirror init, test literal)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:27:50 +01:00
Meta Vens
d77747023e huginn sources: CLI door for SearchSources
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:25:26 +01:00
Meta Vens
1c227f5907 huginn-daemon: source index (chunker, git mirrors, forge catalog, refresh with embedder failover, SourceIndex on Qdrant), huginn-sources bin, daemon/worker source search not gated by the mind's index
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:25:25 +01:00
Meta Vens
5074181ebf wire: SearchSources/Sources, SourceQuery with its door, SourceHits (source-search-forge-public)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 06:25:25 +01:00
Meta Vens
21fb9b2b04 mind-self-run: every exit closes her Run once with the result's excerpt; the child sees EUREKA_INSTANCE and HUGINN_ENDPOINT for the huginn CLI
Squash of eureka-body/self-run-closes-run 55dd620..93f93c1 (Soul go; orphan
sweep cut: the mind admits one Self run in force and launch's close_dead closes
a dead holder). Operator: 'Look into the stale runs issue' and 'why has this
xenos filth not been replaced with nice clean CLI yet'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 05:02:20 +01:00
Meta Vens
bdf3d14cc4 Merge self-run-permission-mode: Self runs pass --permission-mode bypassPermissions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:51:49 +01:00
Meta Vens
5c2a861a6f Merge persona-addressees and self-run-permission-mode (Soul go on both)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:51:48 +01:00
Meta Vens
c6cceb6704 self-run: the actuator fixes --permission-mode bypassPermissions; print mode started in Manual (managed defaultMode not applied) and --permission-prompts none denied every eureka-state tool
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:33:11 +01:00
Meta Vens
92ecc697b1 persona: to_you is the organ's token; to is a JSON array of the other addressees
A mention string, display name or name list could write the word you into
the quoted join and pass for her own id. Now only to_you=true, derived from
her own sender id, says a message names her. Restores the newline escape in
the line format.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:32:55 +01:00
Meta Vens
5a035bff23 persona: put the addressee reading line in the turn input
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:10:09 +01:00
Meta Vens
005fa7aaa5 persona: render whom each message addresses and say how to read it
The mouth delivers each message's mentions but the turn input never showed
them, so a Persona could not tell a reply to another Mind from one to her.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:08:19 +01:00
Meta Vens
f896fbaa75 self-run: the result events text, subtype and error flag are written to the unit's stdout, bounded to 4 KiB and marked when cut, so what claude concluded reaches the journal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 03:01:18 +01:00
Meta Vens
d98a9db5fe self-run seed: validate the copied links in the destination, so a link that leaves the seed and returns by its own name is refused
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 02:47:34 +01:00
Meta Vens
d0e58221aa self-run: the config copy reproduces in-tree seed links, refusing any that resolve outside the seed; the start message names the eureka skill
A link is checked by canonicalising it in the source against the canonical
seed root, so a link through another in-tree link cannot escape.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 02:34:06 +01:00
Meta Vens
1421b5fe0a mind-persona tests: pin the doctrine bound at 96 KiB (kills the only surviving mutant)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:40:38 +01:00
Meta Vens
773331a75e mind-body: pin the persona doctrine and campaign surface
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:30:09 +01:00
Meta Vens
35677d7ff0 mind-persona tests: a mind with no campaign; doctrine re-read across turns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:27:06 +01:00
Meta Vens
d00b42125e mind-persona: doctrine files lead each turn's instructions; the campaigns in force are listed and constrain start_self_run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 01:25:03 +01:00
Meta Vens
577cae23a7 huginn-mind: a persona re-put no longer poisons reads; the admission index covers pipeline documents only
The persona document is replaced by design (compare-and-swap on updatedAt), so
its second put is a second receipt naming one identity. AdmissionIndex::build
read that as a doubled A10 write and refused every view and query. The persona
type has no admission facts there now; Mind::persona reads its own receipt. A
pipeline document written by two receipts still refuses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 00:46:22 +01:00
Meta Vens
7db86f7dd1 mind-heartbeat: one heartbeat routes every Persona turn on an initiative timeline; the classifier's urgency multiplies regain, an operator mention fills, a Self-run completion reaches the classifier and never fills; burn is real spend read as the heartbeat; each Persona on her own Huginn; DM rooms answered alone; the mind-wake path deleted (squash of eureka-body/mind-heartbeat d54ba01..3a4d28f; Soul s1-s4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 02:49:35 +01:00
Meta Vens
d54ba01103 mind-self-via-lease: a Self run borrows the one Claude token from the connector over the lease socket; the child gets a cleared environment and a fresh per-spawn config; the unit's RuntimeMaxSec is the one run cap; settle is claude's last modelUsage plus the tail after it; an Expired lease withdraws its run (squash of eureka-body/mind-self-via-lease fcaf0a1..a91fc1c; Soul s1-s3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 00:15:14 +01:00
fcaf0a1a23 mind-persona: the Persona turn organ; brake and dial before spend, typed schema reply decoded strictly, acks after posting, framed member text, campaign-checked Self-run briefs; real connector client (ModelConnector 480cf94) and RUDP chat client to the Bifrost mouth (squash of eureka-body/mind-persona onto 49bfe17, head f25decf; Soul s1, s2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 21:03:19 +01:00
49bfe17c18 swarm-dial: one swarm envelope (brake, heat, rate, run cap, k, shares) in a root-only store; read_envelope fails closed; Grant narrowing never widens (squash of eureka-body/swarm-dial 6963b75..46f7dd6; Soul s1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 20:28:57 +01:00
Meta Vens
9f8b927cf2 Type the rows closure of the read-path test
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 15:04:16 +01:00
Meta Vens
2023c0a1e3 Let tests replace the read path under the gate so the view comparison is pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 15:03:47 +01:00
Meta Vens
4c00208f8b Plant the changed-key fault with its receipt renamed so only the re-key check refuses it
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:59:10 +01:00
Meta Vens
9d77c18546 Drop the test-module pipeline_key import the gate's move to the parent module left unused
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:55:09 +01:00
Meta Vens
242f5a7ef5 Re-encode the read-back fault payload as a wider array header, not a map the decoder refuses
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:54:09 +01:00
Meta Vens
92fb906b07 Bend stored questions through the leaf's array encoding in the read-back fault tests
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:52:32 +01:00
Meta Vens
3d6f9179d0 Aim the read-back fault tests at the last question, not the last pipeline document
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:51:42 +01:00
Meta Vens
ac139b4785 Decide the read-back gate in Mind::read_back and pin its checks with committed fixture tests
The gate body moves out of the ignored test into one function over a Mind, now
also refusing a receipted pipeline write with no stored document. The ignored
test is a thin caller; CI plants each fault on a 135-document store.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:50:50 +01:00
Meta Vens
c5fe12ce11 Drop the test-module import the deleted migration test left unused
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:12:27 +01:00
Meta Vens
27921e5653 Add Reader::view and the one stored-document read-back gate in huginn-mind
Mind::view becomes validate_ref then Reader::at(head).view(id); Reader::view is
its lookup, so a caller holding one Reader views many documents from one
snapshot. stored_documents_read_back (ignored, HUGINN_MIND_SNAPSHOT) decodes,
validates, rekeys, re-prepares and views every stored document through one
Reader: O(N) where the deleted per-document Mind::view loop was O(N^2).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:03:11 +01:00
Meta Vens
fe9069e528 Delete the migration-era read-back tests and the leaf's overlapping real-store gate
mind::tests::snapshot_admits_and_reads_back (an O(N^2) per-document Mind::view loop
plus the six idunn-watchdog resolutions and over-64-byte withdrawals of the
2026-10-01 migration) and eureka-pipeline tests::stored_documents_read_back go,
with the leaf README's real-store section. The one gate follows in huginn-mind.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 14:02:51 +01:00
Meta Vens
af3efcad40 Members walk: leave descending and cursor to the Selection default
With projection gone the walk spreads Selection::default(); an explicit
descending: false was a mutant no test could tell from the default.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 22:21:58 +01:00
Meta Vens
2a98dcdff2 Members walk test: the role hop uses resolutions of a cut spec (a question cannot be superseded)
The previous commit's test admitted a Superseded resolution of a question,
which admission refuses. Cite r2 through subject and superseded_by instead.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 22:17:30 +01:00
Meta Vens
8c98b7b028 Members walk: drop the dead projection assignment; pin the cites role through members
The walk never reads projection (select reads it only in validate and the
cursor digest), so the assignment and its "headers only" comment decided
nothing. A new test cites Q1 through two roles by rows of one schema and
asserts exact members and matched for subject, superseded_by and no role.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 22:16:07 +01:00
Meta Vens
15d8efe8ab Members walk test: expected ids in the mind's order (admission batch, then key)
The previous commit's test expected plain key order and fails; this one builds
and corrects it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:34:42 +01:00
Meta Vens
05347b5417 Members walk test: 599 members, so a page of 199 takes 4 pages and fails
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:33:27 +01:00
Meta Vens
eadc2bfadc Qdrant search test: the limit is pinned by value at 1, 12 and 200
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:32:56 +01:00
Meta Vens
dccf920030 Mind::members builds its walk inline and counts its pages; the tests observe the production walk
walk_selection is deleted: members is the only place the walk is spelled.
Members carries the number of select pages taken. The page-size test calls
members with caller limit 1 and document projection over 590 questions and
asserts the exact ids and exactly 3 pages. A new test pins that the cites
hop limits members and matched to the cited rows.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:32:56 +01:00
Meta Vens
68f93b69dc Daemon test: a large top_k reaches the index whole
Twenty members, top_k 15 and 200: the index limit and the row count are both
asserted. Unverified at this commit: built and tested once at the end of the batch.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:05:03 +01:00
Meta Vens
2041fa8467 Qdrant search: the test parses the request body as JSON; the live smoke excludes a non-member
filter and params are asserted by value, so must_not and a top-level exact
fail. live_index_smoke searches a strict subset that leaves out the nearest
point. Unverified at this commit: built and tested once at the end of the batch.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:05:02 +01:00
Meta Vens
abd2890834 Mind::members: the walk's page size is the mind's by construction
The walk selection is built field by field from the caller's filters, so a
caller's limit, projection, order or cursor cannot reach it (one select per
member at limit 1 measured 300 ms against 14 ms). A test pins it.
Unverified at this commit: built and tested once at the end of the batch.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 21:05:02 +01:00
Meta Vens
f13138c3fc Mind::members: drop the projection override the walk never read
cargo-mutants showed deleting it survives: ids come from rows whatever the
projection, so the override decided nothing.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 20:17:47 +01:00
Meta Vens
0cfb4fa278 Index test: the ticket test hands the sink the member it expects back
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 19:54:52 +01:00