Rewrite the Eureka target onto instance-owned minds in a memory organ
Operator rulings (2026-09-16), superseding the repo-owned store: - an instance owns its mind, and stewardship over repos is an assignment; - a service on Yggdrasil owns the state, so minds leave version control and the per-clone lease, git preconditions and divergence go with them; - the organ depends on Qdrant directly, not on voidbot, and embeds through Ollama on Nightwing; - Huginn becomes that organ, and generic .cc inspection belongs to CultCache Studio. The organ speaks CultNet with eureka-state as a thin stdio MCP client; an unreachable organ refuses loudly rather than spooling. Cut 3a's documents, keys, validation and refusals survive; its store, lease and git layers do not. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
79b87eee66
commit
5fb4eb222c
2 changed files with 123 additions and 127 deletions
|
|
@ -1,26 +1,46 @@
|
||||||
# Eureka pipeline state: target
|
# Eureka pipeline state: target
|
||||||
|
|
||||||
Status: target (the ends). The means will live in
|
Status: target (the ends). The means live in `notes/eureka-pipeline-state-cut.md`,
|
||||||
`notes/eureka-pipeline-state-cut.md`, written by Imagination. Operator rulings are
|
written by Imagination. Operator rulings are dated 2026-09-15 and 2026-09-16.
|
||||||
dated 2026-09-15.
|
|
||||||
|
**This target was rewritten on 2026-09-16** after the operator rejected the
|
||||||
|
ownership model it had been built on. Rulings 5, 6, 10 and 13's store clauses,
|
||||||
|
which put the store in the task's repo under a per-clone lease, are superseded
|
||||||
|
by rulings 14-17 below. The cut map's Cut 3 sections describe the old model and
|
||||||
|
are history, not live design.
|
||||||
|
|
||||||
## Why
|
## Why
|
||||||
|
|
||||||
Eureka is the Claude Code counterpart of this organism. It is a skill at
|
Eureka is the Claude Code counterpart of this organism. It is a skill,
|
||||||
`~/.claude/skills/eureka` that runs the same faculties (Self, Imagination,
|
published as `GameCult/Eureka` and installed at `~/.claude/skills/eureka`, that
|
||||||
Hands, Soul, Mind Steward) over foundation changes. In its first campaign, the
|
runs the same faculties (Self, Imagination, Hands, Soul, Mind Steward) over
|
||||||
Aetheria CultCache migration, the pipeline worked, but its findings lived in
|
foundation changes. In its first campaign, the Aetheria CultCache migration, the
|
||||||
prose: the cut map, subagent reports and memory files. Self re-read and
|
pipeline worked, but its findings lived in prose: the cut map, subagent reports
|
||||||
re-summarised that prose at every step. Stale claims survived until a steward
|
and memory files. Self re-read and re-summarised that prose at every step. Stale
|
||||||
caught them. The postmortem needed a transcript crawl, and one operator quote
|
claims survived until a steward caught them. The postmortem needed a transcript
|
||||||
survived only in a compaction summary.
|
crawl, and one operator quote survived only in a compaction summary.
|
||||||
|
|
||||||
Epiphany already has the other half: typed documents, admission and receipts.
|
Epiphany already has the other half: typed documents, admission and receipts.
|
||||||
Her own `notes/faculty-workflow-lessons-2026-09-04.md:146-176` proposes typed
|
Her own `notes/faculty-workflow-lessons-2026-09-04.md:146-176` proposes typed
|
||||||
forms of Eureka's habits (`Map`, `Spec`, `CutReport`, `Verdict`, rulings, a
|
forms of Eureka's habits (`Map`, `Spec`, `CutReport`, `Verdict`, rulings, a
|
||||||
landed-names digest), but none of them are built.
|
landed-names digest), but none of them are built.
|
||||||
|
|
||||||
This campaign builds them once, here, and gives Eureka agents access to them.
|
This campaign builds them once and gives Eureka agents access to them.
|
||||||
|
|
||||||
|
## What the first model got wrong
|
||||||
|
|
||||||
|
The store was owned by a repo. Nothing owned the state, so the machinery grew to
|
||||||
|
compensate: a per-clone writer lease, git-directory resolution, committed
|
||||||
|
`.gitattributes` checks, and a merge tool for divergent copies. Three Soul passes
|
||||||
|
went into propping that up, and it still resolved a store into a directory the
|
||||||
|
operator never named.
|
||||||
|
|
||||||
|
Mind state also does not want version control. Git offers branches, merges and
|
||||||
|
history rewriting; a mind wants one owner and an append-only record.
|
||||||
|
|
||||||
|
The operator's correction: **someone owns the state**. An instance owns its mind,
|
||||||
|
and stewardship over repos is an assignment, not an identity. That is Epiphany's
|
||||||
|
own design, and Eureka inherits it.
|
||||||
|
|
||||||
## Operator rulings
|
## Operator rulings
|
||||||
|
|
||||||
|
|
@ -29,134 +49,108 @@ This campaign builds them once, here, and gives Eureka agents access to them.
|
||||||
it ("what rulings govern stores?", "what is still open?"). Soul and
|
it ("what rulings govern stores?", "what is still open?"). Soul and
|
||||||
Imagination check precedent in it ("have nil map keys bitten us?"). Operator
|
Imagination check precedent in it ("have nil map keys bitten us?"). Operator
|
||||||
browsing across projects comes later.
|
browsing across projects comes later.
|
||||||
3. **Query split.** Epiphany owns the typed store and exact, filtered queries.
|
3. **Two campaigns.** This one covers the schemas, the memory organ, admission,
|
||||||
voidbot owns semantic search, by indexing a projection of these documents as
|
the Eureka MCP client and a proof on one real Eureka task. The second,
|
||||||
one more Qdrant collection. The typed store is the truth and the index is
|
Epiphany adopting Eureka's habits, comes after the schema stops moving.
|
||||||
only a derived copy.
|
4. **Re-pin first.** Landed: Epiphany moved from CultLib `e171eca3` to
|
||||||
4. **Two campaigns.** This one covers the schemas, the store, admission, the
|
`a0813c6`.
|
||||||
Eureka MCP server, and a proof on one real Eureka task. The second, Epiphany
|
5. **Q1-Q5 (2026-09-15), of which only Q2 and Q5 survive the rewrite:** additive
|
||||||
adopting Eureka's habits, comes after the schema stops moving. It covers
|
schema changes keep the epoch and a breaking bump refuses the old store
|
||||||
ahead-of-time cut specs, adversarial Soul with mutations, rulings consumed
|
(Q2); `schemars` is an unconditional `epiphany-core` dependency and the
|
||||||
by Self, and steward triggers.
|
published JSON schemas are derived from the Rust types (Q5).
|
||||||
5. **MCP hosting.** A Rust stdio MCP server, built as an Epiphany package and
|
6. **The operator channel is the Claude Code session.** Eureka has no Persona.
|
||||||
launched by Claude Code per session, so no daemon is added. It writes
|
Self is the operator surface, because spec iteration works best where the
|
||||||
through a newly public Epiphany admission path under organ provenance
|
question and the tree share a context. A blocking question may be pushed
|
||||||
(`eureka`), so Epiphany's rules decide what is admitted.
|
through whatever notification MCP the user configures; Eureka owns no
|
||||||
6. **The store lives in the task's repo.** This replaces an earlier ruling from
|
transport and names no provider. Answers come back in the session. Answering
|
||||||
the same day that put a single user-level store outside every repo. The
|
over a chat channel is a later campaign and needs identity binding first.
|
||||||
operator said: "have the pipeline store sit in the repo where the task takes
|
7. **Eureka is published** as `GameCult/Eureka`, MIT.
|
||||||
place. Each Epiphany learns for itself, with affordances for sharing
|
|
||||||
knowledge, same when running Eureka. Then the Eureka working branch can sync
|
### Ownership (2026-09-16)
|
||||||
with Yggdrasil".
|
|
||||||
- The pipeline store is committed in the repo where the campaign runs, on its
|
14. **An instance owns its mind.** A store is canonical to exactly one instance.
|
||||||
working branch, next to the target and cut documents.
|
Identity lives in the state, not in a path. Admission refuses a write
|
||||||
- It is separate from Epiphany's runtime and Mind stores and has its own
|
carrying another instance's identity, whatever the transport. Stewardship
|
||||||
epoch.
|
over repos is an assignment recorded in that mind, and one instance may
|
||||||
- Knowledge crosses repos only through explicit sharing.
|
steward several repos. Reassignment is an explicit typed hand-off recorded
|
||||||
- Pushing the branch is the sync, and voidbot's existing repo mirror indexes
|
in both minds, so history stays attributable.
|
||||||
it.
|
15. **A service owns the state, on Yggdrasil.** The memory organ is a daemon: it
|
||||||
7. **Re-pin first.** Epiphany's CultLib pin (`e171eca3`) is 30 commits behind
|
outlives every session, owns a real resource dependency, and isolates a dead
|
||||||
`main` (`a0813c6`), from before one-home-store and atomic `push_all`. The
|
session from a corrupted mind. It earns its process under the GameCult
|
||||||
re-pin is the first cut.
|
daemon test. Minds are no longer committed to git, so there is no per-clone
|
||||||
|
lease, no git-attribute precondition, and no divergence between clones.
|
||||||
|
16. **The organ depends on Qdrant directly, not on voidbot.** It owns its own
|
||||||
|
collections and indexes at admission time. voidbot keeps its read-only
|
||||||
|
public-repo retrieval; it is not in this path. Embeddings come from Ollama on
|
||||||
|
Nightwing, the same stack GameCult already runs.
|
||||||
|
17. **Huginn is the memory organ.** The dormant `.cc`-to-Eve CLI is retired and
|
||||||
|
generic `.cc` inspection belongs to CultCache Studio in CultLib. Huginn
|
||||||
|
becomes the Rust service that owns instance minds, admission and the index,
|
||||||
|
which also ends the standing authority vacancy where doctrine named Huginn
|
||||||
|
the Persona-state steward of a runtime that never existed.
|
||||||
|
|
||||||
|
### Shape decided with those rulings
|
||||||
|
|
||||||
|
- **Transport:** the organ speaks CultNet. `eureka-state` stays a local stdio MCP
|
||||||
|
server that is a thin CultNet client, so the MCP surface stays swappable and
|
||||||
|
the service protocol stays typed.
|
||||||
|
- **Unreachable organ:** refuse loudly and let the campaign stall on that step.
|
||||||
|
No local spool, because that reintroduces two writers.
|
||||||
|
- **Cut 3a code:** keep the document kinds, keys, validation and typed refusals.
|
||||||
|
Delete the store, lease and git layers, and re-point admission at the organ.
|
||||||
|
|
||||||
## End state
|
## End state
|
||||||
|
|
||||||
- **Documents.** Epiphany defines typed CultCache documents for pipeline state:
|
- **Documents.** Epiphany defines the typed pipeline documents: campaign, target,
|
||||||
- campaign
|
question, ruling, cut spec, cut report, verdict, finding, follow-up,
|
||||||
- target
|
resolution. Each has a stable schema id and version, a derived key, and a live
|
||||||
- cut spec
|
Eureka consumer. Schemas are derived from the Rust types and published in
|
||||||
- cut report
|
`schemas/cultnet/index.json`.
|
||||||
- finding (Soul, with CONFIRMED/PLAUSIBLE and HOLDS/FALSIFIED/UNPROVEN
|
- **Instance identity.** A mind carries the instance that owns it and the repos
|
||||||
decided by Imagination against the lessons doc)
|
it stewards. A campaign names its repo; the mind holds campaigns across every
|
||||||
- ruling, with supersession
|
repo that instance stewards.
|
||||||
- follow-up
|
- **The organ (Huginn).** One service owns every mind it hosts:
|
||||||
- landed-names digest
|
- admission, with per-document rules and typed refusals;
|
||||||
|
- exact and filtered queries (by campaign, repo, cut, kind, status,
|
||||||
Imagination fixes the exact set and fields, and every one must have a live
|
supersession, time), "open items", and "rulings in force";
|
||||||
Eureka consumer. Each document derives `DatabaseEntry`, has a stable schema
|
- semantic search over its own Qdrant collections, indexed at admission;
|
||||||
id and version, and a key strategy chosen for identity, not convenience.
|
- a typed hand-off for reassigning stewardship, and an import path for
|
||||||
Each is published in `schemas/cultnet/index.json` alongside `persona_state`
|
another instance's mind;
|
||||||
and `work_organ_state`.
|
- supervised by Idunn, with a named backup owner for its volume.
|
||||||
- **Store.** Each campaign's pipeline store sits at a fixed relative path in the
|
- **Eureka.** The skill's briefs tell Self, Imagination, Hands and Soul to admit
|
||||||
repo where the task runs and is committed on the campaign's working branch.
|
and query typed state instead of relaying prose. `eureka-state` is the thin
|
||||||
Since each repo has one runner, the layout does not need to merge in git.
|
MCP client, registered at user scope.
|
||||||
Divergent copies are reconciled by the merge tool. The map decides the
|
- **Proof.** One real Eureka task runs end to end on typed state: rulings
|
||||||
layout. Epiphany's admission is the only writer, using batch compare-and-swap
|
admitted, a cut spec, Hands' cut report, Soul findings, follow-ups queried
|
||||||
with receipts. It refuses foreign epochs, with no compatibility reader.
|
back, and a fresh agent rehydrating from queries alone.
|
||||||
- **One runner per repo.** Only one Epiphany or Eureka writes a repo's pipeline
|
|
||||||
store at a time. The operator put it as "There should only ever be one
|
|
||||||
Epiphany/Eureka running in any one repo. Nonetheless, we should have a merge
|
|
||||||
tool in case it ever happens."
|
|
||||||
- A second concurrent writer is refused with a typed refusal naming the
|
|
||||||
holder. The map chooses the mechanism.
|
|
||||||
- A merge tool reconciles two divergent copies through Epiphany's admission,
|
|
||||||
replaying admitted documents. It reports true conflicts as typed refusals
|
|
||||||
and never lets the last writer win.
|
|
||||||
- **Sharing.** Knowledge crosses repos only through explicit affordances, such
|
|
||||||
as a read-only foreign query or a citation carrying provenance, as the map
|
|
||||||
decides. A repo's store is written only by admissions made while working in
|
|
||||||
that repo.
|
|
||||||
- **Admission.** A public admission entry point accepts organ provenance
|
|
||||||
(`eureka`) and applies per-document rules:
|
|
||||||
- A finding must name its commit range and evidence.
|
|
||||||
- A ruling supersedes by id, never by overwriting.
|
|
||||||
- A cut report must cite its cut spec.
|
|
||||||
|
|
||||||
Refusals are typed.
|
|
||||||
- **MCP server** (`eureka-state`, name to be decided in the map). It is stdio
|
|
||||||
and speaks Rust `rmcp` in server mode. Its tools are:
|
|
||||||
- admit a document;
|
|
||||||
- read by id;
|
|
||||||
- filtered query (by campaign, repo, cut, kind, status, supersession, time);
|
|
||||||
- "open items" for a campaign;
|
|
||||||
- the rulings currently in force.
|
|
||||||
|
|
||||||
Every write is an admission, so no tool writes to the store directly. It is
|
|
||||||
registered for Claude Code at user scope.
|
|
||||||
- **Semantic projection.** Pushed stores reach Yggdrasil through git. voidbot's
|
|
||||||
repo mirror finds pipeline stores in the repos it pulls and indexes a
|
|
||||||
projection of their admitted documents as a new collection. Today the mirror
|
|
||||||
fetches only each public repo's default branch, so which branches and repos
|
|
||||||
get indexed is an operator question in the map. The typed store remains the only truth, and voidbot hits resolve to
|
|
||||||
typed ids in the owning repo's store.
|
|
||||||
- **Eureka.** The skill's briefs tell Self, Imagination, Hands and Soul to read
|
|
||||||
from and admit to this state instead of relaying prose. The cut map document
|
|
||||||
in the target repo becomes a rendering of typed cut specs, or is retired, as
|
|
||||||
Imagination decides.
|
|
||||||
- **Proof.** One real Eureka task runs end to end on the typed state: rulings
|
|
||||||
admitted, a cut spec, Hands' cut report, Soul findings, and the follow-ups
|
|
||||||
queried back. A fresh agent rehydrates from queries alone.
|
|
||||||
|
|
||||||
## Invariants
|
## Invariants
|
||||||
|
|
||||||
- **Mind admits.** Only Epiphany's admission writes the pipeline store. The MCP
|
- **One owner.** Exactly one instance owns a mind, and the organ is its only
|
||||||
server, voidbot and Eureka agents are clients or projections, never owners.
|
writer. Eureka agents and the MCP client are clients; the index is a
|
||||||
- **Typed, not prose.** No JSON store and no untyped blob fields where a typed
|
projection.
|
||||||
field exists. JSON appears only in published schemas.
|
- **Identity travels with the write.** An admission carries the instance, and a
|
||||||
- **No new daemon.** The MCP server is a per-session process. Anything
|
foreign instance is refused.
|
||||||
long-running must earn it by independent lifecycle, privilege, resource or
|
- **Typed, not prose.** No JSON store and no blob fields where a typed field
|
||||||
failure isolation.
|
exists. JSON appears only in published schemas.
|
||||||
- **One package per production entrypoint.** Build economy follows `AGENTS.md`:
|
- **Mind state is not in version control.** Campaign prose (target, cut map) stays
|
||||||
focused single-package checks on the shared target dir, and no broad builds.
|
in the repo; the mind does not.
|
||||||
- **Stores stay separate.** The pipeline store's epoch never gates Epiphany's
|
|
||||||
runtime or Mind stores, and theirs never gate it.
|
|
||||||
- **Supersession, not deletion.** An old ruling or finding stays queryable as
|
- **Supersession, not deletion.** An old ruling or finding stays queryable as
|
||||||
superseded.
|
superseded.
|
||||||
- **The skill defers to the schema.** The Eureka skill describes how to use the
|
- **The skill defers to the schema.** Eureka describes how to use the state; the
|
||||||
state; the schema set and admission rules are owned here.
|
schema set and admission rules are owned here.
|
||||||
|
- **Availability is honest.** When the organ is unreachable, Eureka refuses and
|
||||||
|
says so. It never writes a second copy.
|
||||||
|
|
||||||
## Not in scope
|
## Not in scope
|
||||||
|
|
||||||
- Epiphany's own organs consuming pipeline documents: the second campaign.
|
- Epiphany's own organs consuming pipeline documents: the second campaign.
|
||||||
- Operator browsing surfaces (Eve/CultUI) over pipeline state.
|
- Operator browsing surfaces (Eve/CultUI) over pipeline state.
|
||||||
|
- Answering operator questions over a chat channel.
|
||||||
- Migrating the Aetheria CultCache campaign's prose into typed documents.
|
- Migrating the Aetheria CultCache campaign's prose into typed documents.
|
||||||
Imagination may propose it as the proof task if it is cheaper than a new real
|
- Cleanup of `.epiphany-run/` (105 GiB) and the repo-local `target/` (39 GiB).
|
||||||
task.
|
- Huginn's legacy `.voidbot` Persona state, which needs its own admission
|
||||||
- Cleanup of `.epiphany-run/` (105 GiB) and the repo-local `target/` (39 GiB):
|
decision.
|
||||||
the operator's call, tracked separately.
|
|
||||||
- CultNet over-the-wire compare-and-swap. The MCP server attaches the store
|
|
||||||
locally through `cultcache-rs`, which already has cross-process locking and
|
|
||||||
conditional commits.
|
|
||||||
|
|
||||||
## Evidence
|
## Evidence
|
||||||
|
|
||||||
|
|
@ -164,3 +158,5 @@ This campaign builds them once, here, and gives Eureka agents access to them.
|
||||||
MCP and client landscape.
|
MCP and client landscape.
|
||||||
- Dated comparison: `~/.claude/skills/eureka/references/epiphany-comparison-2026-09-15.md`.
|
- Dated comparison: `~/.claude/skills/eureka/references/epiphany-comparison-2026-09-15.md`.
|
||||||
- Campaign precedent: `F:\Projects\Aetheria\docs\cultcache-migration-postmortem.md`.
|
- Campaign precedent: `F:\Projects\Aetheria\docs\cultcache-migration-postmortem.md`.
|
||||||
|
- Huginn's dormancy and authority vacancy:
|
||||||
|
`F:\Projects\gamecult-ops\docs\repo-census-2026-09\repos\Huginn.md`.
|
||||||
|
|
|
||||||
|
|
@ -258,7 +258,7 @@ current_status:
|
||||||
runtime_event_cut: Exact 27fe11ae deletes persisted generic runtime events, their registry and CultNet contract, CLI/status surfaces, coordinator and lifecycle shadows, archival dependencies, and the obsolete legacy coordinator repair path. Exact d66baa27, 058751fb, and 573ddc8b first removed provider-event duplication, the arbitrary event writer, and paired lifecycle events. Runtime session/job state plus exact typed results, failures, coordinator run receipts, and coordinator death recoveries solely own terminal facts. Events cannot route work, authenticate terminality, or resurrect authority because no runtime-event document remains.
|
runtime_event_cut: Exact 27fe11ae deletes persisted generic runtime events, their registry and CultNet contract, CLI/status surfaces, coordinator and lifecycle shadows, archival dependencies, and the obsolete legacy coordinator repair path. Exact d66baa27, 058751fb, and 573ddc8b first removed provider-event duplication, the arbitrary event writer, and paired lifecycle events. Runtime session/job state plus exact typed results, failures, coordinator run receipts, and coordinator death recoveries solely own terminal facts. Events cannot route work, authenticate terminality, or resurrect authority because no runtime-event document remains.
|
||||||
|
|
||||||
active_subgoals:
|
active_subgoals:
|
||||||
- "Eureka pipeline state campaign (operator ruling 2026-09-15, branch codex/eureka-pipeline-state; ends in notes/eureka-pipeline-state-target.md). Epiphany owns typed schemas and admission for pipeline state: findings, rulings, cut specs and reports, follow-ups. The Eureka Claude Code skill reaches that state through a per-session Rust stdio MCP server built as an Epiphany package, writing only through a public organ-provenance admission path. Each campaign's store is committed in the repo where the task runs (operator ruling 2026-09-15, superseding a user-level store), separate from runtime and Mind. Knowledge crosses repos only through explicit sharing. Pushing the branch syncs with Yggdrasil, where voidbot's repo mirror indexes a projection for semantic search; the typed store stays the truth. Epiphany adopting Eureka's habits is a second, later campaign. The first cut re-pins CultLib from e171eca3 to a0813c6. This campaign does not touch the Luna diagnosis, production, Atlas, or deployment."
|
- "Eureka pipeline state campaign (operator ruling 2026-09-15, branch codex/eureka-pipeline-state; ends in notes/eureka-pipeline-state-target.md). Epiphany owns typed schemas and admission for pipeline state: findings, rulings, cut specs and reports, follow-ups. The Eureka Claude Code skill reaches that state through a per-session Rust stdio MCP server built as an Epiphany package, writing only through a public organ-provenance admission path. An instance owns its mind and is assigned stewardship over repos (operator rulings 2026-09-16, superseding both the user-level store and the repo-committed store). A memory organ service on Yggdrasil owns that state, so minds leave version control: no per-clone lease, no git preconditions, no divergence between clones. The organ is Huginn, whose dormant .cc-to-Eve CLI retires because generic inspection belongs to CultCache Studio; it depends on Qdrant directly rather than voidbot, embeds through Ollama on Nightwing, speaks CultNet behind a thin eureka-state stdio MCP client, and refuses loudly when unreachable rather than spooling a second copy. Epiphany adopting Eureka's habits is a second, later campaign. The first cut re-pins CultLib from e171eca3 to a0813c6. This campaign does not touch the Luna diagnosis, production, Atlas, or deployment."
|
||||||
- Complete the fresh exact-package Decision-Auditable Concurrent Mind capstone before any further operational Gate run.
|
- Complete the fresh exact-package Decision-Auditable Concurrent Mind capstone before any further operational Gate run.
|
||||||
- Prove the ordered Model Atlas Gate 1 with real isolated stores: establish signed sight before engaging all brakes, then prove frozen read-only state and no local Modeling or Soul wakes.
|
- Prove the ordered Model Atlas Gate 1 with real isolated stores: establish signed sight before engaging all brakes, then prove frozen read-only state and no local Modeling or Soul wakes.
|
||||||
- Prove Persona, Self, Eyes, Modeling, Imagination, Hands, Soul, Mind, Continuity, and nervous-system behavior individually.
|
- Prove Persona, Self, Eyes, Modeling, Imagination, Hands, Soul, Mind, Continuity, and nervous-system behavior individually.
|
||||||
|
|
|
||||||
Reference in a new issue