Commit graph

297 commits

Author SHA1 Message Date
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
Meta Vens
0b3cac3b45 mind-body launch tests: borrow fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:03:30 +02:00
Meta Vens
8e8fb0d17d mind-body: types, forbid(unsafe_code) and pair-wise gate properties carry the Grant rule
Per ruling mind-launch-forge-scanner-bound: compile_fail doctests for the
struct literal and each derive-provided path on Grant; forbid(unsafe_code) in
the library; the gate property draws the mind's own instance from the same
slug generator as the Grant's and tests pairs; Persona claim shapes are drawn
and rotated by seed; the path-literal and static-keyword scanners are deleted
from the public-surface test, whose limits are written at its top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 22:59:21 +02:00
Meta Vens
7f70bbda13 mind-body launch tests: instance names up to 36 KB
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:50:20 +02:00
Meta Vens
b95837872e mind-body launch tests: Persona claim sets up to 100000
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:21:17 +02:00
Meta Vens
b6d5acca7d mind-body public surface test: every static keyword is in the snapshot
A process-global is the one channel through which an existing public
function's body, whose signature the snapshot does not change, could carry a
root from one call to another. The library has none today; a new one is a
line the snapshot does not have.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:21:16 +02:00
Meta Vens
85d3aad47b mind-body launch tests: the gates are observed by property, not by example
The instance gate is checked against names generated from the real one:
every single-character substitution, deletion and insertion, every
transposition and permutation, rotations, prefixes and suffixes, case flips,
NUL and whitespace padding, repetitions, and seeded random names of the same
and other lengths. The Persona refusal is checked at every claim-set size
from one to 300 in four shapes, duplicates included, and for every kind
alone. A compare or bound weaker than equality passes neither.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:15:20 +02:00
Meta Vens
19e6c050ed mind-body: pin the library's public surface as a whole
tests/public_surface.rs reads the library source the way a consumer sees it
and compares every pub item with its signature, pub fields, derives, impl
headers and every path-looking string literal to tests/public_surface.txt.
A new pub static or pub fn under any name, a derive onto Grant, or a root
read from another path fails it. It replaces the three compile_fail
doctests that named with_root, TEST_ROOT and control_root. Dev-dependencies
syn, quote and proc-macro2, already in the graph through serde's derive.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:15:19 +02:00
Meta Vens
47d9a35fcd mind-body: the process environment is unreadable by library code, by lint
clippy.toml lists the std::env readers (var, var_os, vars, vars_os,
set_var, remove_var, args, args_os, current_exe, temp_dir, home_dir) and
libc::getenv as disallowed methods, and lib.rs forbids allowing them back.
main.rs and the self-spawning integration test carry the only allows.
The forge probe's environment sweep and its 22 guessed variable names go:
the lint covers a variable of any name, so the list was a second, weaker
path for the same rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:15:18 +02:00
Meta Vens
cb6f1a5a4e mind-body dependency graph test: read every target, not the host's
cargo unifies features per target, so a target-specific line that restores
eureka-state's default features left a Linux graph clean while a Windows
build compiled the huginn CLI's parser. The test asks cargo tree for
--target all, for the control and for mind-body.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:15:18 +02:00
Meta Vens
7be2261d0c mind-body launch tests: a Persona request of every claim kind at once is refused
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:20:11 +02:00
Meta Vens
199790739d mind-body launch tests: case and suffix forgeries of the instance, Persona requests with several claims
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:19:14 +02:00
Meta Vens
5f38ac74be mind-body forge probe: a root from the environment, and the test seam in the library build
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:19:14 +02:00
Meta Vens
e9809d3134 mind-body: take eureka-state without its default features; a test pins clap out of the graph
Builds (merge head 5da8b06 is green; this commit adds the manifest change and
the cargo tree test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:19:14 +02:00
Meta Vens
5da8b06a6d Merge remote-tracking branch 'origin/main' into eureka-body/mind-launch 2026-10-10 19:16:19 +02:00
Meta Vens
766cba4c3a Merge eureka-substrate/huginn-persona-state: Huginn holds an instance's Persona state
eureka-substrate:cut_report:cut-huginn-persona-state.h1-h3, held by Soul
(eureka-substrate:verdict:cut-huginn-persona-state.s3). Validated against the
published schema, replaced whole under CAS with a receipt. Not deployed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:44:28 +02:00
Meta Vens
126a914abb Restore LF line endings in the files my last three commits rewrote as CRLF
The repo stores LF; a scripted edit on Windows wrote CRLF. No content change:
git diff -w d5fddc3 shows only the three commits' real edits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:58:14 +02:00
Meta Vens
40fd220d16 mind-body: fix the moved tests' paths, the seam's comment and unused imports
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:21:25 +02:00
Meta Vens
6df2a684ef one_persona_per_mind test: a planted row is unreadable on status and door alike
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:20:39 +02:00
Meta Vens
27e8d58757 huginn CLI whoami prints the persona door state
One bounded line: absent, stored updatedAt=<stamp>, or unreadable; no value
of the document. Test over canned Whoami answers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:15:44 +02:00
Meta Vens
6f483bbe02 Persona status goes through persona(): one decision of readability
whoami's persona field derived from stored_updated_at, which ignores the
writing receipt, while persona_get requires one. Status now matches on
persona(), so a receiptless row is Unreadable on both. The test asserts
agreement for every planted row and for a put-written row (restoring the
is_err equality weakened in c5af029).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:15:44 +02:00
Meta Vens
d5fddc3a58 Merge origin/main (huginn CLI) into huginn-persona-state
Resolves the eureka-state Cargo.toml comment block to main's, regenerates
Cargo.lock from main's with cargo update -w, adds the Persona and PersonaPut
arms to the CLI's unexpected-answer match and the persona field to the CLI
test MindStatus literals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 10:15:12 +02:00
Meta Vens
3fac90076d mind-body: the reader takes the instance only; the control root is a constant a caller cannot supply
read_effective(instance) reads CONTROL_ROOT/<instance>/control.cc. The root override is a thread-local under cfg(test) inside the crate; the reader tests and the Grant launch tests move in-crate to use it. The operator CLI's show derives its display line from the store it already read. An external forge probe and compile_fail examples pin the rule; the instance gate is pinned with same-length, prefix and extension forgeries, and the Persona refusal with a claim of every kind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:05:22 +02:00
Meta Vens
c5af029d20 Tests follow PersonaStatus: the MCP whoami answers in it, a receipt-less planted row is not a door read
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:53:05 +02:00
Meta Vens
e968cf2e1e Merge eureka-substrate/huginn-cli: the huginn CLI over HuginnClient
eureka-substrate:cut_report:cut-huginn-cli.h1 and h2, held by Soul
(eureka-substrate:verdict:cut-huginn-cli.s2). Strict JSON in and out, read-back
after admit, exit codes per the map; clap behind the default cli feature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:50:48 +02:00
Meta Vens
b759addf3e Regenerate the response wire schema for PersonaStatus; lock serde_path_to_error
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:38:42 +02:00
Meta Vens
ea28b8cbc0 Decoder reports field path and error class, never a caller value; status says Unreadable
The shared request decoder (envelope.rs) no longer quotes decoder text or
envelope fields: a refusal names the field path and the class. MindStatus.persona
is PersonaStatus {Absent, Stored, Unreadable}, so whoami answers in the persona
door's own terms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:32:48 +02:00
Meta Vens
e95e2d57aa Merge origin/main (f003801) into huginn-persona-state
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:30:51 +02:00
Meta Vens
7d85db3af3 mind-body control test: the no-lock-file listing reads the instance's directory
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:14:02 +02:00
Meta Vens
36a9f47133 mind-launch tests: split the Persona step 0 test; admission allows one live Self holder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:11:46 +02:00
Meta Vens
1db7ff3946 huginn CLI: decode errors report category and position, never serde's message; a refused read-back is the mind's no; clap behind a default cli feature
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:06:56 +02:00
Meta Vens
663a844e76 mind-launch: a Grant names its instance and its store, Persona runs take no claims, breaker bounds pinned
Grant carries the instance whose store was read; read_effective(root, instance)
derives the store path itself and no caller supplies a path or a source. The
launch refuses a Grant of another instance and a Persona request with claims,
both typed refusals that name no input. Launcher drops its dead label: liveness
is keyed by unit (instance, turn). Tests pin Persona step 0, the Operator-run
exclusion, the fiftieth ended run and the same-batch boundary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:54:29 +02:00
Meta Vens
35c5b7ac24 Merge origin/main (f003801) into eureka-body/mind-launch
Mechanical adaptation: testkit's PipelineCutSpec builder gains the new reads field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:50:46 +02:00
Meta Vens
5ce103d2b2 huginn tests: pin the build sha, the batch bound, blank-line paging, list paths and fact tokens
Kills the seven survivors of the first mutation run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:48:46 +02:00
Meta Vens
8f59d4850a Persona: a put may rewrite identity fields, and every change lands
Pins identity-write-all-visible: publicName, publicDescription, presentation
and values change through put_persona with no per-field rule and no rate
limit beyond the monotone updatedAt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:35:25 +02:00
Meta Vens
ef7c5e5f2f Persona: the view's receipt is the newest one that wrote the document
The match on type, key and bytes was three conditions for one fact; the
newest receipt writing the persona identity is that fact. Tests pin the
declared-name walk and the receipt of each of five consecutive puts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:09:42 +02:00
Meta Vens
bf32a4955e Restore LF line endings in the files this cut touched
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:06:01 +02:00
Meta Vens
3d4049cf10 mind-body queue: drop the same-batch question test (the mutant it aimed at is equivalent)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:05:24 +02:00
Meta Vens
055b73e8f8 huginn door: report every lost key across the batch, accept only objects
The strict decode stopped at the first document with a lost key and let
serde read a struct from a JSON array. It now names every lost path in the
batch and refuses a non-object document or selection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:04:43 +02:00
Meta Vens
78773a2a13 Docs: eureka-state's huginn binary is the agents' CLI
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:01:01 +02:00
Meta Vens
02cb3dadcd huginn CLI over HuginnClient: whoami, view, query, recipes, admit with read-back, schema
A new bin of eureka-state, crates/eureka-state/src/bin/huginn/: the agents'
shell door to the mind. Text out, typed exit codes, strict decode of
agent-written JSON (unknown key paths refused, never values), the named
campaign-state recipes, and a read-back after every committed admission.
lib.rs, main.rs and tests/mcp.rs are untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:01:01 +02:00
Meta Vens
6bcec91bbc mind-body queue test: a run admitted in the question's batch is not after it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:56:19 +02:00
Meta Vens
f003801138 Merge eureka-substrate/clippy-pin: Rust 1.95.0 pinned, clippy clean
eureka-substrate:cut_report:cut-clippy-pin.h1, held by Soul
(eureka-substrate:verdict:cut-clippy-pin.s1). View is boxed in
HuginnMindResponse; the wire form is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:47:26 +02:00
Meta Vens
6fde91fe0a Persona: compile fixes and the regenerated wire schemas
The jsonschema error kind lives in jsonschema::error; the eureka-state tool
closures own their input; huginn.mind_request/response.v1 carry the persona
operations (derived by the existing published_wire_schemas test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:47:00 +02:00
Meta Vens
c50521191e mind-body launch test: the forged-holder test asserts only the refusal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:46:25 +02:00
Meta Vens
e426ef33c1 mind-body launch: AlreadyLive's holder is viewed before it answers Busy; huginn-mind pins the holder by its literal key
The holder RunId is grammar-checked only, so the launch asks the mind for its
in-force Self-run holders and refuses a name the mind does not show as this
instance's own. One reader of the slot serves step 0 and this check. The
admission test compares the refusal's run to the literal run key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:46:16 +02:00
Meta Vens
e623e7e249 mind-body queue: citing builds the citation both breaker and step 0 select by
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:40:25 +02:00