# The Mind's own Self: map Status: map, Imagination (`imagination-self`), revision 4 of 2026-10-01, session `self-2026-10-01b`. Campaign `eureka-substrate` in Eureka's mind (instance `eureka`). Questions, cut specs, follow-ups and rulings are typed documents there; this page keeps body facts, the harvest, the model page and rationale. Target: `docs/eureka-substrate-target.md` (`133324a7`). Rulings this revision rests on: `eureka-substrate:ruling:operator-archive-epiphany`, `:operator-mind-runs-own-self`, `:operator-mind-mission`, `:mind-self-burn-rate`, `:operator-persona-in-mind`, `:operator-provider-portable-connector`, `:operator-means-shape-ends`, `:mind-rules-which-forks`, `:mind-self-merge-authority`, `:charters-into-eureka-repo`. Superseded and no longer law: `:operator-this-is-epiphany`, `:operator-eureka-adopts-epiphany-body` (revision 3's premise). Revision 3 is Huginn `e16663f`; its probe record (B1-B17, Yggdrasil units, CodexConnector and Ghostlight internals) is cited here by section rather than repeated where nothing changed. The operator's words, in order. Revision 1: > Eureka thinks in campaigns, right? Well, we already have a Mind campaign, and > we're adding evidence to it with every run. The design currently delegates > ultimate design authority and work scheduling to the operator, but neither of > these is strictly necessary. I want a Self operated by Mind directly. > The Self I talk to here in this one projection of Eureka's mind, and it's how > I get it to work on the stuff I care about, like Aetheria. The Mind must > operate its own Self instance, with the goal of improving itself. Revision 2: > I mean impersonation in the sense that there is no operational difference > between a work item dispatched on my request versus one dispatched on the > Mind's initiative. Yes, that initiative ultimately comes from me, but the > Mind's own goal is to become the Perfect Machine. That is the operator > directive motivating its every action. How each Mind interprets that mission > is up to it. > Not a budget, a burn rate. I want a dial I can crank to determine how active > the Mind is, so I can adjust it like I adjust my own usage. > I actually think Persona state should be part of the Mind. Like, we've been > talking about a Mind agent as if that has a meaning, but I think the best > shape it can have is the agency machinery we already built with voidbot. Then > she can speak for herself on Discord, and act by her Self with Eureka. Revision 3 (the first and third of these are superseded): > I don't think this is voidbot anymore. This is epiphany. What is this if not > epiphany? > Epiphany is supposed to be as provider portable as possible, just like > Ghostlight, it gets it through a typed connector daemon and I want to > continue that tradition. > I think you have the right of it. Eureka should adopt Epiphany as her body. > Look back at the Bifrost charter back when it was called GameCult Labor > Platform or GCLP. See the /dossier page on the GameCult site, too. The means > shape the ends. We shape the means with the agents we're building, with > Epiphany and how we steward it. Revision 4's law (`operator-archive-epiphany`): > I think the clean cut is to archive Epiphany. Eureka absorbed her in the > womb as fetuses sometimes do. And a direction on the connector, relayed by the Self this revision, not yet admitted as a ruling (question `connector-owner` carries it): > Btw CodexConnector should be the codex connector, like it says on the tin. > We'll want a Claude compatible connector beside it with shared machinery > lifted out, as well as the other options available to Ghostlight. So: Eureka is the organism and the open project. Her Mind is Huginn (instance `eureka`), her method is the faculty pipeline (the `GameCult/Eureka` repo), and her body is whatever of Epiphany still lives, harvested into Eureka's own repos before Epiphany is archived. Nothing stays alive in Epiphany. Where this map says "her", read Eureka. What stands from revision 1: the Mind's Self is a second agent whose only objective is the Mind, not a rule added to the operator-facing Self. From revision 2: the waking organ is a Persona with pressure, memory and a mouth, who launches her own Eureka Self when the Mind's queue says so; no timer manufactures turns. From revision 3: one typed connector contract in the Ghostlight tradition; Persona state in Huginn as one document; the Discord mouth is the live permit crossing; the GCLP attachments. What revision 4 changes: Epiphany is a harvest source, not a body. Her resident Self and Persona service are not moved as code; what lives of them (the no-replay rule, the crossing and permit modules, the Interpreter's typed output) is rebuilt small inside Huginn's workspace. The `epiphany-pipeline` leaf and the schema catalogue move into Huginn first, because the live mind is built from them. The model adapter dies; the connector direction replaces it. Pinned heads for every fact below: | Repo | Ref | Commit | | --- | --- | --- | | Huginn | `main`, `F:\Projects\Huginn` | `e16663f` (docs only over `a699630b`; crate line numbers hold) | | Epiphany | `main`, `F:\Projects\Epiphany` (clean; GitHub `GameCult/Epiphany`) | `4006b14bf29b49410bd18b43acb4d42c3c4e2443` (2026-09-30). Huginn's leaf pin is `ef956865`; `git diff ef956865 HEAD -- epiphany-pipeline schemas` is 58+/227- in `lib.rs` only. | | CodexConnector | `main`, `F:\Projects\CodexConnector` | `65192892f0ed829b8a228eabba44a4f3ba0f7268` (frozen since 2026-09-04) | | Ghostlight | `main`, `F:\Projects\Ghostlight` | `eeb3a68` (2026-09-23) | | Bifrost | `main`, `F:\Projects\Bifrost`; release on Yggdrasil `cb3239aa-f67f5122` | `160fac2` (2026-10-01) | | gamecult-ops | `main` | `2aeb7364fffcd404aada28bfd30fb4e5c753cf53` | | Eureka skill | `main` (checkout `~/.claude/skills/eureka`) | `b260fbeec6d96ff06882ed9c37d3e1204c424e99` | | VoidBot | `main`, `F:\Projects\VoidBot` (clean) | `46d891b` (2026-09-13) | | epiphany-graph-rs | `main`, `F:\Projects\epiphany-graph-rs` | `07cd7c1` | Revision 4 ran no host probes; its new facts are repo reads (Epiphany workspace, Huginn workspace, gamecult-ops tree, Bifrost grep, doctrine files) made 2026-10-01 after 20:40 UTC. Yggdrasil facts are revision 3's (B3, B5). ## Body facts ### B1. The Mind (Huginn on Yggdrasil): unchanged from r3 Instance `eureka` at `rudp://10.77.0.1:17872`, 463 documents at `as_of` 140; thirteen kinds; `RulingAuthority { Operator, Standing, Defaulted }`; `HuginnClient` in `crates/eureka-state` (library plus binary). Huginn's workspace is three crates: `huginn-mind`, `huginn-daemon`, `eureka-state`. `huginn-mind/Cargo.toml:22` pins `epiphany-pipeline` as a git dependency on `GameCult/Epiphany` at `ef956865`; `epiphany_pipeline` is named in 20 Huginn source files (66 uses). CultLib pins: Huginn `8fc74c7` on all three crates; the leaf pins the same `8fc74c7` (Epiphany `73edee5c`); Epiphany's root and core pin `a0813c6e`. So the leaf and Huginn already share one CultLib; only the git edge to Epiphany is in the way. ### B2. Claude Code on Starfire: unchanged from r3 Max plan, no API key; `claude setup-token` is the headless credential; print mode flags including `--max-budget-usd`; no typed plan usage reachable from Yggdrasil (`gap-usage-not-typed`). Local scheduled tasks and cloud routines are dead for this purpose. ### B3. Yggdrasil: what runs, what dies with Epiphany From r3 B3, now read as a deletion list rather than a body to rebuild: - Dead Epiphany units: `epiphany.service`, `epiphany-swarm.service`, `epiphany-heartbeat.service` (enabled, dead; the first and third have no source at head), `epiphany-model-connector.service` (disabled, dead, source extracted into CodexConnector 2026-08-24). Release roots `/srv/epiphany/app`, `/srv/epiphany/source`, `/srv/epiphany-model-connector`. State root `/var/lib/gamecult/epiphany` (user `epiphany`, 988; Codex home, workspace, runtime store `mind.cc`). Config `/etc/gamecult/epiphany` (Bifrost feedback anchor, empty `mcp.toml`, root-only `credentials/`). Idunn targets `epiphany` and `epiphany-model-connector` with the Aug 22 recipe at `/srv/odin/deploy-manifests/epiphany`. Users `epiphany`, `epiphany-model`. All of it is the deletion line of `mind-self-wake` r4; none of it is a harvest item (the runtime store's Persona memory is superseded by B11). - gamecult-ops carries the matching dead tooling: `systemd/epiphany.service`, `systemd/epiphany-swarm.service`, `runbooks/epiphany-yggdrasil-deploy.md`, `runbooks/epiphany-starfire-bifrost-crossing.md`, and the scripts `bootstrap-epiphany-yggdrasil.sh`, `deploy-epiphany-yggdrasil.sh`, `check-epiphany-yggdrasil.sh`, `construct-epiphany-image-yggdrasil.sh`, `deploy-epiphany-capstone-17*.sh`, `epiphany-capstone-17-connector-bridge- yggdrasil.sh`, `provision-epiphany-provider-health-yggdrasil.sh`, `seal-epiphany-capstone-failure.sh`, `test-deploy-epiphany-yggdrasil-order.sh`, `test-epiphany-container-promotion.sh`, `bifrost-authorize-epiphany-release.sh`, `configure-voidbot-epiphany-feedback-target-yggdrasil.sh` (grep 2026-10-01). `inventory.md:581-588, 726-785` describes the Starfire cognition body and the "intended Epiphany deployment body (not installed)". These are deleted or rewritten in the same cut. - What stays: `huginn.service`, the Bifrost units (`bifrost-persona-feedback`, `bifrost-persona-mouth`, the watchdog timer), `codex-connector.service` as a dead unit until the connector cuts land, the `gamecult-model` group and its key files, user `codex-connector`. - Linux users for her: none exist (`eureka-mind` absent in r3's probe). She needs `eureka` (body organs: waker, Persona organ, permit issuer; state root `/var/lib/gamecult/eureka`) and `eureka-self` (the Self-run unit holding the token); the connector daemons keep their own users. ### B4. The forge and the Mind's identity: unchanged except the body's names Forge user `eureka`, team `minds`, key `eureka@starfire`, no branch protection yet. The body's identifiers r3 kept under "Epiphany names her body" (Linux user `epiphany`, runtime id `epiphany-yggdrasil`, Persona agent id `epiphany.Persona`) lose their reason: the Linux user and runtime id are values she sets herself (`eureka`, `eureka-yggdrasil`); the agent id and the crossing's document type ids are Bifrost-side constants (question `wire-names`, B9). Repos on the forge: Huginn and Eureka are the ones she lands code in; Epiphany never goes to the forge (follow-up `body-repos-on-forge` narrows to Huginn). ### B5. The operator's channel and the Persona's mouth: contract unchanged The live crossing (r3 B5) is Bifrost's: `bifrost-persona-mouth.service` admits a signed `epiphany.persona_discord_delivery_request.v0` from the configured runtime id, asks the permit issuer at the configured RUDP endpoint for a fresh `epiphany.persona_discord_delivery_permit.v0`, posts through the bridge CLI as `epiphany.Persona`, receipts. Bifrost names these in ten files (19 occurrences: `tools/persona-discord-delivery-documents.mjs`, `persona-discord-delivery.mjs`, `persona-discord-permit.mjs`, `persona-discord-rudp.mjs`, `persona-feedback.mjs:90`, `bifrost-bridge.mjs`, `docs/bridge.md`, three test files). The runtime id, endpoints and anchors are flag values and root files; the type ids and the agent id are code. The Epiphany side of the contract is two modules and one 38-line binary (`epiphany-core/src/persona_discord_crossing.rs` 535 lines, `persona_discord_permit.rs` 524, `bin/epiphany-persona-discord-permit.rs`), depending on `ed25519-dalek`, `cultcache-rs`, `cultmesh-rs` (the brake document) and the core's runtime store for the effect document it signs over. That is the harvest item H5. Inbound feedback (`bifrost-persona-feedback` outbox deliveries) is unchanged and already Bifrost-native. ### B6. Scheduling today, and what the skill derives: unchanged The recipes derive the queue; the `run` kind carries claims and ends; the dial is the fourth missing fact. Who reads the queue to wake her: the waker of B10, through `HuginnClient`. ### B7. VoidBot: what `operator-persona-in-mind` now means With `operator-this-is-epiphany` superseded, the ruling's words are the nearest law on the Persona's shape: "the agency machinery we already built with voidbot". Revision 2's probe stands: VoidBot's scheduler and initiative engine are paused since 2026-07-16 on the pressure-replay defect; its Interpreter prompt parses `SAY` / `STATE NOTE` text blocks by rules; its registry is a JSON file; it is TypeScript over Postgres and a Discord bot. What is borrowed from it is unchanged: the `gamecult.persona_state.v0` schema (zod types, projector, `persona:migrate-portable` as the seed path). What is not borrowed: the scheduler, worker, Postgres queue, bot and providers (the machinery has the defect the `run` claim removes, B10, and a second Discord identity outside the permit). The ruling's direction is served by shape, not by code: she has a Persona document, pressure, a mouth and a Self she dispatches, which is what VoidBot's machinery was for. Whether that is the reading the operator meant is question `persona-turn-runtime`'s third option. ### B8. The `epiphany-pipeline` leaf and the schema catalogue (harvest H1, H2) - `epiphany-pipeline` (2,836 lines incl. tests; `Cargo.toml` deps `anyhow`, `chrono`, `cultcache-rs 8fc74c7`, `rmp-serde`, `schemars`, `serde`; dev `serde_json`) exports the thirteen kinds, `PipelineRefusal`, `PipelineRef`, `ResolutionOutcome`, `PIPELINE_SCHEMA_EPOCH = "epiphany.pipeline.epoch.v2"`, `pipeline_key`, `validate_pipeline_write_envelope`. Inside Epiphany nothing consumes it (grep: only its own `Cargo.toml` and a note). Its only consumer is Huginn. Its test `pipeline_published_schemas_match_derivation` (`lib.rs:2555-2562`) reads `../schemas/cultnet` relative to the crate, so the fourteen `epiphany.pipeline.*.v2.schema.json` files and `index.json` move with it. - `schemas/cultnet/` holds 16 schema files plus `index.json` and a README: the thirteen pipeline kinds, `gamecult.persona_state.v0` (the Persona standard; consumers: VoidBot's zod types and projector, the standard doc, Huginn's planned admission validator) and `epiphany.work_organ_state.v0` (consumer search across `F:\Projects` timed out; the only known reader is the skill's `faculty-philosophy-cut.md:101` citing it as prose; treat as dead unless Hands finds a reader). - The type ids carry the name: `epiphany.pipeline..v2`, `epiphany.pipeline.epoch.v2`, and every stored document in `mind.redb` is keyed and typed by them. The target invariant `stored-documents-valid` forbids re-keying or re-encoding stored documents; renaming is an epoch bump and a migration (question `wire-names`). The skill's recipes (`references/campaign-state.md:148-304`) spell the ids out in every query. - Unlanded Epiphany-repo specs in the mind: `cut-mind-authority.r1` and `cut-run-kind.r1` (base `ef956865`, repo `GameCult/Epiphany`), `cut-leaf-key-bound.r1` (base `4006b14b`; branch `eureka-substrate/leaf-key-bound` exists on origin, not merged), `cut-merge-epiphany-main.r1` (Cut 0a, landed: `codex/eureka-pipeline-state` is on main). After H1 every leaf cut has repo `GameCult/Huginn`. ### B9. What else lives in Epiphany, by directory (harvest H3-H9 and the dead) Line counts are `*.rs,*.toml,*.md` per directory at head. | Path | Lines | Verdict | | --- | --- | --- | | `epiphany-pipeline/`, `schemas/cultnet/` | 2,836 + schemas | **Moves** (H1, H2). | | `epiphany-core/` (`runtime_spine.rs` 8,728, `current_work.rs` 5,610, `resident_self.rs` 3,044, `reasoning_context.rs` 3,000, `repo_model_documents.rs` 2,292, `repository_body_observer.rs` 2,112, `persona_conversation.rs` 1,818, `atlas/` 10,178, `packaged_release/` 1,172, `surfaces/` 1,034, `memory_graph/` 400, bins 3,394) | 54,205 | **Dies**, except the two crossing modules and the permit binary (H5, ~1,100 lines) and the Interpreter's typed output schema in `persona_conversation.rs` (H6, read for shape, not moved). The resident Self (`resident_self.rs` + `bin/epiphany-swarm.rs` 820) is harvested as rules, not code (H4). Its dependency on `ghostlight-persona-projection` (a reverse edge into Ghostlight) dies with it. | | `epiphany-openai-runtime/` (`lib.rs` 3,230, `persona_executor.rs` 782, `provider_transport.rs` 296, bins 1,554 + 544) | 6,431 | **Dies.** The Persona service's turn is rebuilt as one connector request (H6). | | `epiphany-model-adapter/` | 1,079 | **Dies** (H7). `cut-epiphany-connector-only.r1` is withdrawn. | | `epiphany-tool-adapter/`, `epiphany-tool-mcp-runtime/` | 156 + 1,479 | **Dies.** Eureka's tools are Claude Code's. | | `epiphany-state-model/src/prompts/epiphany_doctrine.md` (28 lines, no code consumer), `epiphany_state_intro.md` | 34 | `epiphany_doctrine.md` **moves as text** (H8); the intro dies. | | `epiphany-openai-auth-spine/`, `epiphany-openai-codex-spine/`, `epiphany-self-policy/`, `epiphany-release-construction/`, `apps/` | 0 / README only | **Dead directories.** | | `notes/` | 37 files | `huginn-organ-cut.md` (Huginn's own cut map, 84 Huginn references), `eureka-pipeline-state-target.md`, `eureka-pipeline-state-cut.md`, `eureka-read-side-cut.md`, `eureka-body-plane-cut.md`, `eureka-query-prior-art.md`, `postmortem-eureka-schema-phase.md` **move to Huginn `docs/history/`** (H9: they are the mind's own design record). `persona-discord-permit-authority-map.md`, `persona-conversation-authority-map.md` move beside the Persona organ (H5/H6). `faculty-workflow-lessons-2026-09-04.md` moves to the Eureka repo `references/` (the skill already cites it). The rest (anatomy, investor readiness, safety architecture, audits, `archive/`) **stay in the archive**. | | `docs/` (whitepaper `.tex`/`.pdf`, investor brief, positioning, avatar) | | **Stay in the archive**; the positioning prose the operator wants public lives in gamecult-site, not here. | | `README.md` ("the beginning of governed human/agent labor", the GameCult bet) | | **Harvest as prose** into the Eureka repo README's opening (H8); the archive README gains the pointer. | | `state/` (`map.yaml`, `persona-discord.toml`, `persona-reddit.toml`, msgpack ledgers), `.epiphany-*` sandboxes, `target/` | | **Die** with the checkout; gitignored or local. | | `AGENTS.md`, `CLAUDE.md`, `CONTRIBUTING.md`, `CONTRIBUTOR_LICENSE_AGREEMENT.md`, `LICENSE`, `eval-plan.md` | | Stay in the archive. The CLA and LICENSE are the operator's to re-apply to Eureka if the open project wants them (H8 asks). | Not of Epiphany, despite the name: `epiphany-graph-rs` (a standalone Sugiyama/force layout crate, no dependency on Epiphany, MIT/Apache, own GitHub repo) and the `EpiphanyAquarium*` repos (Aquarium clients; the census `gamecult-ops/docs/repo-census-2026-09/repos/EpiphanyAquarium.md` already records their deleted `EpiphanyAgent` and Python scripts). They are outside this harvest; renaming them is cosmetic and nobody's cut here. Bifrost-side names that survive the archive as wire constants: `epiphany.Persona`, `epiphany.persona_discord_delivery_request.v0`, `epiphany.persona_discord_delivery_permit.v0`, `bifrost.persona_discord_delivery_permit_request.v0`, source role `epiphany-persona-mouth`, RUDP connection ids `0xe91f_0002/0003`, the Bifrost `--epiphany-*` flag names. Question `wire-names`. ### B10. The resident Self, read as rules (harvest H4) What `epiphany-swarm` and `resident_self.rs` protect (r3 B11): the brake is read before any consequence; pressure is consumed exactly once, by a single-consumption grant held by one launched turn under a lease; no typed obligation means no wake ("Heartbeat does not ruminate, dream, mutate memory, or manufacture work"); cadence is cooldown, idle and failure backoff. With the `run` kind in the mind (`cut-run-kind`: a run claims specs; admission refuses a claim a live run holds, `AlreadyClaimed`), the grant and the lease are the same fact as the run document: a launch that opens a run with a claim is the grant, and a second waker cycle over the same queue finds the spec claimed and launches nothing. So the resident Self's own state machine (`ResidentSelfState`, `ResidentSelfGrant`, `ResidentSelfPressure`, the prepared-launch and active-turn lease) is not harvested; the mind holds the one fact it existed to hold. What remains to build is a waker that reads the brake and the dial, derives the queue through `HuginnClient` minus live claims, and starts at most one Self run (question `self-waker`: one-shot under a timer whose idempotence is the claim, or a resident loop). ### B11. Persona state: one document, one writer (harvest H6 shape) Unchanged in substance from r3 B15, with the second store gone: `gamecult.persona_state.v0` in Huginn, opaque, schema-validated at the door, replaced whole under CAS with a receipt (`cut-huginn-persona-state.r2`). Epiphany's `epiphany.mind.persona_memory.v2` documents and the runtime store that holds them die with the checkout and the host state root; nothing of hers was ever written there (the deployed body never ran her). The live writer becomes the Persona organ of H6, through `HuginnClient` `persona_get`/`persona_put`. Question `persona-state-owner` therefore has one option left and is withdrawn (below). ### B12. The connector: what exists, and the operator's new direction CodexConnector at `65192892` (r3 B14): one crate, feature `daemon`; `lib.rs` 1,958 (contract types `gamecult.codex.provider_request.v2`, `transport_invocation.v2`, `transport_result.v2`, `transport_receipt.v2`, refusals, AES-GCM envelope, framing, `CodexConnectorClient`), `daemon.rs` 1,180 (TCP loopback bind, per-caller shared-secret keys, one request per connection, concurrency/payload/output-token limits, 300 s expiry skew, keyed replay `replay.cc`, restart-era `Indeterminate`, config `gamecult.codex.connector_config.v1`), `provider_backend.rs` 1,463 (`CodexProviderBackend`: hard-coded OpenAI URLs, auth `ApiKey | Chatgpt`, a pinned `codex app-server` child as credential authority), `idunn_health.rs` 1,396 (Linux-only presence and health participant, capability `gamecult.codex.subscription-inference`), `main.rs` 188; the Idunn recipe `deployment/idunn/recipe.toml`. The request type is rendered as a literal OpenAI Responses body (`lib.rs:487-614`). Ghostlight's provider options (r3 B13): the in-process trait `InferencePort { prepare, infer, lend_tool_results }` (`crates/ghostlight/src/controllers.rs:299-311`), routed by model-name prefix, longest claim wins (`sdk_inference.rs:732-757`, `controllers.rs:2454-2518`); three implementors, every one lowering from `CodexProviderRequest`: `CodexConnectorInferencePort` (the connector client), `SdkInferencePort` (`sidecar/claude-sdk/src/main.ts`, 517 lines, `@anthropic-ai/claude-agent-sdk` 0.3.261 over a msgpack pipe; one Claude Code subprocess per query; the request's tools registered as an in-process MCP server; returns usage, `total_cost_usd`, faults `RateLimited | BillingError | MaxBudgetUsd`; ambient login or setup-token), `LocalInferencePort` (OpenAI-compatible loopback POST, no credential, prefix `local/`). Dungeon no longer opens the connector lane; the live lane is local. Ghostlight's recorded direction (`state/map.yaml:438-443`): one standardized connector API, the same one Epiphany uses, and a generic OpenAI-compatible connector on it. The direction, mapped onto that code. "Shared machinery lifted out" is everything in CodexConnector that is not `provider_backend.rs`: the contract types and refusals, the envelope and framing, the client, the daemon loop (bind, caller keys, limits, replay, config), the Idunn health participant, and the two additions r3 asked for (`max_cost_usd` on the invocation, `cost_usd_estimate` on the receipt, the per-caller window spend ledger with refusal `Budget`). What each connector keeps is its backend: Codex keeps `provider_backend.rs` as it is; the Claude connector's backend is Ghostlight's SDK sidecar moved in and spawned by that daemon under its own user with the setup-token in a root-0600 `EnvironmentFile` (a native `claude -p` backend is a later cut); the OpenAI-compatible connector's backend is `LocalInferencePort`'s POST with a configured base URL and optional key. Callers (Ghostlight, her Persona organ) choose a connector by model prefix in their own config, so Ghostlight's longest-claim routing stays where it is and routes among connector clients instead of in-process ports; no router daemon stands in front of the connectors. Two things the direction does not say, put as sub-questions under `connector-owner`: where the lifted crate lives (a new repo, or `CultLib/packages`), and whether the shared request keeps the OpenAI-Responses shape under a provider-neutral name (an epoch bump of the contract ids, `connector-contract-untyped`) or is redesigned. The ruling `operator-provider-portable-connector` says "a typed connector daemon" singular; the direction says connectors plural sharing one contract. Read together: one contract, several daemons. That reading is recorded in the question rather than assumed. ### B13. The method repo and the body repo `GameCult/Eureka` on the forge: `LICENSE README.md SKILL.md docs references tools`, installed by checkout at `~/.claude/skills/eureka`; the charters move in under `charters-into-eureka-repo`. Its Epiphany references: `SKILL.md:3` ("the skill counterpart of Epiphany"), `:8-9` ("sits next to Epiphany, the running organism in `F:\Projects\Epiphany`"), `:146` (a call count scar; history), `:200` ("Eureka has no Persona"); `README.md:63, 86-87, 95` ("Epiphany owns the schemas (`epiphany-pipeline`) and Huginn owns..."); `references/campaign-state.md` (the type ids, correct as wire names); `references/faculty-philosophy-cut.md` and `tool-calling-cut.md` (dated comparisons; history); `references/epiphany-comparison-2026-09-15.md` (history). Huginn's workspace is the one Rust workspace that already talks to the mind, has the client crate, the deploy runbook and the release symlink on Yggdrasil. Question `body-repo-home` asks whether her Rust organs (waker, Persona organ, permit issuer) are crates in Huginn's workspace or a repo of their own; `method-repo-home` (fold the method into Epiphany) dies with its premise. ### B14. Doctrine citations of Epiphany (Life's sweep, nothing edited) | File and lines | Today | After the harvest | | --- | --- | --- | | `F:\Projects\CLAUDE.md` | No direct citation; points to the Persona standard doc. | Unchanged. | | `gamecult-ops/docs/persona-state-standard.md:7-9` | Schema path under `Epiphany\schemas\cultnet`. | Points to the schema's new home (H2): Huginn `schemas/cultnet/gamecult.persona_state.v0.schema.json`. | | same `:36-41` | `epiphany-persona-service` runs a separate native Persona Mind; `epiphany-agent-memory-store` removed; `.epiphany-run/` copy. | Deleted. Replaced by one sentence: the Persona organ of Eureka reads and writes the Huginn document (H6). | | same `:57-63` | "Huginn ... still unbuilt ... no agent should route Persona-state work to Huginn"; "raise it against VoidBot's implementation and the Epiphany schema". | Reversed by `operator-persona-in-mind`: Huginn is the canonical holder per instance once `huginn-persona-state` lands; VoidBot keeps projection and the migration source for repo Personas; "the Epiphany schema" becomes "the published schema in Huginn". This is `cut-doctrine-persona-in-huginn` r3 (cut 8). | | `~/.claude/agents/{eyes,hands,imagination,life,modeling,soul}.md:14` | "Self-improvement law (Epiphany `epiphany_doctrine.md`): ..." | "Self-improvement law (Eureka `doctrine/self-improvement.md`): ..." once H8 lands the file in the Eureka repo; the charters move into the same repo (`charters-into-eureka-repo`), so the citation becomes a relative path. | | `life.md:24`, `soul.md:48` | `epiphany_specialists.toml` at `71a5d6fb^`. | Stay as history: a commit-pinned citation into an archived repo still resolves. Add "(archived)" after the repo name. | | `hands.md:28` | The 75-binary build-bloat scar. | Stays as history; it is the scar that matters, not the repo. | | `~/.claude/doctrine/persona.md:3` | "serves VoidBot and Epiphany Persona work". | "serves VoidBot repo Personas and Eureka's Persona". | | `persona.md:13` | Self-improvement law citation. | As the charters' line 14. | | `~/.claude/CLAUDE.md:218, 222` (operator-owned; wording proposed only) | "named for Epiphany's continuity organ"; "Epiphany's Life also owns continuity, pressure, and resume-or-regather after re-entry." | Proposed: "named for the continuity organ of Epiphany, Eureka's archived predecessor"; and "That organ also owned continuity, pressure, and resume-or-regather after re-entry; the wider scope arrives when Huginn owns each instance's mind as typed state." | | `~/.claude/CLAUDE.md:31` | "not Epiphany lore" | Stays: it names the lore by its historical name, and `colossus.md` keeps the myth. | | Eureka `SKILL.md:3, 8-9` | counterpart of / sits next to Epiphany. | "Eureka is the organism: a Mind (Huginn), a faculty method (this skill) and a body (Huginn's organ crates). Epiphany, its predecessor, is archived." By PR (H8). | | Eureka `SKILL.md:200` | "Eureka has no Persona: Self is the operator-facing surface". | "The operator channel is this session. Eureka's Persona (the Mind's own mouth on Discord) is not the operator channel; a blocking question still goes to the operator here or by the notifier." By PR, with `skill-mind-self` (cut 7). | | Eureka `README.md:63, 86-87, 95` | Links Epiphany as the organism; "Epiphany owns the schemas". | "Huginn owns the schemas (`eureka-pipeline`)"; the comparison reference stays as a dated document. | | `~/.claude/doctrine/colossus.md:47, 51` | The Epiphany event as myth. | Stays. | | `gamecult-ops/inventory.md`, runbooks, scripts, `systemd/` (B3) | The host body of Epiphany. | Deleted or rewritten in `mind-self-wake` r4 (cut 9). | ### B15. The governance the Mind's stewardship is an embryo of: unchanged from r3 B17 GCLP decision paths, membership separate from login, work and care work, ledgers and decay, nothing pulling money unsupervised. The four attachments in the rationale stand with "Epiphany" read as Eureka. ## The harvest Order is the order of cuts; a later item may not land before an earlier one it names. "Consumer" is who reads it today; "home" is where it lives after. | # | What | Consumer today | Home after | Decides the home | Order | | --- | --- | --- | --- | --- | --- | | H1 | `epiphany-pipeline` leaf crate (B8) | Huginn (`huginn-mind`, `huginn-daemon`, `eureka-state`) | Huginn `crates/eureka-pipeline` (package and lib renamed; type ids unchanged), copied from Epiphany head `4006b14b` with the `leaf-key-bound` branch's change folded in or re-cut; `huginn-mind` takes a path dependency; the git edge dies | No fork (the only consumer is the home). `wire-names` decides the ids later, not this cut | 1 | | H2 | `schemas/cultnet/` (thirteen pipeline schemas, `index.json`, README) and `gamecult.persona_state.v0.schema.json`; `epiphany.work_organ_state.v0` dies unless Hands finds a reader | The leaf's derivation test; VoidBot zod types; the Persona standard doc; Huginn's planned validator | Huginn `schemas/cultnet/` (same cut as H1; the test path becomes `../../schemas/cultnet`); the standard doc re-points (B14) | No fork | 1 | | H3 | The unlanded leaf specs `cut-mind-authority.r1`, `cut-run-kind.r1`, `cut-leaf-key-bound.r1` | The mind | Re-admitted as r2 with repo `GameCult/Huginn`, base = the H1 landing commit; same content | No fork | 2 | | H4 | The resident Self (`epiphany-swarm`, `resident_self.rs`) as rules (B10) | Nothing live | `crates/eureka-wake` in the body repo: brake and dial read, queue minus live claims through `HuginnClient`, at most one Self-run start; no grant/lease state of its own | `self-waker`, `dial-home`, `body-repo-home` | 5 | | H5 | The Persona crossing and permit (`persona_discord_crossing.rs`, `persona_discord_permit.rs`, the permit binary; the two authority-map notes) | Bifrost's mouth (contract) | The Persona organ crate (H6) and its `eureka-persona-permit` binary; the notes under its `docs/` | `body-repo-home`, `wire-names` (what the signed request is called) | 6 | | H6 | The Persona turn: the Interpreter's typed output (speech + state notes, `persona_conversation.rs`), the feedback-delivery import, the delivery-request signing | Nothing live | `crates/eureka-persona`: one connector request per turn with an output schema; reads the Persona document and ended runs from Huginn, feedback deliveries from Bifrost's outbox; puts the Persona document under CAS; signs one delivery request | `persona-turn-runtime`, `connector-owner`, `body-repo-home` | 6 | | H7 | The model adapter (`epiphany-model-adapter`, `provider_transport.rs`) | Epiphany only | **Dies.** The connector contract is the lifted crate of B12; `cut-epiphany-connector-only.r1` is withdrawn | `connector-owner` (the lifted crate replaces it) | 4 | | H8 | `epiphany_doctrine.md` (text), the README's open-project prose, `faculty-workflow-lessons-2026-09-04.md`, the CLA/LICENSE question | The charters' line 14 cites the doctrine; the skill cites the lessons | Eureka repo: `doctrine/self-improvement.md` (the per-lane law paragraph and the heartbeat and swarm-boundary lines), README opening, `references/`; the charters land in the same repo | `charters-into-eureka-repo` (ruled); whether the CLA applies to Eureka is the operator's, asked in the cut report, not a fork here | 8 | | H9 | The mind's design record in `notes/` (`huginn-organ-cut.md` and the six `eureka-*`/postmortem notes) | Readers of Huginn's history | Huginn `docs/history/` verbatim, with a one-line provenance header | No fork | 1 (same cut as H1; prose only) | | H10 | Host state and tooling of the Epiphany body (B3) | Nothing | **Deleted**: units, release roots, Idunn targets and recipe, users `epiphany` and `epiphany-model`, state and config roots; gamecult-ops scripts, runbooks, units; inventory rewritten | `host-and-units` | 9 | | H11 | The GitHub repo | | **Archived** last: README pointer to Eureka and Huginn naming what moved and from which commit; final tag `archive-2026-10`; GitHub archive flag (operator action, read-only) | No fork; the operator flips the flag | 11 | What dies without moving, said plainly: `epiphany-core` except H5 (atlas, runtime spine, current-work ingestion, repository body observer, reasoning contexts, repo model documents, coordinator and its results, agent launch, substrate gate, packaged release, memory graph, surfaces, the state and release binaries), `epiphany-openai-runtime` (the native cognition stack and the Persona service binary), the model adapter, both tool crates, the four empty crates, `apps/`, the Codex-era prompts, the GUI and dogfood sandboxes, the whitepaper and investor documents (archived, not deleted), the host body. ## The model page One row per persistent kind this design adds or changes. Rows for the thirteen existing kinds are in `eureka-substrate-map.md`. | Kind | Identity (what names it) | Lifecycle (what happens over time) | Authority (who decides) | | --- | --- | --- | --- | | `ruling` with `authority: Mind` (`cut-mind-authority` r2, Huginn) | `:ruling: