Commit graph

660 commits

Author SHA1 Message Date
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
0f02914b57 Runs: pin that a changed run under an admitted key is not a replay
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:30:37 +02:00
Meta Vens
f1a4449300 Runs: reinstating a run goes through claim exclusivity; a run claims an item once
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>
2026-10-09 16:30:14 +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
0a3b9c3ba5 mind-body: the writer creates the control store 0755 and 0644 whatever the umask
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>
2026-10-09 16:24:58 +02:00
Meta Vens
bb9e64dca1 Mind: run admission with AlreadyClaimed, the run resolution row, the claims edge
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>
2026-10-09 16:07:19 +02:00
Meta Vens
9a9165d4f1 mind-body: pin the --instance guard and the binary's refusal exit
Two cargo-mutants survivors from the first run (main -> (), and the
--instance match guard -> true) are killed by a malformed-command table row
and a process-level test of the refused invocation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:05:51 +02:00
Meta Vens
76367e888a mind-body: need() as a fn so the borrowed value outlives the closure
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:01:14 +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
Meta Vens
6c705f5f2a Leaf: a run kind, PipelineRun with RunOperator and RunTurn, instance-rooted
A run is the one record of what a Self or a Persona turn took on: key
<instance>:run:<label>, claims of CutSpec, Finding or FollowUp only (refused at
validate), a canonical-decimal budget, turn PersonaTurn or SelfRun per ruling
every-wake-a-run. The run sample is appended at the end of samples(); the golden
gains one line after sample.hand_off and no existing line changes. The
schema and its catalogue entry are derived from the type. No existing kind or
field is touched; the epoch stays v2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:57:59 +02:00
Meta Vens
f0df28ece1 Aliases: severity, confidence, origin and claim-outcome lists derive from the enums' NAMES
The four hand-spelled lists in rows.rs could drift from the leaf enums they
restate; each alias now reads its domain from the enum, as the authority
alias already does. No behaviour change.

Follow-up: eureka-substrate:follow_up:alias-lists-from-names

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:55:31 +02:00
Meta Vens
1686cc5491 Merge eureka-substrate/mind-authority: RulingAuthority gains Mind; the query alias list derives from the enum
Soul s1 holds (eureka-substrate:verdict:cut-mind-authority.s1). Additive on the wire; the live upgrade must be daemon-first (follow-up mind-variant-daemon-first).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:52:55 +02:00
Meta Vens
2d43e04347 Maps: body and substrate maps after leaf-into-huginn, the Epiphany teardown and the wake/launch re-cut
Run, breaker, units and wake-frame rows follow every-wake-a-run and mind-launch r1;
the leaf rows state the as-landed crate, golden pin and AGPL license; the additive
rule names the `= absent` marker; F15-F17 added; Undone updated; stale future-tense
and Epiphany-owner lines made present tense.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:52:31 +02:00
Meta Vens
4a41ec947c Golden: one new line for a Mind ruling; every existing line unchanged
Derived with the ignored golden_dump, appended at the end of the corpus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:36:30 +02:00
Meta Vens
775148f28b RulingAuthority gains Mind: a ruling the Mind's Self makes is its own word
Additive unit-enum variant; schemas regenerated by derivation. The query
alias domain now derives from the enum (unit_enums! exposes NAMES), so the
second authority list in huginn-mind rows.rs is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:35:22 +02:00
Meta Vens
afc35f92d1 Merge eureka-body/leaf-into-huginn: the pipeline leaf and its schema catalogue live in Huginn; the git edge to Epiphany is gone
Soul s1-s3 hold (eureka-body:verdict:cut-leaf-into-huginn.s3); wire parity defended by committed golden bytes and the live-store read-back. Relicensed AGPL-3.0 (ruling leaf-relicensed-agpl).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:32:51 +02:00
Meta Vens
e516c58b17 Golden: restore the sample.campaign payload line dropped by the header edit
Payload lines are now byte-identical to 09e1b97; only header comments differ.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:28:28 +02:00
Meta Vens
4d3db41423 LICENSE: byte-identical official AGPL-3.0 text; golden header states exact provenance
LICENSE is the gnu.org agpl-3.0.txt verbatim (LF). The golden header now
names 44be4cd as the dump commit, the four kinds (cut_spec, cut_report,
finding, follow_up) whose source-path string was renamed relative to
Epiphany ef956865, and that 87b6455 differs only in test code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:28:14 +02:00
Meta Vens
09e1b9792b Relicense the workspace AGPL-3.0-only, own the CultLib rev once, index every schema
Add the AGPL-3.0 text as LICENSE and set the workspace license to
AGPL-3.0-only (rulings license-split, leaf-relicensed-agpl); the leaf's
provenance (Epiphany ef956865, PolyForm Noncommercial, relicensed by its sole
copyright holder 2026-10-09) is recorded in its Cargo.toml and README.

