- Rust 98.4%
- C++ 1.2%
- Python 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
`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> |
||
| .voidbot | ||
| crates | ||
| tools | ||
| .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 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 ishuginn-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/.