Commit graph Huginn/crates/mind-body/tests/control.rs
Author SHA1 Message Date
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
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
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
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
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
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
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
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
ed5fc195d2 mind-body control: Released carries a Grant only read_effective makes
The run cap and cadence leave the control reader only inside a Grant with
private fields, so a cap cannot exist without a released brake and an
in-bounds dial. effective() is private; its one caller is read_effective.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:32:19 +02:00
Meta Vens
7375687188 Pin Rust 1.95.0 and clear the twelve clippy lints red at main
rust-toolchain.toml owns which rustc and clippy judge the tree. View in
HuginnMindResponse is boxed so the large_enum_variant allow on the wire
type is deleted; the PipelineDocument allow keeps a sharpened reason.
Type aliases, is_multiple_of, slice::from_ref and a literal refused()
clear the rest. Wire bytes and schemas are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:21:13 +02:00
Meta Vens
cc66193961 mind-body: drop a stale line from the control test header
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:55:51 +02:00
Meta Vens
a50b25c08e mind-body: mind-control takes --root <dir>; the window probe runs in a tempdir
Soul s3: the window probe wrote a window-probe-<pid> instance under the real
/etc/gamecult/minds. A leading --root argv flag (argv, because sudo -E carries
the environment) replaces the default root; the probe points the real binary at
a tempdir, whose drop removes whatever a failed assert leaves. No test names
/etc/gamecult any more; the path-derivation test uses CONTROL_ROOT.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:53:27 +02:00
Meta Vens
eb8aefc0fb mind-body: directories the writer creates are 0755 ancestors included; the probe reports its sweeps
Under the binary's umask 077 a first write would have left /etc/gamecult/minds
0700 and unreadable by the units. The attacker reports how much it swept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:43:59 +02:00
Meta Vens
1c2964b6ad mind-body: the window probe also opens the staged file, the wider window
Under umask 000 with the binary's umask removed the first probe never hit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:43:00 +02:00
Meta Vens
8e6b72c21b mind-body: the world-writable store fixture carries a lock, as opening the writer on a store would create one
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:40:18 +02:00
Meta Vens
5cccab6899 mind-body: the binary restricts its umask; the writer refuses unsafe installs
Soul s2: under a permissive umask the store was group/world-writable between
CultCache's rename and the chmod, and an fd opened there survived it. The
mind-control binary now sets umask 077 first (the library never touches the
umask). The writer refuses to write through an existing directory, lock or store
that is not root's or is group/world-writable, with the typed UnsafeStore error
naming path, mode and owner. Tests: a non-root open-for-write probe against the
real binary under umask 000; refusals for 0777/0775 directories, 0666/0664
locks and stores, and a non-root-owned directory; accepted root installs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:39:19 +02:00
Meta Vens
2377fa6d40 mind-body: the mode test writes once, so a skipped lock mode is not repaired by the second write
cargo-mutants on the diff missed deleting the negation before the lock check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:28:39 +02:00
Meta Vens
d125b95c8d mind-body: the wrong-dial fixture registers the brake it reads beside
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:25:26 +02:00
Meta Vens
550037e0b3 mind-body: pin the creation modes, the non-root refusal and the dial decode branch
Modes under umask 000/022/077 via a re-executed test child; a non-root user
(setpriv uid 65534, skipped with a message when not root) cannot write the store
but can read it; an undecodable or NaN dial reads Held(Undecodable) whatever the
brake says, which kills the fail-open default-dial mutant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:24:58 +02:00
Meta Vens
4b3e850fef mind-body: the operator's brake and burn-rate dial, the reader and the mind-control CLI
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:58:29 +02:00