Commit graph

343 commits

Author SHA1 Message Date
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
dd07485b4e Merge eureka-substrate/semantic-members-scores: a semantic query returns up to top_k members of its selection, each with its score (Soul s4 holds)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:39:15 +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
1868f6a023 Request schema: the SemanticQuery description keeps its newlines escaped
The previous commit wrote raw newlines into the JSON string, which the
published file must not hold.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 20:03:08 +01:00
Meta Vens
19a4d83571 Request schema: regenerate SemanticQuery's description (top_k is the most rows answered, all members)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 19:58:26 +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
Meta Vens
874dacde38 Test helper rank_all: the local ranked no longer shadows it
The first commit's huginn-mind test module did not compile (helper shadowed
by a local binding, and a mechanical rewrite had touched the helper body).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 19:52:28 +01:00
Meta Vens
d7b1b1d116 A semantic query returns up to top_k members of its selection, with scores
The mind decides membership (Mind::members) before the index is asked; the
index scores exactly the members (Qdrant has_id + exact) and the page carries
one cosine score per row. Deletes OVERSAMPLE_MAX, the x4 oversample, the
unfiltered VectorIndex::search contract and check_semantic.

Not yet compiled when committed: the first Yggdrasil run follows.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 19:51:29 +01:00
Meta Vens
075d37d748 eureka-substrate map: semantic retrieval quality (body facts S-B1..S-B8, one-cut rationale, cut sequence)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:43:51 +01:00
Meta Vens
0b8ae4f425 eureka-substrate map: R-B10 live hook probes on claude-code 2.1.308
Admit deny reaches the model (prefixed "hook error"); SubagentStart context
and the admit hook both reach subagents; PreToolUse updatedInput on Agent
does rewrite the subagent's prompt (GitHub #39814 does not hold here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:35:21 +02:00
Meta Vens
6066ef0195 eureka-substrate map: recall at admission (body facts R-B1..R-B9, cut sequence)
Imagination pass for cut recall-admit (session self-2026-10-23-eureka-b):
hook input fields, digest stability, latency, fail-open rationale, and the
re-scoped trigger order with the prompt hook last.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:29:56 +02:00
Meta Vens
98355ac5df mind-body self_run test: PipelineTarget gains repos (merge adaptation for campaign-repos)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:41:21 +02:00
Meta Vens
f8eaf50a03 campaign-repos: a campaign's repo set changes by target revision; one line_of decides supersession lineage (squash of eureka-substrate/campaign-repos c0a1f2c..4442e1a)
target.repos additive at epoch v2; Docs::repos_in_force owns membership; line_of owns lineage (targets per campaign, cut_specs per campaign+cut, stewardships per instance+repo, rulings and follow_ups global); rival_in_force owns one-assignment-in-force. Soul s5 holds (eureka-substrate:verdict:cut-campaign-repos.s5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:38:20 +02:00
Meta Vens
35dda44001 mind-self-run: the Self-run actuator (squash of eureka-body/mind-self-run 70d0cef..654a209)
Opens claude only under an open Self run; one pure decide() owns flush, grace, headroom and escalation; process-group signals; ends on child exit or EOF. Soul s3 holds (eureka-body:verdict:cut-mind-self-run.s3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:26:31 +02:00
Meta Vens
5a5890423e Merge readme-front-door: README opens with value, problem, entry points, live versus planned 2026-10-22 20:14:11 +02:00
Meta Vens
f750c78f1d README: status line with live crates, entry points and planned work; workspace has five crates
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:13:58 +02:00
Meta Vens
68c6dd7fe0 Merge eureka-body/mind-body-riders: partial brake stop names each unit, prefix-neighbour gate test, varied persona claim ids (Soul s1 holds)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:51:24 +02:00
Meta Vens
bd17d9a263 Research: Self-run permission boundary (serves eureka-body❓self-run-permissions)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:37:45 +02:00
Meta Vens
056e02d28a mind-body tests: Persona claim ids are drawn from the name generator
The Persona claim-set property drew ids as doc-N and doc; they now come
from the instance-name generator (varied alphabets, both separators, edge
lengths), so a refusal keyed on id text cannot pass. Set shapes and sizes
are unchanged. Follow-up persona-claim-ids-varied.

Not yet built; verified at the head of the cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 17:37:38 +02:00
Meta Vens
547a9cd354 mind-body tests: check is refused for a held instance whose prefix neighbours are released
eureka is held; eureka-two, eureka2 and xeureka are released with a dial and
open. Kills Soul's s-check-wrong-instance-by-prefix mutant. Follow-up
gate-prefix-neighbour-test.

Not yet built; verified at the head of the cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 17:37:17 +02:00
Meta Vens
d427b0e268 mind-body: a partial brake stop names each unit's state
When systemctl stop fails, stop_all asks is-active for each of the two
units and the error names each state (active, inactive, failed, unknown)
beside the exit status; brake hold says the brake is held and the stop
failed, not that the units were not stopped. Exit 2 and the held brake
are unchanged. Follow-up brake-partial-stop-message.

Not yet built; verified at the head of the cut.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 17:37:08 +02:00
Meta Vens
c0a1f2c958 eureka-body map: cut sequence refreshed (Self-run and Persona critical paths), body facts F23-F25 (Claude Code session and usage probes)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 17:34:05 +02:00
Meta Vens
70d0cef421 Research: fork desk prior art and substrate (Eyes facts)
Serves eureka-body:ruling:fork-desk-web-ui-on-huginn (session
sp-reentry-2026-10-20).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 15:33:51 +02:00
Meta Vens
c51a6043d2 mind-body README: host() lives in src/bin/mind-wake.rs; glob reaches it
Fixes eureka-body:finding:cut-mind-wake.s3.readme-places-host-in-wake-rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:09:36 +02:00
Meta Vens
0c5669ed85 mind-wake: pin the cadence at the dial's maximum and document the container lane
Adds the row (heat 0.05, base cooldown u32::MAX, 85,899,345,900 s) to the
wait test so any ceiling on the wait fails, and gives the ignored host test its
command in a crate README (the lane that kills the host() mutants). Tests and
docs only; builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:53:14 +02:00
Meta Vens
6f4f970c1a mind-wake process tests: HUGINN_ENDPOINT is the fallback, and in a container the real bin and daemon record this machine's host
The env test pins the variable's name and that the flag wins over it. The ignored container test seeds a mind, serves it with the real huginn-daemon, writes the brake at its real root and runs the real mind-wake with an empty PATH (so no unit is reached): the run it opens must carry /proc/sys/kernel/hostname as host and mind-wake as agent, which kills the three host() mutants of finding host-survivors-reachable.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:57:34 +02:00
Meta Vens
61766cab17 mind-wake tests: the cadence is pinned below one second and above a day; the agent name and every Declined code are literals
Closes the test gaps of findings cadence-clamp-unpinned and codes-and-agent-unpinned: a floor of 1 s or a ceiling of 80000 s on the wait now fails the cadence test, and the receipt's agent and the printed code of every refusal are compared with the spelling, not with the constant that produced them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:57:24 +02:00
Meta Vens
84d3aee02a mind-body wake tests: finding the newest Persona turn reads one row
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:28:51 +02:00
Meta Vens
10077f186c mind-body wake tests: a type alias for the held cases (clippy type_complexity)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:18:33 +02:00
Meta Vens
6e19e1a4c8 mind-body public surface: wake
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:17:17 +02:00
Meta Vens
937293d351 mind-body: the waker, one cycle that reads the brake once, waits out the cadence since the newest Persona turn, and hands its Grant to open_and_launch
wake::cycle reads the brake and dial through the one derivation behind
read_effective and the unit gate, returns Held before any query, admission or
unit call, finds the newest Persona turn of hers (any status) with one
descending single-row query, and launches through open_and_launch. The
mind-wake binary prints the outcome. control_path no longer echoes the
instance it refuses.

Does not build the public_surface snapshot yet (the next commit updates it).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 08:16:10 +02:00
Meta Vens
94ced33419 mind-body: check tests: out-of-bounds dial pinned in-crate, store listing compared before and after
The writers refuse an out-of-bounds dial, so the DialOutOfBounds reading is
produced through the unchecked store the crate's own tests already use. The
store directory holds a second file besides control.cc, so the no-write test
compares listings rather than counting one.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 07:39:55 +02:00
Meta Vens
f1f36d5ff1 mind-body: mind-control check, the brake gate a unit runs before it starts
Exit 0 only when the one derivation reads Released; every other reading
(absent, held, no dial, dial out of bounds, undecodable store) is an error
and exits 2, which systemd's ExecCondition reads as skip. A pure read through
FileSource: no writer, no created file or directory.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 07:33:20 +02:00
Meta Vens
bcda08b8cd mind-body: brake hold stops the exact units unit() names, and the stop path is pinned
stop_args now builds each name through unit(), the one name path start and
alive use, so the stop argv cannot disagree with the units that run (the
:* glob matched none of them on real systemd). A launch test ties stop_args
to what start passes systemctl for several instances; two binary tests run
mind-control brake hold with a fake systemctl first on PATH, so main's
stopper wiring is pinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 06:43:48 +02:00
Meta Vens
5323167555 mind-body public surface: cli::run takes stop_units
4d48aba still fails the public_surface test on this line.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:56:24 +02:00
Meta Vens
4d48aba4a6 mind-body public surface: stop_all and SystemctlReply.code
The previous commit (df21694) builds but fails the public_surface test: it did
not update the committed snapshot.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 04:32:38 +02:00
Meta Vens
df21694e14 mind-body: brake hold stops her running units after writing the brake held
SystemdLauncher::stop_all runs one synchronous systemctl stop over the
instance's mind-self and mind-persona units (stop_args, built from the same
templates as start and alive). cli::run gains a stop_units parameter that only
brake hold calls, after the write whatever its outcome. The window probe uses
dial set instead of brake hold, since a real hold now runs systemctl.

Builds not yet verified on the stopgap at this commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 03:48:49 +02:00