One [workspace.dependencies] entry per CultLib crate now owns the revision;
the crates inherit it. index.json lists Huginn's two wire schemas too, and the
catalogue test drops its huginn. prefix exclusion: every schema file is listed.
README and AGENTS stop naming Epiphany notes as the owner of the cut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:15:10 +02:00
Meta Vens
c0e383003b Restore LF line endings in the leaf (the earlier edit rewrote the file as CRLF)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:10:38 +02:00
Meta Vens
23a132d194 Read-back test also asserts stored bytes re-encode identically; document the opt-in command
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:57:42 +02:00
Meta Vens
6d62c26920 Commit the golden encoded envelopes the wire parity test asserts
Derived at 87b6455; provenance in the file header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:56:52 +02:00
Meta Vens
44be4cd564 WIP: golden corpus and dump for the wire parity test (golden still empty)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:56:04 +02:00
Meta Vens
87b6455612 Test that a PipelineRefusal read as text names its variant and parts
Kills the one cargo-mutants survivor on eureka-pipeline (Display::fmt replaced
by Ok(Default::default())).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:20:50 +02:00
Meta Vens
8bceac082b Map: substrate specs re-pointed onto Huginn (2026-10-09); run cadence reads admission time
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:18:18 +02:00
Meta Vens
b8bba0950a Add the mind's design record from Epiphany notes (docs/history)
Seven notes copied verbatim from GameCult/Epiphany ef956865 notes/, each with
a one-line provenance comment on top: huginn-organ-cut and the eureka-* and
postmortem notes. Prose only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:09:33 +02:00
Meta Vens
c46b0ec183 Rename the pipeline leaf to eureka-pipeline and take it as a path dependency
Package and lib become eureka-pipeline / eureka_pipeline; the crate joins the
workspace; huginn-mind's git dependency on GameCult/Epiphany is replaced by
the path, and Cargo.lock is regenerated (the Epiphany source entry is gone).
Every epiphany_pipeline mention in huginn-mind, huginn-daemon and eureka-state
is renamed. The schema-publication test reads ../../schemas/cultnet. The
leaf's license-file key (../LICENSE, which Huginn has no file for) is dropped.
Type ids, the epoch and every schema_id string are untouched. Schemas README
and the pipeline section of schemas/cultnet/README.md are rewritten for the
new home; README and AGENTS no longer say the leaf is pinned by git. New test:
the catalogue lists exactly the schema files beside it.

