No description
  • Rust 98.4%
  • C++ 1.2%
  • Python 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 8fc39b127e Give the read side a mutant per rule
`tools/eureka-cut9-mutations.psd1`, V1-V23: every rule the views decide,
with the edit that removes it and the test that must fail while it is
applied. A rule with two weakenings gets two entries, `Vn` for the rule
absent and `VnL` for the rule weakened rather than removed, so a suite
that only catches the crude form does not pass for the subtle one. 34
entries; M0 green and every one killed.

V1 is the proof that in force has one owner: its mutant lands in
`docs.rs`, and V1L is H41's own edit run against the views instead of
the rules. One mutant, two suites.

Four tests grew to put a mutant in reach of a real failure, which is the
point of writing the entries before trusting the suite:

- Two receipts naming one write, forged and planted, so the integrity
  check that refuses them is not dead text.
- A cut spec whose withdrawal is itself withdrawn, so `base` has two
  steps to walk and stopping at one is visible.
- A `cut-1` spec beside `cut-9` and `cut-10`, so the prefix that ends at
  the dot is not the same answer as the prefix that does not.
- A second report of one cut, judged by nothing, so "this cut has a
  verdict" and "this report has one" come apart.

Three weakenings the map names have no entry and say why in the file's
header: the `semantic` check moved below the filters still refuses;
`resolutions_of` ignoring a subject's kind cannot matter while an id
carries its own kind segment; `assignments_of` ignoring the instance
cannot matter while A5 refuses a stewardship naming another. A mutation
that cannot fail is not a proof, and listing it would only make the
suite look thorough.

Nine cut-8 entries moved with their code in the first commit; that suite
is green as well, H1-H67, M0 included.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-16 21:30:34 +02:00
.voidbot Document Huginn repo swarm wiring 2026-06-21 15:51:46 +01:00
crates Give the read side a mutant per rule 2026-09-16 21:30:34 +02:00
tools Give the read side a mutant per rule 2026-09-16 21:30:34 +02:00
.gitignore Add the empty Rust workspace 2026-09-16 15:11:05 +02:00
AGENTS.md Read a mind: views, queries, open items and history 2026-09-16 21:22:41 +02:00
Cargo.lock Take the sequenced keys and make in force mean what it says 2026-09-16 19:28:17 +02:00
Cargo.toml Add the empty Rust workspace 2026-09-16 15:11:05 +02:00
README.md Read a mind: views, queries, open items and history 2026-09-16 21:22:41 +02:00

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 state. huginn-mind, the one live crate, persists them through CultLib's Rust CultCache into a redb store at <state_root>/minds/<instance>/mind.redb. Publishing them over CultNet is huginn-daemon's, and that crate is a stub: nothing here publishes yet.
  • Retrieval is to depend on Qdrant directly, refusing loudly when Qdrant is unreachable rather than falling back to a second store or a second writer. No crate opens that connection yet.
  • 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, admission, and queries and derived status over memory documents.
  • crates/huginn-daemon: a stub. It will carry the CultNet surface and serve loop; today it holds neither.
  • crates/eureka-state: a stub. It will carry typed state for the Eureka pipeline; today it holds none.

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. It admits batches of pipeline documents through one commit path: the leaf's bounds, formats and keys, then the organ's cross-document rules (references, in-force status, the resolution matrix, derived resolutions and stewardships), then one compare-and-swap that lands the batch whole with a receipt naming the exact bytes it read and wrote. An exact replay answers with the stored receipt. It reads them back the same way: a document with the facts of its admission joined from that receipt and its status derived at read time, typed queries over one mind, a campaign's open work, and a subject's or a repo's history. Status is never stored, and the views derive it through the same rules admission does. 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/.