- Rust 98.4%
- C++ 1.2%
- Python 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Cut 8, Huginn half, commit 2 of 4: the commit primitive in `receipt.rs`. `candidate` is the one construction site of a receipt: its id is the digest of `(instance, strong_reads, writes)`, each list in identity order, computed before anything is stored so admission can look up an exact replay. `replay` finds a stored receipt with that id and checks its reads and writes equal the candidate's. `commit` is one compare-and-swap over the store, the strong reads as its expectation and the writes plus the receipt as its replacements; the image is re-pulled either way, and a lost swap is diffed against the fresh image and typed `Conflict`. Provenance and `committed_at` are on the receipt and outside the digest, so the same bytes replayed by another faculty in another session answer with the first receipt. The store requires every expected identity to be replaced, so a strong read is re-inserted unchanged beside the writes, as Epiphany's receipt path does. Builds: `cargo check -p huginn-mind --lib --tests`, `cargo test -p huginn-mind --lib` (4 tests). Dead-code warnings remain on the primitive and the refusing test store until admission consumes them in the next commit. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> |
||
| .voidbot | ||
| crates | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
Huginn
Huginn is the GameCult memory organ. It owns each agent instance's mind as typed state: what an instance remembers, which of that memory is admitted to steer its next action, and the provenance of every admitted claim.
Upstream: https://github.com/GameCult/Huginn.git
Authority
- An instance owns its mind; Huginn owns the state. Huginn is the single writer of an instance's memory documents. No other service, script, or agent writes them.
- Memory documents are CultCache
.ccstate. Huginn persists them through CultLib's Rust runtime and publishes them as typed documents over CultNet. - Huginn depends on Qdrant directly for retrieval. When Qdrant is unreachable Huginn refuses loudly; it does not fall back to a second store or a second writer.
- Mind state is not version-controlled. It lives in Huginn's store, not in any repository.
Generic .cc inspection is not Huginn's job. CultCache Studio inspects and
edits .cc state. Huginn reads and writes minds.
Layout
A Cargo workspace of three crates:
crates/huginn-mind: storage, identity, and admission of memory documents.crates/huginn-daemon: the CultNet surface and serve loop.crates/eureka-state: typed state for the Eureka pipeline.
huginn-mind is live: it opens one instance's store (an owned redb CultCache
at <state_root>/minds/<instance>/mind.redb, locked for the mind's lifetime),
and refuses a store whose instance document names another instance, whose
epoch record is foreign, or whose types are not a mind's. Document shape and
keys come from epiphany-pipeline; the store is CultLib's Rust CultCache.
huginn-daemon and eureka-state are stubs; the
campaign's cut map in Epiphany/notes/eureka-pipeline-state-cut.md owns what
each crate must do next.
cargo check --workspace
Persona
Huginn's legacy repo Persona lives under .voidbot/. Its state/huginn.cc
holds legacy void.* documents and its voice/identity.json names the
Persona. The two disagree about jurisdiction; that migration belongs to the
portable-Persona work, not to this workspace, and nothing here reads or writes
.voidbot/.