Not yet built or tested; verification follows on Yggdrasil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:09:16 +02:00
Meta Vens
73908920ca Copy the pipeline leaf and its schema catalogue from Epiphany ef956865
Byte-identical blobs of epiphany-pipeline/{Cargo.toml,src/lib.rs},
schemas/README.md and schemas/cultnet/* at Epiphany ef9568655e75, so Soul can
diff the copy against the source. Left out as the spec orders:
epiphany.work_organ_state.v0.schema.json and its index.json entry (no reader
outside Epiphany). Epiphany's schemas/cultnet/README.md is not copied over
Huginn's own README there; the next commit folds its pipeline section in.
The crate is not yet a workspace member and keeps its Epiphany names, so this
commit does not build as a package; nothing else changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:07:58 +02:00
Meta Vens
78de910407 Docs: the eureka-body map (2026-10-08)
Body facts, model page and rationale for the eureka-body campaign. The cut
specs and questions are the typed record in the mind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:18:41 +02:00
Meta Vens
6b496eba8c Research: prior art on autonomous agent harnesses (waking, brakes, persona turns, connectors, failures)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 19:56:44 +02:00
Meta Vens
570f369f40 Eureka self cut map r4 (Imagination): Epiphany archived; the harvest, the connector split, nine questions re-checked
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-01 23:03:08 +02:00
Meta Vens
e16663f5cb Eureka self cut map r3 (Imagination): Epiphany is her body; one connector; GCLP attachments
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 22:31:13 +02:00
Meta Vens
f5e785f3ee Eureka self cut map r2 (Imagination): her Persona is the waking organ, VoidBot's body probed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:50:50 +02:00
Meta Vens
bf73c42fa6 Eureka self cut map (Imagination, 2026-10-01): the Mind's own Self
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 21:00:50 +02:00
Meta Vens
a699630bbc eureka-substrate postmortem: seven cuts, the mind upgraded live, what Soul found
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:38:13 +02:00
Meta Vens
107552dc4b Merge eureka-substrate huginn-admission-rules: sha by commit, Deferred to a cut, Life, depends_on by checked label
Eureka eureka-substrate cut huginn-admission-rules. Soul verdicts s1 and
s2. Report heads match commits short or full; a finding may defer to a
cut spec; MindSteward is Life (old receipts still decode); the campaign
stewardship check is gone (ruling stewardship-rule); depends_on entries
must name another cut in the campaign (rulings depends-on, self-dep).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:52:52 +02:00
Meta Vens
818499a5db huginn-mind: a cut spec naming its own cut is refused UnknownDependency (ruling self-dep); depends_on near-miss labels pinned
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 13:41:23 +02:00
Meta Vens
0bd9eb6b53 huginn-mind: the summary bound fixture's width floor follows depends_on being cut labels
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 13:13:17 +02:00
Meta Vens
eedb7529ea huginn-mind: dependency cuts in the summary bound test keep their spec keys within the label bound
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 13:03:20 +02:00
Meta Vens
56baa46b11 huginn-mind: published wire schemas follow the renames; the summary bound test uses real cuts
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:57:55 +02:00
Meta Vens
cfa8d570ff huginn-mind: a cut spec's depends_on must name cuts of its campaign
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:54:20 +02:00
Meta Vens
08d48957f8 huginn-mind: campaign admission no longer checks repo stewardship
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:50:57 +02:00
Meta Vens
db8430c6fe huginn-mind: report heads match by commit, findings defer to cut specs, MindSteward is Life
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:50:38 +02:00
Meta Vens
b85cd5d7d5 Merge eureka-substrate huginn-pin-and-refusals: unkeyable documents are refused as documents
Eureka eureka-substrate cut huginn-pin-and-refusals. Soul verdicts s1
(two findings, fixed by 0f491b00) and s2 (holds, no findings). Pins
epiphany-pipeline to the per-kind key bound; a pipeline_key error is
MindRefusal::Document, not Unavailable; the snapshot read-back test
re-keys all 244 stored documents and resolves every stuck subject.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:48:49 +02:00
Meta Vens
0f491b00ef huginn-mind: iterate the envelope slice in the read-back census
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:12:36 +02:00
Meta Vens
f29a7ce7f0 huginn-mind: tighten the refusal and read-back tests (Soul s1 findings)
snapshot_admits_and_reads_back now counts pipeline envelopes apart from the
loop, asserts validate() and pipeline_key == stored key for every one, admits
a resolution for every stuck finding and a withdrawal for every unwithdrawable
resolution, and fails with the id named on any refusal.

The refusal tests assert the exact leaf refusal (field and value from
pipeline_key) at Mind::admit and at the helper, and eureka-state gains a
tool-level test that the typed refusal reaches the result intact.

Tests only; no production code changes.

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