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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Authority table for her templated units, users, the brake check verb and
Idunn's view of one-shot units, from the Imagination pass that admitted
cut-mind-unit-gate and cut-mind-units-install.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model page per class of prose knowledge, the one earned kind (observation),
voidbot's index as the one retrieval path for prose, sequencing, and the
triage of the census's 49 unmapped items (eureka-body:follow_up:
prose-knowledge-inventory, ruling prose-knowledge-into-mind).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
put_persona replaces the mind's gamecult.persona_state.v0 whole through the
commit primitive: schema-valid against the published file, personaId is the
instance, canonical provenance, CAS on updatedAt, monotone updatedAt. The
document is an opaque seventeenth stored type, one per mind. Wire operations
persona_get and persona_put, MindStatus.persona, HuginnClient methods and the
eureka-state persona tools. Published wire schemas follow in the next commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Step-0b table, authority map and rejected options for how a campaign gains
or loses repos, from the Imagination pass that admitted cut-campaign-repos
and cut-skill-campaign-repos.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Identity, lifecycle and authority of the huginn CLI, with probes and
rationale, from the Imagination pass that admitted cut-huginn-cli and its
four dependent cuts (eureka-substrate).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eyes pass 2026-10-10: 15 repo Face state files, intake projections,
Gjallar in Odin, the Epiphany body tarball as the only roster copy, the
swarm's last runtime shape, and what is lost.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination imagination-swarm, session self-2026-10-09-eureka: identity,
lifecycle and authority table for N minds, one daemon per mind, one-shot
swarm waker on the FFX-style timeline, first slice (Weksa) and order of
work. Seven questions admitted in eureka-body. Draft for operator review.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul held (eureka-substrate:verdict:cut-leaf-read-anchors.s1): every
pre-existing golden line byte-identical, 24/24 mutants and 23 hand
mutants on the macro's serde attributes killed. Findings deferred to
leaf-refusal-hygiene and huginn-upgrade-daemon-first. Not deployed:
the live daemon must be upgraded first (ops-read-anchors-upgrade).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination imagination-launch-r3, session self-2026-10-09-eureka, from
Soul verdict eureka-body:verdict:cut-mind-launch.s1: fact F21, the run,
Repetition breaker, Brake and Units rows, two rationale sections.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cargo clippy -D warnings failed at df7507b on PipelineDocument (masking these downstream); the two enums
are returned once per commit or request, and admission.rs resolution matrix returned a let binding. Builds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cargo clippy --locked --workspace --all-targets -- -D warnings 2>&1 | tail -30
echo "CLIPPY-RC ${PIPESTATUS[0]}"
cargo test --locked --workspace 2>&1 | grep -E "^test result" | awk '{p+=$4; f+=$6} END {print "TOTAL passed", p, "failed", f}'
EOS
S=$(pwd); (SUMMARY=$S/v4.log nohup bash C:/Users/Meta/.claude/skills/eureka/tools/stopgap/ygg-verify.sh /f/Projects/Huginn-leaf-anchors HEAD rust "$(tr -d '\r' < v4.sh)" > v4.launch 2>&1 &); sleep 1; echo ok
Allow clippy::large_enum_variant on PipelineDocument
CutSpec.reads grows the largest variant past clippy's 200-byte gap to the next; boxing a variant would change every construction site, and a document is a transient wrapper around one value. Builds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two golden lines appended (dumped by golden_dump on Yggdrasil at 44c010c; numstat 3 added, 0 deleted
against the base) and the six schemas regenerated from the types. Builds; with 44c010c the
workspace tests are expected to pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Imagination imagination-brake-stop, session self-2026-10-09-eureka: body
facts F18-F20, model rows for run, Brake and Units, and the rationale for
a synchronous stop owned by `mind-control brake hold`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds Absent, Symbol, ReadAnchor and read_window_is_bounded, the marker in
value_types!, the workspace fixtures and the reads admission test. The
golden file and the six published schemas are not regenerated yet, so the
golden, schema and wire-schema tests fail at this commit (it builds).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul s1-s3 hold (eureka-substrate:verdict:cut-run-kind.s3). Additive on the wire; the live upgrade must be daemon-first (follow-up huginn-upgrade-daemon-first).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Soul s1-s4 hold (eureka-body:verdict:cut-mind-control-store.s4). Nothing installed on Yggdrasil yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
run_claims_rule is the one check for a run's claims (in force, held by no
other live run), called by opening and by the withdrawal that reinstates.
Tests: contested second claim on reinstatement, resolved claim refused and
live claims allowed, a repeated non-first claim refused at validate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
Withdrawing a run's closure now asks docs.claim_holder, the same owner the
opening rule uses, and refuses AlreadyClaimed when another live run holds a
claim. Duplicate claims within a run are refused at validate. Tests pin the
reinstatement sequence, second-claim holders, and same-key different-content
IdentityCollision.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Soul s1: created under umask 000 the directory was 777 and the files 666, so a
non-root user could write the store. The writer now sets the directory (when it
creates it), the lock file and the store file explicitly, after the setter's own
refusals so a refused write still creates nothing. CultCache stages with the
process umask and offers no mode, so the store file is set after the rename.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A run's instance must be this mind. Every claim must name a document in force
(MissingReference, CitesResolvedDocument); a claim held by another run in force
is refused AlreadyClaimed { item, run }, so the claim is the one consumption
fact. A byte-identical replay of an admitted run owes its claims no fresh
freedom and answers AlreadyAdmitted. A run resolves Recorded or Withdrawn only.
Runs cite their claims under role `claims`, so cites and cited selections reach
them; the header facts carry label, operator, turn, start and claims.
The published schemas that embed PipelineKind (finding, follow_up, question,
resolution, ruling) and the two mind wire schemas are re-derived: the Run
variant, PipelineFacts::Run, AlreadyClaimed and the claims role. The leaf commit
before this one has those five stale.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>