Huginn/AGENTS.md
Meta Vens 1cfa81d571 Close the epoch record, the minted leaf refusal and the nested resolution
Soul's Cut 8 pass found three rules the code only half held and one
document that promised more than the crate does.

The opener's step 3 said "exactly one epoch record at the current epoch"
and checked neither the count nor the key: a record keyed anything at all
was read as the epoch record, and a second one was never looked at, so a
current record beside a foreign one passed or refused on nothing but the
order the store returned them in. Step 3 now counts before it reads,
refuses a record under any key but the epoch, and names the defect in
`found`: the stored epoch, the offending key, or the count.

The campaign row minted `PipelineRefusal::FieldBound` for an empty
`repos`. The organ does not get to invent the leaf's refusals; an empty
`repos` is admission's own rule and is now `MindRefusal::EmptyRepos`.

The matrix admitted `Withdrawn` on a resolution, which made a subject
resolvable twice over: withdraw the resolution and the subject is open
again. A subject resolves at most once, and a resolution is not itself a
subject, so `resolution` joins `campaign`, `cut_report`, `verdict`,
`instance` and `hand_off` as not resolvable. The key grammar still spells
a resolution of a resolution; admission refuses it here. Self's default
ruling on Q17, standing until the operator rules.

`README.md` and `AGENTS.md` claimed CultNet publication and a Qdrant
connection in the present tense and called the store `.cc`. The daemon is
a stub, nothing connects to Qdrant, and the live crate writes
`mind.redb`. They say so now.

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

2.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 and their admission, in huginn-mind, over a redb CultCache store at <state_root>/minds/<instance>/mind.redb. Their CultNet publication is owned here and not built; huginn-daemon is a stub.
  • To depend on: Qdrant, directly, once retrieval exists. Unreachable Qdrant is to be a loud refusal, never a fallback store. No crate connects to it yet.
  • 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.