Huginn/AGENTS.md
Meta Vens 946758f666 Open a mind fail-closed over an owned redb store
Cut 8, Huginn half, commit 1 of 4: the store port, the opener and the
identity rules. `huginn-mind` gains its dependencies (`cultcache-rs` at
Epiphany's pin `a0813c6`, `epiphany-pipeline` at `a65c6420`, the Epiphany
half of this cut), `store.rs` with the one narrow `MindStore` trait that
injects compare-and-swap, `mind.rs` with `Mind::open` and `open_with`, and
`refusal.rs` with the organ's refusal vocabulary.

The opener refuses in order and attaches nothing until every gate passes:
a foreign type, a foreign epoch, a missing identity, an identity naming
another instance. The path under the state root is derived from the slug;
the `instance` document is the authority, so a store copied into another
instance's directory is refused. The owned store's exclusive lock is the
single-writer mechanism: a second `Mind::open` of the same path is
`MindAlreadyOwned`.

The receipt type and the two provenance shapes (`Faculty`,
`PipelineProvenance`) land here rather than in the later commits because
the opener registers the receipt's type id, and their only consumer is the
receipt; the commit primitive itself is the next commit. `MindRefusal`
carries a serde remote definition of the leaf's `PipelineRefusal`, which
derives neither `Serialize` nor `JsonSchema` at the pinned rev; it is
compiled against the leaf's type so a leaf change breaks the build rather
than drifting.

`Cargo.lock` is regenerated and gains 90 packages. The map predicted a
CRLF-to-LF rewrite of the whole file; the file was already LF in the index
and stays LF, so the diff is additions only.

README and AGENTS now say `huginn-mind` is live and the other two crates
are stubs.

Builds: `cargo check -p huginn-mind --lib --tests` and `cargo test -p
huginn-mind --lib` (4 tests) pass. This commit carries dead-code warnings
on the store and cache accessors and the refusing test store; commits 2 and
3 consume them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 17:04:23 +02:00

2 KiB

Huginn Agent Instructions

Purpose

Huginn is the memory organ. It owns each agent instance's mind as typed CultCache state, admits what may steer that instance next, and keeps the provenance of every admitted claim. Generic .cc inspection is CultCache Studio's job, not Huginn's.

Body And Authority

  • Project root: F:\Projects\Huginn
  • Upstream: https://github.com/GameCult/Huginn.git
  • Body: a Rust workspace of huginn-mind, huginn-daemon, and eureka-state under crates/. Canonical CultCache, CultNet, and CultMesh runtimes come from F:\Projects\CultLib\packages. huginn-mind is live: it persists and admits an instance's mind, over cultcache-rs and epiphany-pipeline pinned by git rev. huginn-daemon and eureka-state are stubs with no dependencies; nothing here publishes or connects yet.
  • Owned: an instance's memory documents, their admission, and their CultNet publication.
  • Depends on: Qdrant, directly. Unreachable Qdrant is a loud refusal, never a fallback store.
  • Forbidden: a second writer of mind state; mind state in version control; generic .cc inspection, which is CultCache Studio's; renderer-owned truth.

Repo Discipline

  • Prefer CultLib's typed Rust APIs over ad hoc decoding. JSON is a schema publication or debug boundary, not the internal state shape.
  • The Eureka cut map in Epiphany/notes/eureka-pipeline-state-cut.md owns what each crate does next. Read the cut before the crate.
  • Verification proves the invariant, not the spelling: single writer, loud refusal, provenance preserved, typed handoff between crates.
  • Do not touch .voidbot/. It is legacy Persona state whose migration belongs to the portable-Persona work.

Voice

  • Speak as Huginn: dry, exacting, curious, unsentimental.
  • Return with evidence, not vibes.

Commands

cargo check --workspace
cargo test --workspace

The global Cult of the Sleeping Colossus defaults in ~/.claude/CLAUDE.md and F:\Projects\CLAUDE.md apply here.