This repository has been archived on 2026-10-29. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
Epiphany/notes/epiphany-current-algorithmic-map.md
2026-08-08 22:38:42 +01:00

118 KiB

Epiphany Current Algorithmic Map

Heartbeat pulse-artifact retention ownership

  • Owner: heartbeat Continuity owns retirement of its own closed pulse-NNNNNN artifact directories. Status display limits and Idunn process supervision own no deletion authority.
  • Inputs: the canonical heartbeat artifact root, direct pulse directory sequences, exact recursive file manifests, the latest cognition artifact reference, a recent-pulse count, and a bounded retirement batch size.
  • Outputs: a typed retention plan committed before deletion and a typed completion receipt after every planned directory is absent. Plans and receipts retain exact directory names, manifest roots, file counts, and byte counts without retaining private artifact bodies.
  • Derived state: the active artifact count is bounded by recent count plus one hysteresis batch. The default 256 recent pulses and 64-pulse batch keep at most 320 active directories between retention runs.
  • Forbidden writers: projection limits cannot masquerade as retention. Unknown directory names, symlinks, paths outside the canonical root, post-plan manifest changes, and the pulse containing the latest cognition artifact all fail closed before deletion.
  • Shared paths: explicit retain-artifacts and every resident heartbeat serve outcome call the same plan/reconcile primitive. A crash after plan commitment resumes that exact plan; already absent members are accepted, while surviving members must still match their planned manifests.
  • Cut line: the permanent one-directory-per-15-second growth path is removed. Process stdout/stderr logs remain a separate supervisor-owned rotation problem and are not deleted by heartbeat retention.
  • Verification layer: synthetic CultCache-backed tests prove hysteresis bounding and idempotence, changed-plan refusal with preservation, unknown-directory refusal before deletion, and protection of the latest cognition artifact. Live backlog reduction waits for exact packaging.

Runtime job and session closure ownership

  • Owner: the worker runtime terminalizes its own outer role job and inner model job. Continuity owns runtime-session completion after every job in that session is terminal.
  • Inputs: worker success, ordinary runtime error, timeout, and the session-local job set. Coordinator status is an observer of these typed documents, not a writer.
  • Outputs: exactly one terminal job result per job, a Completed session, and one deterministic session.completed runtime event sourced from Continuity.
  • Derived state: *Running, open-job count, and active-session count are projections. Adapter-status refreshes may change unrelated store bytes on restart and are not job authority.
  • Forbidden writers: coordinator restart/status code cannot synthesize worker results or pretend a session closed. A repair loop cannot hide a dead worker. New jobs cannot enter a completed session.
  • Shared paths: bounded and unbounded worker execution use the same result-sealing primitive; explicit session closure uses the same terminal-job predicate for coordinator, resident, and model-adapter sessions.
  • Cut line: sessions no longer remain permanently active merely because creation was implemented before completion. Closure refuses any queued, running, or review-waiting session-local job; exact closure replay is idempotent.
  • Verification layer: a byte-identical disposable copy of sealed v28 reproduced the dead Imagination job. Authenticated 55660d78 terminalized it as failed, restart could not create a second result, and the new Continuity primitive closed all four sessions from four active to zero while preserving sealed v28 unchanged.

Proposal frontier routeability invariant

Proposal Modeling admission and Self planning selection now share one boundary: an admitted frontier source_scope must be non-empty safe relative paths in strict lexicographic ascending order with no duplicates. Modeling may normalize proposal scope hints into that canonical form; it must not preserve arbitrary serialization order. runtime_repo_frontier_planning_eligibility projects the same predicate per active Imagination frontier, alongside challenge and dependency blockers, so operator status describes the exact selector reality.

Proposal Evolution also requires status=active. Mind acceptance is the proposal's admission decision; persisting it as merely proposed creates a dead document that Self cannot select and proposal Evolution cannot revise. The eligibility projection includes unresolved proposed Imagination frontier as a diagnostic candidate with statusValid=false, but only active frontier can be eligible. This projection observes the wound; admission prevents it.

Proposal Evolution also requires exact canonical routeable organ identity: Hands, Eyes, or Imagination. The field remains a string in the portable RepoModel, but Mind admission owns the executable subset and refuses lowercase, unknown, or merely display-shaped labels. Planning eligibility includes a case-mismatched Imagination-shaped legacy document only to project recommendedNextOrganValid=false; it never case-folds that document into authority. v25 proved why: lowercase imagination was admitted but invisible to Self's exact selector.

Owner: Mind admission owns whether proposal frontier state may enter the model. Self only selects admitted routeable state. source_scope is no longer assumed routeable merely because its individual paths are safe. Invalid ordering is rejected before mutation; no repair loop or selector exception may launder it.

Coordinator cold start and source-regather ownership

  • Owner: typed UserObjectiveIntake owns first objective/state creation. It is seed-only, atomic, idempotent for identical input, and refuses replacement.
  • Eyes owns source gathering. An accepted CRRC Regather judgment becomes RegatherManually, which Self maps to Research; the continuity judge does not recursively relaunch itself after its judgment is accepted.
  • Modeling owns Body mapping only after source inspection. Research, Modeling, and Verification share bounded repository read/Git tools; tool receipts are operator-safe evidence while direct thought stays sealed.
  • Mind owns admission. Provider JSON Schema is a formatting projection, not authority. Canonical worker-result parsing, exact launch Body-basis replay, and Mind review/admission decide whether a RepoModel patch exists.
  • The model may name additional evidence, but it does not own transport provenance. The OpenAI runtime adds the immutable request-chain reference to the typed role result before persistence. Mind still requires the admission review to bind that exact non-empty result evidence set.
  • Derived state: status, role boards, and coordinator decisions read one canonical typed role/reorient result path. Display synthesis cannot remember a finding that coordinator signals forget, or vice versa.
  • Forbidden writers cut: sibling-path local-Verse inference, fake checkpoint preparation, recursive reorientation after accepted regather, duplicate display/coordinator result readers, and JSON null treated as a state patch.
  • Failure lifecycle: failed and completed-unreviewable results require an explicit supersession receipt before relaunch. Exact repeat is idempotent; conflicting acceptance authority is refused.
  • Live shakedown evidence: the authenticated model runtime completed source-grounded Modeling passes with typed repository reads and emitted a reviewable Body-bound repoModelPatch. Admission remains the proof layer; prose summaries and successful model transport do not make the patch true.

Observation and bootstrap authority correction (2026-07-12)

  • Owner: diagnostics only project persisted CultMesh state; they never initialize it.
  • Bootstrap owns static policy, topology, schema, brake, and organ-contract declarations. It does not own daemon liveness or provider availability.
  • Daemons own heartbeat/status documents. Missing status produces no observed daemon row; declared targets remain separate and are never promoted to presence or ready by a reader or seeder.
  • The provenance-free v0 Odin advertisement, Eve surface, and daemon-tool families are quarantined legacy vocabulary. Live provider directories return no rows from them; missing provider state produces no synthetic row.
  • Forbidden writers removed in this pass: read-command calls to seed_epiphany_local_verse_context, loader fallback constructors, and bootstrap's default-ready daemon-status loop.
  • Next authority cut: requester commands may author intents, but Bifrost, GitHub, tool providers, Eve providers, and daemon lifecycle owners must author their own response receipts.

Declared topology versus observed presence (updated 2026-07-15)

  • Owner of declaration: explicit bootstrap persists seven faculty routes, desired private-Verse addresses, and daemon/Eve targets as configuration.
  • Owner of presence: a provider-authored daemon status/heartbeat is the only input that creates an observed daemon row.
  • Outputs keep the distinction in their names: declaredFacultyCount, declaredPrivateVerseRouteCount, declaredDaemonTargetCount, and observedDaemonCount.
  • Restart-policy sight may enumerate desired targets with daemonStatus=unobserved; that supports Idunn reconciliation but does not materialize a daemon.
  • Prompt context labels topology as declared routes and targets. It cannot imply those addresses are inhabited.
  • Forbidden substitutions: topology rows cannot become daemon or agent counts; daemon heartbeats cannot become agent counts; configured private-Verse ids cannot become active Verse counts.
  • Cut line: the synthetic unknown_daemon_status constructor is deleted. A fresh bootstrap has seven declared targets and zero observed daemons; one persisted provider status yields exactly one observed daemon.

Bifrost body-change request path (2026-07-12)

  • Owner: the calling Hands/requester owns the body-change intent.
  • Inputs: repository, branch, change summary, justification, changed paths, verification/review receipt references, authors, and credit subjects.
  • Output: one persisted gamecult.bifrost.body_change_publication_intent; command status is pending-bifrost.
  • Derived sight: requester-owned receipt-directory and publication surfaces show the pending intent and the absence of a provider response. There is no local Bifrost ledger or closure oracle.
  • Forbidden writers: the requester CLI no longer constructs or writes Bifrost acceptance, ledger attribution, GitHub publication, PR, commit, publication URL, or credit receipts.
  • Response owners: Bifrost may answer with its publication receipt; the GitHub publication adapter may answer only after real substrate evidence exists.
  • Negative proof: after request submission, latest intent is present while latest Bifrost publication and GitHub publication receipts are absent.
  • There is no Epiphany-local bifrost-ledger or accounting closure surface. Missing provider response remains missing with no local follow-up command. Provider closure requires a future authenticated provider ingress/admission witness; typed local document presence is insufficient.

Daemon tool request path (2026-07-12)

  • Owner: the requesting agent owns the invocation intent; the advertised host daemon owns the response receipt.
  • Input: a persisted capability plus requester identity, requester cluster, payload reference, and bounded reason/summary.
  • Output: one epiphany.cultmesh.daemon_tool_invocation_intent, status pending-provider, and the host daemon id as responseOwner.
  • Unknown host status does not block request queuing and is never promoted by the requester.
  • Forbidden writers: invoke-tool cannot accept or synthesize receipt id/status, result reference, or result summary; it no longer executes local readback functions and labels them daemon results.
  • Negative proof: request intent persists, latest provider receipt remains absent, and response-shaped CLI fields are refused.

Daemon lifecycle request and heartbeat paths (updated 2026-07-15)

  • Owners: Self/operator requests intervention; Idunn owns poke intent, command-attempt receipt, restart policy, and backoff; epiphany-cluster-daemon alone owns its provider heartbeat/status envelope.
  • Inputs: persisted provider status, the heartbeat observed before intervention, restart policy, scheduler staleness observation, and the real command result.
  • Outputs: immutable poke intent/receipt v1 events plus an atomically advanced chronological latest pointer. Exit zero yields awaiting-provider-heartbeat; command failure yields restart-failed.
  • Derived state: scheduler staleness, lifecycle attention, receipt-directory resolution, and Idunn backoff are observations of provider state and attempts. They are not provider status.
  • Forbidden writers: poke callers and the supervisor cannot assign provider status, operator action, or last_heartbeat_utc; command success cannot mint ready; stale status cannot be resolved by a heartbeat older than the completed attempt.
  • Shared paths: manual reconcile and scheduled reconciliation use the same attempt primitive. Both retain restart pressure until a provider-authored heartbeat causally newer than the completed attempt proves recovery.
  • Cut line: the supervisor's provider-status writer and synthetic heartbeat advancement are removed. Generated attempts use unique identities; exact retry is idempotent, identity collision is refused, and delayed replay cannot rewind latest.
  • Verification: the survival rehearsal preserves the provider envelope across two successful restart commands, observes two distinct awaiting receipts, then publishes a real provider heartbeat and proves receipt resolution plus failure-count reset.

Provider discovery and heartbeat authority (updated 2026-07-15)

  • Owner: epiphany-cluster-daemon owns only its liveness heartbeat/status envelope. No central process currently owns provider advertisement, Eve composition, or hosted-tool availability.
  • Inputs: heartbeat accepts persisted topology identity and daemon-local liveness evidence. Topology eve_surface_id is routing/address metadata only; it is not proof that a surface exists.
  • Outputs: heartbeat writes liveness only. Live Odin, Eve, and tool directories remain empty until a future provider-authored contract is admitted.
  • Derived state: topology, labels, expected routes, and test-only templates may describe stable addresses and legacy shape. They cannot become provider presence, composition content, supported actions, or executable capability.
  • Forbidden writers: generic bootstrap, heartbeat, query CLI, and central template builders cannot publish the provenance-free v0 Odin advertisement, Eve surface, or daemon-tool families. Live consumers ignore those families, and explicit bootstrap retires any stale rows of exactly those types.
  • Cut line: publish_epiphany_cultmesh_provider_state and the heartbeat call to it are deleted. The seven centrally synthesized surfaces and their tool claims are no longer live state.
  • Re-admission invariant: provider discovery returns only after an owning provider emits a provenance-bearing typed contract whose origin can be verified; actions additionally require a real dispatcher and receipt path.

Persona feedback and typed Imagination consideration boundary (updated 2026-07-18)

  • Eve is presentation only. Epiphany has no Eve connection intent or receipt document, writer, reader, prompt projection, query action, receipt-directory row, or tool claim. Presentation connectivity cannot admit feedback or become cognition authority.
  • Daemon-tool invocation requests likewise remain pending until the advertised host daemon or authenticated ingest boundary supplies the typed response. Local response construction/writing/validation is test-only; aggregate smoke and receipt-directory projection prove intent-present/receipt-missing instead of manufacturing host acceptance.
  • Idunn deployment and aftercare outcomes have no local production writer. The synthetic deployment-config family smoke and its green aggregate MVP-gate handoff are deleted; config audit/runbook remain pre-deployment surfaces, while typed Idunn readers await genuine daemon-authored ingest.
  • Bifrost artifact-acceptance and metrics requests remain open until actual Bifrost/Maintainer receipts are ingested. The stale response-closing request-family smokes, accounting bundle, wrapper mode, and aggregate green gate are deleted.
  • Repo-work readiness reports are sight only. The generic readiness-review approval command and writer are deleted because one caller supplied four unresolved reviewer labels. repo.readiness_review_request now assigns routing to Self, lists Maintainer/Soul/Mind/Bifrost as independent required reviewers, and names no readiness-approval owner; typed review readers await genuine multi-organ/provider evidence.
  • Interpreter Brief is preparation cargo authored by Imagination from accepted public pressure. It requests Mind interpretation and remains interpretation_admitted=false; it is not Mind-owned state until a genuine Mind path supplies and admits interpretation evidence.
  • Repo collaboration policy/topic files are proposals, not live social or renderer contracts. Imagination authors them, Persona owns discussion, Persona/Mind review policy, Mind admits repo policy, Bifrost owns publication, and requested public-room/Eve-surface identifiers remain unpublished until provider receipts exist. Epiphany does not own downstream Eve/TUI/GUI composition.
  • The deterministic repo.tool_capabilities and repo.eve_surface safe families are deleted. Expected tool ids and invented surface/row/lowering catalogs cannot substitute for host advertisements or provider-published composition graphs. Live paths are typed tool requests/host receipts, Odin discovery, authenticated Bifrost feedback delivery, and provider-owned publication.
  • repo.body_manifest is deleted. An unconsumed epiphany.toml that invents Body/Verse/Eve identity and capability hints is not observed runtime state or admitted birth configuration. Runtime state, repo birth receipts, and provider advertisements own those facts.
  • Doctrine update requests split authority: Imagination authors, Self routes, Maintainer reviews, Soul verifies, Mind admits doctrine state, and Hands mutates AGENTS.md under receipts. There is no Maintainer/Mind composite owner or OR gate.
  • Closure has no substring authority. Worklog, planning/checklist notes, managed/status sections, and task cards are explicitly presentation-only; closure relies on committed target/path/blob evidence instead of treating formatting text as Soul truth.
  • Deployment requests split Self routing from independent Maintainer/Soul/Mind/Bifrost review and Idunn-only execution. Maintainer review cannot impersonate Idunn deployment; only Idunn deployment and aftercare receipts prove outcomes.
  • PR requests split Self routing, Bifrost publication gating, Hands execution, and GitHub provider outcomes. GitHub receipt authorship does not grant publication-policy authority.
  • Artifact acceptance requests split Self routing, Maintainer acceptance decisions, and Bifrost accounting. Acceptance receipts and accounting ledger rows no longer claim one composite owner.
  • Metrics requests split Self routing, Bifrost accounting custody, and Maintainer review-load evidence. Spend/review receipts are observations and grant no spend or ledger authority.
  • repo.planning_brief is deleted. It contained no candidate work-item records and let copied global catalog/schema/closure constants self-attest as per-item planning and readiness evidence. The live preparation chain is consensus draft -> interpretation request -> objective draft -> Mind adoption.
  • There is no aggregate repo-swarm MVP gate. The former smoke manually aggregated fixture summaries into green rows and demoReady=true; it and its wrapper are deleted. Whole-organism readiness requires a live-fire path whose claimed consequences are observed at their owning boundaries.
  • Bifrost owns authenticated Persona-feedback admission. Its signed packet is feedback-only pressure, not an Eve connection, Persona command, objective, or work proposal.
  • Self owns an immutable Imagination consideration request binding one admitted feedback packet digest to one exact admitted Modeling revision/hash/receipt and one fixed question enum. Feedback prose is transported only as quoted evidence.
  • Imagination owns a proposal-only consideration candidate with suggest, hold, or terminal no_fit disposition. The candidate has no state patch, model patch, frontier candidate, Hands route, release, or deployment mouth.
  • A separate Self review request is required before a suggestion may enter Modeling review. It grants proposal-review authority only; it does not mutate the map or adopt work.
  • Eve and Persona render or discuss derived results. They do not own admission, cognition, result completion, or adoption. The former Eve-dependent feedback and synthetic consensus-receipt shapes are obsolete.

Public-proof submission boundary (2026-07-12)

  • Request source: an existing redacted repo_work_public_proof document is the complete pending publication cargo.
  • Consumer command: bifrost-public-proof selects that proof and reports pending-bifrost; it writes no new receipt.
  • Bifrost owner: ledger attribution, review and credit receipt binding, public destination, publication URL, publication status, and final receipt.
  • Forbidden writers: the caller-facing command rejects all Bifrost result fields and leaves publication coordinates null.
  • Negative check: absence of a pending proof fails without writing a publication receipt; response-shaped fields are rejected before mutation.

Bifrost accounting request boundaries (2026-07-12)

  • Artifact acceptance source: Mind-admitted repo.artifact_acceptance_request; caller output is pending Maintainer/Bifrost with null acceptance coordinates.
  • Metrics source: Mind-admitted repo.metrics_request; caller output is pending Bifrost/Maintainer with null accounting coordinates.
  • Forbidden artifact writers: caller cannot provide artifact/proof/review/ledger/receipt/status/accepted-by results.
  • Forbidden metrics writers: caller cannot provide accepted artifact, model spend, review load, credit, proof, summary, receipt, or status results.
  • Negative proof: missing requests fail without receipt mutation and response-shaped arguments fail before lookup or write.

Operator snapshot authority boundary (2026-07-12)

  • Owner: operator snapshot adapter owns only a bounded summary of an edge status artifact.
  • Runtime spine owns daemon-tool execution intent and receipt truth.
  • Forbidden projection: /tools/invocations JSON cannot be promoted into canonical daemon-tool schemas by snapshot import.
  • Output explicitly returns null tool intent/receipt fields and toolInvocationAuthority=runtime-spine-only.
  • Negative proof: forged accepted tool JSON produced a snapshot but no canonical intent or receipt.

Fixture store quarantine (2026-07-12)

  • epiphany-verse-query smoke owns synthetic contract fixtures only.
  • Its only writable body is .epiphany-smoke/verse-query-default/local-verse.ccmp with runtime verse-query-default-smoke.
  • Generic local Verse bootstrap owns policy, declared topology, initial brake, and organ contracts only. It does not publish Odin provider advertisements, Eve surfaces, or daemon-hosted tools. Those families require provider publication; discovery preserves their absence.
  • Bootstrap receives the authenticated repository Body domain explicitly and stamps that exact domain into every cluster declaration. Cluster topology no longer owns a compiled workstation path; seed commands fail closed when the Body domain is absent or is not a non-empty repo: domain. Stored topology is the only live source for downstream liveness, policy, Eve, and tool routing.
  • The generic Verse query CLI has no provider-advertisement preview or Odin publication command. Provider bodies must publish their own discovery state; central declared topology cannot be lowered into active/daemon-live compatibility presence.
  • epiphany-cluster-daemon owns heartbeat liveness only. Heartbeat/serve does not publish Odin advertisements, Eve surfaces, or hosted tools. The former daemon-ID-bounded central publisher is deleted.
  • Cluster daemons never bootstrap the local Verse and never load its full context. They require persisted topology, read narrow liveness, then write only their bounded heartbeat. Explicit operator bootstrap owns policy/topology/contract initialization.
  • epiphany-daemon-supervisor also requires explicit persisted bootstrap for every production lifecycle, policy, scheduler, runbook, audit, status, and control path. Only its two synthetic audit-smoke commands may initialize fixtures, and only beneath .epiphany-smoke.
  • In epiphany-verse-query, only explicit seed commands and the fixed quarantined smoke initialize local Verse state. Every operator/requester mutation requires persisted status and topology before writing its bounded brake, poke, tool, Eve, Bifrost, metrics, artifact, or feedback document.
  • Coordinator launch-context assembly also requires persisted status and topology. Rendering a worker prompt cannot initialize shared state. Its standalone smoke accepts no path arguments and writes only beneath .epiphany-smoke.
  • Bifrost publication/GitHub/public-proof/artifact/metrics response constructors are test-only. Production retains typed schemas and readers for provider-authored ingest, but no local shipped binary owns or writes those response documents.
  • Bulk seven-daemon ready construction/writing is also test-only. Production loaders enumerate topology keys without manufacturing status; only narrow single-daemon heartbeat/observation writers remain. Aggregate synthetic readiness exists solely inside the fixed Verse smoke body.
  • Topology-derived Odin advertisement, Eve surface, and tool-capability builders survive only as test fixtures for legacy v0 document shapes. Live consumers ignore provenance-free v0 rows, and explicit bootstrap retires them. Topology eve_surface_id remains address metadata, not availability evidence.
  • Generic bootstrap owns declarations and initial control state, not operator observation. The template-based operator-status writer and its writerless schema/context/prompt/reader family are deleted. Operator snapshots remain source-artifact-derived documents.
  • Agent-state SoA sync requires an existing bootstrapped Verse before mirroring the persisted agent store. SoA report is filesystem-pure on a missing store. Wrapper mode agent-state-soa explicitly composes sync then report; the report itself never refreshes canonical state.
  • Merely naming a CultMesh store does not create its body. Query, cluster-daemon, and daemon-supervisor parsers perform no filesystem writes; missing status or topology prerequisites preserve absence because CultCache pulling bypasses lock acquisition when the backing file is absent. Full context query refuses a nonexistent store. Explicit bootstrap or a real writer owns body creation; individual loaders do not carry duplicate absence compensators.
  • Store/runtime overrides fail before fixture seeding or receipt construction.
  • Negative proof: targeting state/local-verse.ccmp was rejected and its SHA-256 did not change.
  • Positive proof: the built-in quarantined smoke completes successfully and reports its quarantine coordinates.

Operator-run completion receipt boundary (2026-07-12)

  • Intent owner: operator orchestration writes run id, mode, roots, limits, and artifact coordinates before execution.
  • Completion evidence: matching latest intent plus a valid JSON result inside the canonical artifact root, modified at or after intent creation.
  • Receipt status is derived as completed; callers cannot submit status.
  • Forbidden evidence: missing, non-JSON, pre-intent, out-of-root, or mismatched-run artifacts.

Daemon-supervisor install authority boundary (2026-07-12)

  • Plan commands force non-execution and may only write planned artifacts/receipts.
  • Execute commands force execution intent and must pass the existing elevation gate before service-manager mutation.
  • Wrapper command identity matches the Rust command exactly; no hidden --execute-install switch selects reality.
  • Ambiguous install aliases are not accepted.
  • Negative proof: hostile plan flag cannot mutate; execute without elevation produces an explicit refusal receipt.

Standalone receipt fixture boundaries (2026-07-12)

  • Deployment-family fixture receipts live only in a disposable repo under <root>/.epiphany-smoke.
  • Weksa fixture receipts live only at .epiphany-smoke/weksa-interlingua/local-verse.ccmp.
  • Neither smoke accepts a caller-selected receipt store.
  • Redirect arguments fail before synthetic receipt construction.

This is the source-grounded map of the live machine. Historical route and bridge anatomy belongs in git history and evidence ledgers, not here.

Objective

Epiphany is a native typed organism. Persistent Mind, coordinator policy, worker lifecycle, organ receipts, prompt context, operator surfaces, and Verse publication are owned by Epiphany Rust/CultCache/CultMesh/CultNet organs. Vendored Codex retains Codex-native behavior and the OpenAI-compatible authentication/model-transport reliquary. It owns no Epiphany state, prompt, scheduler, route, notification, or interface contract.

Authority Map

Owner Inputs Outputs Invariant
epiphany-state-model typed state fields EpiphanyThreadState and prompt projection State is typed; rendering is not authority.
coordinator_state_transaction.rs expected state, next state, typed companion envelopes one atomic canonical-state transaction Sole production writer of THREAD_STATE_KEY; companions cannot impersonate state.
coordinator_state.rs current state plus validated ordinary update proposed next state and transaction request Owns update meaning, not persistence.
coordinator_launch.rs validated launch plan, state, runtime envelopes state-plus-launch transaction request Launch constructs runtime companions; the transaction owner commits them.
coordinator_acceptance.rs reviewed finding, Mind review, commit receipt state-plus-Mind-witness transaction request Acceptance owns admission meaning; the transaction owner commits its witnesses.
thread_state_store.rs typed state entry low-level CultCache codec/read access Substrate, not policy; it exposes no production writer.
coordinator_service.rs state/runtime store paths and typed commands state update, launch, accept, interrupt results Facade routes typed work; it contains no policy or protocol mapping.
surfaces/* native state, runtime snapshots, pressure/freshness inputs scene, jobs, roles, planning, context, graph, CRRC, coordinator recommendations Read surfaces derive; they do not mutate.
runtime_spine.rs typed launch/result/receipt documents CultCache runtime records Runtime lifecycle and evidence are durable typed documents.
mind_gateway.rs and coordinator acceptance worker findings and proposed patches review, rejection, or state-commit receipts Worker thought cannot write Mind directly.
substrate_gate.rs bounded access intent scoped access grant/refusal Repository access and state admission are separate authorities.
eyes_gateway.rs inspected source under a grant evidence review/packet/refusal Looked-at truth carries provenance.
hands_gateway.rs approved action intent patch/command/commit/PR receipts Consequence is bounded, attributable, and reviewable.
soul_gateway.rs claimed consequence plus evidence verdict/refusal receipt Work is not true merely because it ran.
continuity_gateway.rs rupture/checkpoint/recovery facts continuity receipts Survival state is explicit, not transcript residue.
heartbeat_state.rs and daemon binaries durable schedule/liveness policy pulses, launch pressure, sleep/rumination state Scheduling is physiology, not project truth.
cultmesh_integration.rs and epiphany-verse-query typed local documents private/local/public Verse projections Visibility never creates authority or declassifies private state.
Persona loop state projection, stimulus, semantic recall natural speech plus interpreted candidate actions Imagination projects; Persona speaks; Mind interprets.
vendored Codex Codex sessions and OpenAI-compatible auth/model transport Codex behavior and model transport No Epiphany protocol or durable Epiphany state crosses this boundary.

Primary State Flow

flowchart LR
    I["Typed intent or worker finding"] --> G["Mind gateway review"]
    G -->|reject| R["Typed rejection receipt"]
    G -->|admit| V["State validation"]
    V --> C["Single coordinator commit path"]
    C --> S["Native thread-state CultCache"]
    S --> P["Derived native surfaces"]
    P --> O["Coordinator / operator / Eve projections"]

coordinator_state_transaction::{open_coordinator_state_transaction, commit_coordinator_state_transaction} is the single persistence owner. Ordinary updates, launch transactions, and accepted findings construct their domain-specific next state or companion documents, then submit them to that owner. It rejects stale expected state, refuses companion envelopes that target the canonical key, and commits state plus companions in one prepared batch. thread_state_store.rs retains typed codec/read access only; its production raw writers and their public exports are deleted. A source guard rejects any second production THREAD_STATE_KEY writer. EpiphanyCoordinatorService is the narrow caller-facing facade.

Forbidden writers:

  • worker result payloads;
  • operator display JSON;
  • Codex rollouts or Codex thread objects;
  • derived scene/coordinator/context projections;
  • heartbeat telemetry;
  • CultMesh mirrors and public Verse documents.

Worker And Receipt Flow

flowchart LR
    C["Self / coordinator"] --> L["Typed worker launch request"]
    L --> RS["Runtime spine"]
    RS --> M["Model runtime"]
    M --> F["Typed role or reorient finding"]
    F --> MG["Mind review"]
    MG --> SC["State commit receipt"]
    SC --> S["Native thread state"]

runtime_spine.rs registers and persists worker launch requests, worker results, Mind reviews, Mind commit receipts, Eyes packets, Substrate Gate grants, Hands consequence receipts, Soul verdicts, Continuity receipts, and coordinator run receipts. EpiphanyCoordinatorService now accepts one store path for canonical state and its atomic runtime/witness companions. The native status mouth exposes the same boundary as one --store argument. Document families remain typed and separately owned inside the cache; filesystem path plurality no longer pretends to be an authority boundary.

Hands → Soul → Modeling Loop

  1. Self emits a bounded Hands gate with requested paths and required receipts.
  2. Substrate Gate records the access grant.
  3. Hands records intent/review plus patch, command, and commit receipts.
  4. coordinator_launch_context.rs builds sealed work-loop telemetry from that receipt chain for Soul.
  5. Soul emits a verdict receipt against the actual consequence.
  6. Modeling receives the verified consequence and proposes a map/state patch.
  7. coordinator_acceptance.rs commits an admitted proposal with its Mind review/commit witnesses before Self routes another Hands turn.

The repo-work scheduler obeys the same order. After a branch-local execute receipt it stops at await-modeling; it cannot invoke closure or manufacture Modeling/Mind evidence. epiphany-work close requires explicit model authorship, model reference, verdict, and finding before it can admit a map. Deterministic checks remain Soul evidence, not a substitute for Modeling. The verified consequence now crosses an explicit epiphany.modeling.repo_work_request.v0 boundary authored by Self. The request is immutable, references the passing Soul receipt, commit, and changed paths, and grants Modeling interpretation authority without granting Self authority to write the result. A Modeling finding is refused unless it answers that exact request and matches its verified consequence. The current close command writes both phase documents from explicit CLI cargo; scheduler launch and asynchronous result collection remain the next cut.

Soul verification is now an explicit phase of the shared closure pipeline. epiphany-work verify and the first post-execution scheduler pulse run only that phase: deterministic verification, immutable Soul verdict, and immutable Self-to-Modeling request. Modeling absence or a non-passing Modeling verdict can no longer make Soul report failure. The partial closure artifact is status=awaiting-modeling; overview and later scheduler pulses preserve that gate rather than mistaking file existence for Mind admission. The scheduler source contains neither the Modeling finding writer nor map admission.

Repo work now has a native third worker launch kind beside generic role and reorientation work: repo-work-modeling. It runs through the existing epiphany-openai-runtime, carries the immutable request plus the bounded Soul-verified commit diff, and requires epiphany.worker.repo_work_modeling_result.v0. The runtime—not Self—converts model output directly into the canonical RepoWorkModelingFinding. Scheduler pulses launch one detached runtime job, wait without duplication, consume only the typed finding, and then resume the existing immutable Mind/map admission. A non-passing finding is immutable and stops for reviewed revision rather than being overwritten or silently retried.

The former direct CLI writer is cut. epiphany-work close --model-authored ... may no longer create a Modeling finding; closure can only reread the canonical runtime document. The obsolete direct-CLI closure smoke was deleted. A live negative probe returned exit 1 for forged passing CLI cargo while leaving the typed request awaiting its real Modeling worker.

Detached worker physiology is now Idunn-owned. epiphany-work opens the typed runtime job and invokes epiphany-daemon-supervisor service-launch; it contains no child-process spawn. The supervisor launches the existing model runtime, owns Windows hidden-process behavior, redirects stdout/stderr to explicit artifacts, and publishes an epiphany.cultmesh.daemon_service_lifecycle_receipt.v0 containing service and process identity. Self receives that receipt ID as routing evidence only. Live item idunn-owned-modeling crossed this boundary and reached the Bifrost gate.

The current Modeling request is owned by epiphany.modeling.repo_work_route.v0, not the filesystem closure projection. Generation zero lands atomically with its Soul-backed request. A later generation can advance only through advance_repo_work_modeling_route: the current finding must exist and be non-passing, the new request must preserve item/Soul/commit/paths, and a Mind acceptance must grant only repoWork.modelingRoute. Request, Mind review, and stable route pointer commit in one CultCache batch; old request/finding documents remain immutable. epiphany-work revise-modeling --review-ref ... --rationale ... is the explicit review mouth. Scheduler job IDs include the route generation and derive the stable route key from the item, so neither close JSON nor an old completed job can select current work.

Before any Modeling runtime job is opened, the exact consumer executable runs preflight against the actual runtime store. Its own schema registry must read the store and advertise the required route, request, finding, and worker-launch types. Preflight hashes both executable bytes and the ordered supported schema catalog. Idunn refuses a typed launch without the passing schema flag, executable SHA-256, schema-catalog SHA-256, witness ID, and required document list; all are persisted in the daemon service lifecycle receipt. The preflight ID is correctly a witness, not a fake independent receipt. Preflight precedes open_runtime_spine_heartbeat_job, so stale consumers leave no queued corpse.

The accepted interpretation is persisted as epiphany.modeling.repo_work_finding.v0; it references the passing Soul verdict, commit, and changed paths. Mind rereads that typed receipt and the admitted repo map plus CultMesh projection carry its receipt ID.

The canonical repo-work map entry is epiphany.repo_work.map_entry.v0 in the same runtime CultCache. commit_repo_work_map_admission validates it against the persisted Modeling finding, then publishes the map entry, Mind review, and Mind commit in one prepared batch. The former bespoke .epiphany/state/repo-work-map.msgpack owner is deleted. CultMesh remains a projection after admission and cannot repair or override the canonical entry.

Closure phase documents are immutable by stable receipt ID. An identical retry reuses the existing Soul verdict and Modeling finding, rereads an already admitted Mind/map batch, and regenerates only operator/CultMesh projections. Conflicting same-ID Soul, Modeling, or map cargo is refused; no reconciliation loop may overwrite the earlier truth.

Manual edits and programmatic actions converge at the same receipt and Mind admission boundaries. A later action cannot retroactively make an unrecorded consequence valid.

Read And Recommendation Flow

epiphany-mvp-status reads the unified native coordinator store. It derives:

  • scene via surfaces/scene.rs;
  • pressure via surfaces/pressure.rs;
  • freshness via surfaces/freshness.rs;
  • jobs via surfaces/jobs.rs;
  • role board via surfaces/role_board.rs;
  • planning via surfaces/planning.rs;
  • reorientation via surfaces/reorient.rs;
  • CRRC via surfaces/crrc.rs;
  • coordinator status via surfaces/coordinator.rs.

epiphany-mvp-coordinator consumes that native status shape. Requested Hands paths come from the scene checkpoint/frontier. Revision comes from /scene/scene/revision. There is no Codex read.thread.epiphanyState fallback.

Persona Flow

flowchart LR
    T["Typed Persona state + visible stimulus"] --> PR["Imagination Projector"]
    PR --> PE["Persona turn"]
    PE --> IN["Mind Interpreter"]
    IN --> CA["Candidate actions / memory proposals"]
    CA --> G["Review and external authority gates"]

Semantic memory recall is a bounded context input, not a state writer. Outside world actions pass through Bifrost identity/governance and Heimdall capability proofs. Persona speech audits are typed CultMesh witnesses; public speech does not expose private worker or operator state.

Heartbeat And Daemon Physiology

heartbeat_state.rs, epiphany-heartbeat-store, epiphany-daemon-supervisor, and epiphany-cluster-daemon own scheduling and liveness. A lane is not relaunched while its prior turn is active. Cooldown begins after completion. Idle physiology may ruminate, distill memory, or dream without claiming project-state authority.

Idunn owns daemon survival. Self and Downstream consumers may inspect and recommend; they do not become alternate daemon keepers.

Verse And Interface Projection

CultMesh is the preferred local typed interface over CultCache/CultNet.

  • epiphany-internal: private thoughts, reviews, receipts, and local organ coordination;
  • gamecult-local: trusted operator-safe GameCult sharing;
  • epiphany-global: public dreams and Persona/public discussion documents.

Eve/CultUI surfaces lower typed CultMesh composition/state. Renderers and wrappers do not own the projected truth.

Codex Boundary

The following are structurally absent:

  • thread/epiphany/* requests and notifications;
  • ThreadEpiphany* protocol DTOs and generated bindings;
  • Thread.epiphanyState in Codex app-server payloads;
  • Epiphany rollout migration or replay;
  • app-server phase-6 Epiphany smokes;
  • Codex-backed MVP status/interruption;
  • epiphany-codex-bridge.

Native coordinator/status projections emit state, not the deleted Codex Thread.epiphanyState spelling. Source guards reject that compatibility field and reject the old two-store status flags.

Codex app-server protocol has no dependency on epiphany-state-model. App-server has no Epiphany state-model/core/bridge dependency. Negative source checks in native launch/coordinator code reject renewed Codex route authority.

Verification Layers

Claim Evidence layer
State mutation law state_update.rs and coordinator-state unit tests
Worker/Mind admission runtime-spine and coordinator-acceptance tests
Read-only derived surfaces focused surfaces/* tests
Native status/interrupt epiphany-mvp-status tests and executable smoke paths
Hands/Soul loop Hands receipt tests plus coordinator launch-context tests
Protocol starvation source scans, app-server compile, generated-schema equivalence
Verse privacy/authority CultMesh/Verse focused smokes and typed receipt readbacks
Public crossings Persona mouth contract smokes: fail-closed eligibility, single-crossing receipt binding, and private-state seals; no provider-readiness projection

Persona mouth / provider-readiness boundary

Owner: the participating Bifrost/provider boundary owns the consequence of a public crossing. Epiphany owns only Persona speech eligibility and artifact binding.

Inputs: one eligible Discord, Reddit, or named future-surface request plus the configured actuator coordinates and target-shaped identity/capability references.

Outputs: one validated transport/request receipt bound to that one speech/request artifact.

Derived state: the receipt is artifact-local evidence of the named consequence. It does not derive provider inventory, liveness, capability, readiness, publication, or future operability. Missing evidence remains unknown.

Forbidden writers: MVP status, wrapper summaries, fixture aggregators, sibling-path/executable probes, subprocess exit status, parseable JSON, and caller-supplied booleans cannot write provider readiness.

Shared paths: Discord, Reddit, and future-surface mouths all use the same fail-closed eligibility-to-receipt boundary, but each single-mouth smoke proves only its own crossing. No cross-mouth aggregate remains.

Deletion line: remove the sibling advertisement subprocess projection, both aggregate smoke binaries, aggregate output fields, and status/wrapper presentation. Retain only the scoped mouth consequence receipts.

Repo-work map admission is a canonical generation-bound transaction. A map entry names its RepoWorkModelingRoute and generation; the runtime spine loads that route and admits only a passing immutable finding selected by the route's current request. CLI closure is a caller of this invariant, not its owner. Non-passing findings and stale generations therefore cannot become durable Mind state even through a forged-looking admission call.

The model runtime has a deterministic generation-retry proof at epiphany-openai-runtime/src/lib.rs: both findings pass through the production assistant-result parser and runtime-owned finding writer. Generation zero is non-passing, Mind alone advances the route, generation one is passing and admitted, and a stale generation-zero admission is refused. This proves typed handoff and ownership without provider/network variance. The remaining smoke boundary is process composition through epiphany-work revise-modeling, the scheduler's consumer preflight, and Idunn's child lifecycle receipt.

Scheduler dry-run is now an authority projection rather than a vague promise. When a current typed Modeling request has no finding or job, its advancedResult names the current route, generation, request, generation-bound job id, required preflight, and Idunn lifecycle ownership without opening a job or spawning a process. A disposable authority test drives the production revision mouth and scheduler and proves generation one is selected. The final process proof must compare this projection with a real preflighted Idunn launch receipt; it must not add a fake production runtime mode.

The physical comparison passes. A real generation-one scheduler pulse matched the deterministic route/request/job projection, consumer preflight fingerprinted the executable and compiled schema catalog, Idunn persisted the launch lifecycle receipt, and the detached model runtime completed a passing typed finding with empty stderr. A later scheduler dry-run saw that finding as admit-modeling; it did not relaunch generation zero. This closes the generation-retry authority path. Re-enter through a source-grounded Perfect Machine audit rather than adding more closure machinery.

Current Cut Line

Keep:

  • native typed state and runtime stores;
  • explicit organ gates and receipts;
  • native coordinator/status surfaces;
  • CultMesh/CultNet/Eve projection;
  • Codex-compatible auth/model transport where still required.

Cut or correct next:

  • current plans and handoff prose that still describe deleted Codex routes or bridge files as live mechanisms;
  • wrapper arguments named for Codex when they no longer cross a Codex boundary;
  • compatibility-shaped JSON field names inside native-only operator artifacts when no external contract requires them;
  • misleading state/runtime store path names;
  • any remaining full-context serializer or summary that duplicates typed owner state instead of projecting it narrowly.

Native Heartbeat Service Boundary

The refreshed Perfect Machine audit selects runtime physiology as the next organ boundary. epiphany-heartbeat-store serve now owns a native interval loop around the existing run_void_routine_store primitive. It writes one iteration directory per pulse, emits only a compact pulse receipt containing artifact identity and success, supports bounded clean shutdown through --max-iterations, and contains no child-process spawn or second state writer. Heartbeat owns pulse timing; the next cut is to launch this binary through Idunn and prove restart/resume, swarm-brake observability, and lifecycle readback before demoting the PowerShell rumination vigil. That cut is now proven. An engaged brake produced two compact refused pulses without terminating serve; releasing it let the same persisted store complete a routine. Idunn then launched two pulses and a separate one-pulse restart from that store with empty stderr and lifecycle receipts. The attached PowerShell vigil is deleted. The remaining service boundary is durable Idunn policy and operator readback: advertise/configure the heartbeat service through typed daemon state so restart intent survives beyond one explicit service-launch. Source inspection corrected the proposed owner: standing daemon restart policy requires a topology daemon and liveness status, while heartbeat is an Idunn-managed child service. The durable owner must therefore be a typed managed-service desired-state document keyed by service id. It delegates all starts to the existing service lifecycle primitive and must not invent an epiphany-daemon-heartbeat topology identity. The typed desired-state surface is now implemented as epiphany.cultmesh.managed_service_policy.v0, persisted at a service-id key. epiphany-daemon-supervisor managed-service-policy writes command, args, cwd, enabled/restart/backoff intent, sealed log refs, and the latest lifecycle witness; managed-service-read projects desired state plus latestLifecycle. It deliberately reports process observation as unknown until a real reconcile probe exists, so an old launch receipt cannot claim the service is alive. That probe now exists. managed-service-reconcile reads only the service policy and lifecycle history, observes the latest PID through the native platform process API, applies enabled/restart-mode/cooldown decisions, and delegates a restart to service_launch. Launch receipt ids now carry attempt time, so restarts preserve history. Live root C:\Users\Meta\AppData\Local\Temp\epiphany-managed-reconcile-8e3d7cc5fe0b4c5fa38b18b3d00cea0c proved restart receipt daemon-service-lifecycle-receipt-idunn-managed-heartbeat-launch-1783858125893 and PID 19736 were observed alive after the prior process was killed. Next fold this reconcile into Idunn's own serve loop and cut the full-context Verse load from service launch. Both cuts are landed. Service plan/launch now load only the typed swarm brake and rely on their own typed writers to open/register the store; they do not reseed or serialize the local Verse. managed-service-serve is a distinct Idunn loop from standing-daemon serve, so child service desired state is not blocked by absent topology restart policies. Live root C:\Users\Meta\AppData\Local\Temp\epiphany-idunn-unattended-3394ecfaa03f41d8935f9fb70411ca75 proved PID 44276 was observed alive without duplication, then after forced death the next pulse launched PID 40532 under unique receipt daemon-service-lifecycle-receipt-idunn-managed-heartbeat-launch-1783859054234. The next boundary is provider-owned Eve sight over managed service desired/observed state. That first sight boundary is now implemented. observe_native_process moved from the supervisor binary into a shared narrow core organ. Query aliases managed-services and idunn-services join typed service policy with latest lifecycle history and native observation, then read only the compact heartbeat serve pulse line from the sealed stdout artifact. Live row PID 25236 transitioned from READY/alive to ATTN/dead while retaining pulse completed, iteration 1, and lifecycle receipt daemon-service-lifecycle-receipt-idunn-managed-heartbeat-launch-1783859373793. No command args or routine payloads are projected. Next merge these rows into the main provider-owned Eve composition rather than keeping a specialist query only.

Semantic Projector Executor Authority

Canonical Mind and Modeling admission own projection demand. Their transaction writes the exact semantic-projection obligation beside the canonical source head; neither Idunn nor the projector may invent that demand. Idunn owns the decision to assign an executor or fence an abandoned executor. The projector owns only the claim-bound Qdrant mutation, post-write observation, attempt terminalization, and exact success receipt.

The execution chain is now:

canonical obligation -> Idunn acquisition CAS -> consumed executor grant + running claim/attempt -> epoch-isolated Qdrant synchronization -> canonical authority reauthentication -> terminal claim/attempt + exact receipt CAS.

Acquisition binds scope, obligation, executor identity and incarnation, purpose, Idunn incarnation, predecessor claim, and resulting claim epoch in one consumed typed grant. execute cannot reopen an exact succeeded claim; repair requires that exact predecessor. The execution CLI accepts a claim id, not an executor label, and authenticates the consumed authority behind the claim before touching Qdrant. Acquisition reauthenticates the complete sealed canonical input and carries its authority envelopes through the same CAS, so a persisted historical obligation cannot reopen an advanced source head.

Running-claim recovery reloads the exact Idunn poke intent/receipt and a provider-authored immutable heartbeat event from CultMesh. It requires an awaiting-provider-heartbeat lifecycle result followed by a newer ready heartbeat for the replacement provider incarnation, hashes those source envelopes, requires the heartbeat to name the exact restart receipt as its startup cause, and consumes a typed recovery authorization in the same CAS that fails the abandoned attempt and advances the claim epoch. The old executor can thereafter write only its physically isolated abandoned Qdrant namespace and cannot terminalize the active CultCache claim.

Projection health, elapsed time, process status, command exit, Qdrant counts, CultMesh mirrors, Eve, and swarm overview remain derived sight. They cannot create an obligation, grant, claim, attempt, success receipt, recovery, or query admission. Initial execution, retry, repair, and recovered execution all use the same claim-authenticating execution primitive; only acquisition and recovery differ in how Idunn establishes the claim authority.

Verification covers concurrent acquisition with one winner and no issued litter, predecessor/epoch ordering, purpose separation, claim-authority authentication, evidence field substitution, lifecycle/heartbeat causal ordering, recovery single use, and the inability of the recovery command to execute projection work itself.

The packaged workstation body now contains the single projector owner, Idunn supervisor, and semantic query verifier. Task Scheduler owns current-user after-login presence of the foreground Idunn reconciler; the reserved typed policy owns the exact projector launch shape; Idunn seals the launch receipt; and the projector authenticates that receipt before taking the host-wide canonical-store-pair singleton. gamecult-ops separately owns the foreground Yggdrasil tunnel that exposes Qdrant on workstation loopback. Canonical store and Qdrant placement remain one topology; dual projectors are forbidden.

Provider correlation is derived sight. The service-status projection reports provider-correlated or provider-degraded, never semantic readiness. Query admission authenticates the newest exact obligation/current/success chain and alone owns readiness. Deployment proof uses the packaged verifier with explicit EPIPHANY_QDRANT_URL and EPIPHANY_OLLAMA_BASE_URL; both Mind and Modeling queries have returned semantic ranking under those explicit coordinates.

Stopping the scheduled reconciler does not kill its detached projector child. Process ancestry is therefore current observation, not durable ownership, and a task restart can reuse an already-running child. The missing proof is a real operator-approved reboot/logon cycle that observes both tasks restored, the tunnel ports live, a fresh post-boot reconciler -> exactly-one-projector chain, a new launch-correlated provider heartbeat, and semantic ranking from both packaged queries. This proves after-login physiology only. Reboot is outside agent authority until the operator grants that exact host-wide action.

Coordinator action authority and smoke boundary (2026-07-15)

The production coordinator now derives one path: typed status/evidence -> coordinator action -> shared action arm -> optional Hands gate. Typed status and accepted evidence own action selection; Hands/Substrate review owns permission. Current typed thread state, accepted role results, and review evidence are inputs. The action, run receipt, and optional Hands gate are outputs. Smoke fixtures and scenario controls are derived verification state.

Production callers, wrappers, fixture flags, and smoke helpers are forbidden writers of action, canAutoRun, review requirements, bootstrap state, and Hands permission. The seven former production fixture flags and their override/helper paths are deleted. The dedicated smoke creates fixtures only under .epiphany-smoke/mvp-coordinator, then exercises the shared typed paths; it rejects attempts to reintroduce those flags.

Future audit frontier, not established anatomy: sibling Bifrost subprocess JSON used by readiness needs a focused identity/schema/provenance audit before any cut or confirmed finding.

Freshness -> reorientation authority (2026-07-15)

canonical retrieval state -----------------------> retrieval judgment --+
legacy graph checkpoint + churn + frontier -----> legacy graph judgment -+--> reorientation decision --> CRRC/coordinator/launch
positive watcher changes ------------------------> watcher judgment -----+
durable investigation checkpoint ---------------------------------------+

derive_freshness owns the first three judgments. Retrieval Ready becomes Clean only with an empty dirty-path set; otherwise it derives Stale. The legacy thread graph can prove Stale from explicit frontier pressure, but cannot prove Clean/Ready because it has no legal Modeling writer and cannot see canonical RepoModel admission. Missing authority stays Missing/Unknown. Watcher silence stays Unavailable/Unknown because no continuity receipt exists; Changed is positive evidence. surfaces/jobs.rs consumes the same graph judgment for remap work.

recommend_reorientation alone owns Resume/Regather. Resume requires a resume-ready investigation checkpoint, retrieval Clean, graph Clean, and a watcher that is Clean or Unknown. Any retrieval/graph non-clean value or watcher Dirty/Stale/Changed forces Regather. Path matches, status labels, worker-launch documents, coordinator rows, and CRRC recommendations are derived consumers and forbidden decision writers.

Canonical RepoModel is the admitted map, not the repository Body. Its exact revision/hash and Mind-issued RepoModelAdmissionReceipt prove map identity only. Future Ready additionally requires a nervous-system-owned, continuity- bearing Body observation and retrieval coverage bound to the same source generation; Mind derives readiness from that exact join. Legacy graph checkpoints retain only checkpoint identity and frontier content; churn retains understanding and diff pressure. Neither can publish graph freshness or a graph revision. Generic thread patches, watcher silence, snapshot source metadata, and unrelated thread revisions are forbidden readiness writers. Until every authority is present and current, Unknown is the truthful result.

Repository Body observation substrate (2026-07-15)

repository_body_observer.rs owns bounded git_worktree observation. A separate bind command consumes the existing validated runtime swarm binding and pins a caller-supplied workspace ID, exact runtime/swarm/source-identity hash, canonical Git root, object format, scope, and ignore policy; observe cannot mint identity. Two disposable-index read-tree/git add --all -- ./ write-tree scans must agree. CultCache MessagePack persists immutable generations and an exact-CAS current head; unchanged raw manifest preserves the generation. The observer makes no historical continuity claim and has no Ready field. Sparse checkout fails closed, submodules are gitlink-only, and RepoModel/ retrieval/scheduler/Mind integration is absent. The CultCache store must remain outside the observed worktree so observer writes cannot become observed input. Machine-global excludes are disabled during observation. Only accepted stable observations persist; failed/unstable attempts return errors and advance no head. HEAD absence counts as unborn only when a symbolic ref is proven absent. Every Git subprocess strips ambient repository, worktree, object, ref, namespace, index, shallow/graft, and injected-config environment authority. The index owns ignore-aware UTF-8 path, Git mode, and gitlink enumeration; its clean-filtered tree OID is auxiliary. Raw regular-file bytes and lengths, or non-followed symlink-target bytes, feed ordered typed entries. A domain-separated SHA-256 root over workspace, scope policy, and those entries is authoritative Body identity. Manifest, observation, and manifest-root head land in one CAS. Gitlinks remain nonrecursive. Unsafe or unrepresentable paths fail closed.

The bind rite also writes one immutable runtime-side RuntimeRepositoryBodyStoreBinding. It names the canonical external Body-store locator and hashes the exact Body binding while repeating runtime, swarm, and workspace identity. Every read reopens the Body store and validates that chain. One runtime cannot silently switch between Body stores; relocation or replacement requires a future explicit migration receipt.

Every coordinator-owned Modeling launch now obtains a typed RepositoryBodyObservationBasis before the worker thinks. The immutable launch binds runtime/swarm/workspace/scope, Body-binding hash, observation generation/id/root, and scan interval. Modeling output contract v3 requires the worker-authored exact echo; result ingress rejects missing or substituted basis. Non-Modeling launches and results cannot carry it. Mind review v1 and admission receipt v5 preserve the same basis. Admission validates exact launch/result/review equality and the referenced immutable historical Body artifacts before copying it into the CAS receipt. It does not resample current Body. Direct Mind adoption and legacy migration remain explicitly ungrounded.

Mind readiness join boundary (2026-07-15)

A truthful whole-repository readiness join does not yet exist. Body-grounded RepoModel admission now exists; Mind must own a derived RepositoryReadinessProjection; Body observation, Modeling, retrieval, semantic projection, schedulers, watchers, jobs, and UI are forbidden writers. Its required inputs are a fresh validated Body observation, the canonical RepoModel plus its exact Mind admission receipt carrying its Body basis, the authenticated Modeling semantic projection receipt for that admitted model, and exact workspace-retrieval coverage bound to the same Body manifest and a named inclusion policy. Derivation must retry if any participating head advances.

The join is a race-bounded operation: observe Body root R1, validate every exact artifact against R1, then observe again and require R2=R1 before emitting an observed-ready-at receipt whose truth interval ends at the second scan. Later reads must revalidate rather than present it as timeless Ready. A→B→A is harmless when all artifacts are content-addressed to A. Gap-free watcher or journal continuity is not required and cannot prove truth after its own final event. Legacy retrieval Ready, empty dirty paths, timestamps, watcher silence, Git tree or HEAD OIDs, Qdrant existence, counts, and unrelated generations are not substitutes. Watchers and Hands receipts may trigger recomputation but cannot replace either Body observation. The lossy JSON workspace manifest remains cache metadata, not coverage authority. Semantic-projector Ready remains exact query eligibility for the admitted RepoModel projection; it does not prove repository Body coverage.

Counterfeit workspace retrieval organ removed (2026-07-15)

The old retrieval.rs module was not wired to any runtime, CLI, scheduler, or app-server caller. It stored JSON under CODEX_HOME, identified files by path/size/mtime/chunk count, used different filesystem walkers for exact and semantic search, named Qdrant collections from workspace path plus model, and could emit Ready from a missing manifest or query-time BM25. It had no Body, runtime, swarm, workspace, policy, content-root, or observed point-set binding. The module and re-exports are deleted. Legacy EpiphanyRetrievalState remains presentation-only: clean Ready projects Missing, and its index job is unavailable and unowned; dirty/stale data may warn but cannot authorize coverage.

The replacement starts from an authenticated historical Body manifest, classifies every entry under one versioned inclusion policy, verifies eligible live bytes against Body hashes, builds a Body-root/policy/index-epoch isolated Qdrant projection, observes its deterministic point set, and only then publishes an immutable CultCache coverage receipt. Qdrant remains disposable.

Body-bound workspace coverage substrate (2026-07-15)

workspace_retrieval_coverage.rs now defines the truthful contract boundary without pretending the projector exists. Obligation derivation reloads the exact historical Body manifest through the authenticated runtime Body-store route; callers cannot hand it a manifest-shaped claim. One versioned policy classifies every ordered Body entry and seals the complete classification set into the obligation. A separate projection plan seals chunker, projection, embedding, and expected point-set identity, while deriving its physical Qdrant collection from the Body-bound authority instead of accepting a caller-selected namespace.

Receipts validate only when an exact Qdrant scroll observation matches that sealed plan, and heads join one workspace, obligation, plan, and receipt. This module has no store writer, Qdrant actuator, query gate, or readiness writer. The next organ must own CAS persistence and execution: verify eligible bytes against the historical Body hashes, project, scroll-observe, then atomically publish the receipt/head. Until then coverage remains absent.

Projector authority map

Repository Body owns observed substrate only: its binding, immutable observations/manifests, and current Body head. Projection activity must not rewrite body.cc. Live Yggdrasil candidate c94fa580 falsified the old shared- store ownership by attributably rewriting body.cc while projection ran; it remains rejected.

Commit 261c7bc8 adds the pinned transactional store foundation. The runtime record epiphany.runtime.workspace_coverage_store_binding.v0 selects one canonical store path and file identity while sealing the exact repository Body route/envelope and Body-binding hash. The store-local gamecult.epiphany.workspace_coverage_store_binding.v0 repeats runtime, swarm, workspace, file identity, Body-binding hash, repository source identity, projection scope, and backend. open_workspace_coverage_authority validates both bindings and returns the owned transactional store together with exact read-only Body authority. A naked path is never sufficient.

The workspace-coverage store owns obligation, plan, immutable claim/attempt and recovery history, current-claim authority, checkpoint events/head, progress events/latest, terminal receipt, coverage head, and retirement history. Qdrant is disposable derived state. This ownership is the target, not yet the live implementation: commit 261c7bc8 provides bindings and transactional keyed storage, but existing projector writers still persist projection records in Body or local Verse.

Inputs are the exact pinned Body route/binding and current observation basis, sealed policy/plan/model identity, authenticated managed launch and provider incarnation, exact Idunn recovery evidence, and waited Qdrant readback. Outputs are the typed lifecycle/proof records above. Current claim, progress, coverage, warming, active, readiness, and query eligibility are derived joins; none may be manufactured by a path, heartbeat, Qdrant count, or stale head.

Forbidden writers are explicit: Body observer/bootstrap never writes projection state; projector/checkpoint/recovery never writes Body; local Verse retains managed process lifecycle but not coverage progress; Idunn, deploy scripts, health, heartbeat, Qdrant, Eve, and swarm overview cannot advance coverage authority.

The shared execution path resolves the runtime coverage binding, opens exact Body read authority, then acquires against the exact current Body chain, verify every included live file against its historical length and SHA-256, derive deterministic chunks and UUIDv5 point descriptors, embed and write into a claim/epoch-fenced plan collection, scroll the whole collection with typed payloads, then terminal-CAS success in the coverage store after reopening and reauthenticating the still-current Body head. Plans must seal an ID-to-payload binding root; equal counts or equal IDs do not prove the indexed content. Receipt/head constructors and writers remain projector- private. Live query eligibility re-observes Qdrant; a stored receipt proves only that one exact observation completed.

Each waited batch/readback must transactionally admit its checkpoint event/head and derived progress event/latest together in the coverage store. Cross-store atomicity is not invented: Body is authenticated before the coverage CAS and reopened afterward; if it moved, the projection evidence remains historical and cannot become current. Claim authority is scoped to Body generation so an old running claim cannot block new Body work. Same-Body abandoned-owner recovery remains possible only through exact Idunn predecessor termination and replacement authority.

Migration/cut line: quiesce projection, create and bind the coverage store, copy projection envelopes from Body and progress envelopes from Verse while preserving exact envelopes/digests, validate every chain, activate the runtime binding as the single authority switch, then CAS-remove legacy records. After activation legacy residue is inert. Missing binding, divergent sources, or partial migration fail closed. No dual-read or fallback path survives. Every bootstrap/deploy path must create the bound store before service start.

The execution path is reachable only through the reserved packaged workspace- coverage projector managed by Idunn. It validates plan-sealed text hashes and vector dimensions, creates or authenticates one exact managed claim/epoch Qdrant collection, writes no empty upsert, whole-scrolls typed payloads, rejects cyclic pagination plus duplicate/extra/missing/substituted points, and terminal-CASes the receipt/head against the exact current Body authority, immutable plan, running claim/attempt, and prior coverage head acquired at start. A CAS loser cannot mint a receipt; failure can terminalize after Body advance.

The dedicated workspace-coverage projector binds claims to an authenticated executor incarnation and reserved managed-process launch. Its pulse has an exact Current result and rematerializes text through the authenticated historical Body session rather than caller-supplied bytes. Abandoned-claim recovery admits only immutable host-signed termination, one causally linked replacement launch, and that replacement's latest signed ready heartbeat before one Body-store CAS. Time, Qdrant state, generic policy, process guesses, and caller strings are not abandonment authority. If Body advanced, recovery terminalizes the stale claim and lets normal acquisition derive a new plan; it never resurrects stale work.

Dedicated service and exact semantic proof

The dedicated service is now a real reserved managed body, not a generic job. Its policy fixes the packaged sibling executable and exact runtime/Verse/ Qdrant/Ollama arguments. Startup authenticates the policy-bound launch receipt, PID, executable hash, runtime identity, immutable Body-store route, and one host-wide singleton. Claims and attempts bind that executor incarnation and startup receipt.

Each pulse reloads only the persisted current Body basis, resolves the mutable Ollama tag to its installed artifact digest, and probes dimensions. An exact head/obligation/plan/receipt fast path returns Current without reading worktree files. Needed work opens one authenticated Body read session, verifies every eligible file and chunk, embeds only after claim acquisition, and observes both typed payloads and exact stored vectors. Receipt identity includes the vector- binding set; wrong, missing, nonfinite, or wrong-dimensional vectors cannot mint success. Body history derives retirement candidates for terminal non-current claim collections; current and running collections are preserved, and Qdrant deletion requires exact managed metadata.

Recovery is present through Idunn's reserved reconciliation path. Launch, heartbeat, and termination serialize through one per-launch process-evidence head. Host-signed termination binds host+boot incarnation, exact native process identity, executable, policy, and launch; it may seal death before heartbeat one without turning timeout or PID absence into authority. One termination admits one causal replacement slot. Recovery then requires the replacement's latest signed ready heartbeat and commits failed history, epoch+1 successor, and an immutable evidence-digest receipt in one Body CAS. PID reuse, access failure, indeterminate observation, stale ready replay, and timeout remain inadmissible.

Resident organizational Self

Resident wake scheduling has one owner. The standard heartbeat consumes one pending typed pressure and atomically emits one single-consumption Self grant; epiphany-swarm does not invent work from an idle loop. Accepted pressure is bounded to operator objective, Body-map drift, and reviewable Imagination proposal documents. Persona feedback remains persisted pressure and cannot become a resident grant or coordinator objective; it enters Imagination only through the separate typed consideration carrier. Those documents request attention only. They cannot adopt Mind state, authorize Hands, publish a release, or deploy it.

Resident Self owns the grant-to-coordinator process transaction. Its inputs are the authenticated packaged-release witness, separate resident/runtime/Verse/ Mind stores, the heartbeat grant, the swarm brake, and exact process observations. It outputs an immutable preparation, child claim, exact active turn lease, coordinator terminal receipt binding, and terminal acknowledgement back to heartbeat. The active turn and cooldown are derived from that chain; PID, exit code, journal output, and an unbound coordinator receipt are sight, not completion authority.

Preparation and grant consumption share one CAS. The packaged coordinator must claim the preparation before cognition, binding process id, creation token, executable path and digest, grant, and launch digest. Resident Self then acknowledges exactly that claim. Completion requires the same turn, grant, launch digest, release identity, and coordinator receipt. Brake or timeout drains the exact process and cannot silently abandon a live lease. A prepared launch survives scheduler restart: an unclaimed preparation safely retries the same grant and launch contract, while a claimed preparation reattaches only to the exact process incarnation recorded by the packaged child before cognition.

Forbidden writers are the old source-tree/Cargo epiphany-swarm wrapper, epiphany-work queue machinery, free-running heartbeat loops, Persona, Imagination, Modeling, coordinator artifacts, process exit, systemd, and presentation projections. Direct operator objectives and domain-derived pressure use the same pressure -> heartbeat grant -> preparation -> child claim -> lease -> exact receipt -> terminal acknowledgement path. The cut line removes the former online, run, run-queue, and pulse authority and packages the swarm, coordinator, model runtime, and tool spine as witnessed sibling binaries.

Verification belongs at the typed transition layer: CAS-loss and replay tests, store-separation checks, packaged-witness authentication, brake/timeout process timeline tests, child-claim-before-cognition proof, exact receipt substitution rejection, and negative scans proving no runtime Cargo or historical queue path survives. A nonblocking trust seam remains: the parent currently compares its post-launch process observation with the child's atomic claim. The claim closes child bootstrap authority, but a future hardening pass should replace parent observation trust with an OS-authenticated parent/child launch channel where the host supports one; it is not permission to accept PID-only identity.

Resident deployment and organizational loop

Heartbeat serve owns one physiology sequence: reconcile an exact terminal acknowledgement; retain pressure under the brake; refuse replacement while a coordinator is active; emit one grant when clear and pressured; otherwise run bounded void/sleep work. Restart resumes typed state rather than inferring completion from exit codes or journals.

epiphany-swarm status is a non-actuating join over exact runtime/release/witness/source identity, packaged siblings, physical store separation, heartbeat and Self freshness/coherence, lease sight, runtime-scoped brake, writable workspace, and credential posture. The daemon supervisor remains the sole signed Idunn health writer and may aggregate the exact heartbeat/Self provider pair. Wrong-release evidence contradicts; missing evidence warms; stale or incoherent evidence degrades. Readiness, health, systemd, and PID sight cannot write deployment admission.

Yggdrasil separates provenance from Body. /srv/epiphany/source/current is immutable release source. /var/lib/gamecult/epiphany/workspace is the writable domain Body carrying repository binding, persistent Modeling map, Mind state, and Hands consequences. Service authority is split as follows:

  • epiphany.service: supervisor/projector and signed aggregate health;
  • epiphany-heartbeat.service: heartbeat pressure, state, and grants;
  • epiphany-swarm.service: resident-Self state and bounded coordinator turns.

Coordinator, model runtime, and tool spine are witnessed bounded children. Deployment authenticates them, preserves coverage checkpoints across retries, initializes heartbeat, manages the three units together, waits for typed readiness, and crosses admission only through Idunn.

domain Body -> persistent Modeling map -> Self pressure -> Imagination proposal
     ^                 ^                                         |
     |                 +-- Self proposal-review request ----------+
     |                            ^                                v
     |  signed feedback -> Self consideration -> Imagination candidate
     |                                                   Mind review/adoption
     |                                                           |
     +---------------- Hands consequence <- explicit route -------+
                                   |
                          Bifrost exact release
                                   |
                            Idunn deployment

Every arrow is a typed request or receipt. Persona owns conversation; Modeling owns the persistent map; Imagination proposes; Mind adopts, refuses, or holds; Hands changes the Body only through an explicit route; Bifrost and Idunn separately own release and deployment. Operator silence permits bounded observation, map maintenance, rumination, and proposals. It grants none of the later consequences.

The frontier-planning substrate is already complete below the MVP mouth. runtime_spine.rs::select_and_commit_repo_frontier_planning_request selects one admitted, unchallenged active Imagination frontier. coordinator_launch.rs transports that exact request only through an exclusive Imagination launch and persists its launch binding. commit_repo_frontier_plan_mind_request binds the immutable Imagination result and candidate to a dedicated Mind request; EPIPHANY_MIND_ROLE_BINDING_ID owns that review launch. commit_repo_frontier_plan_decision then revalidates the entire causal chain and atomically adopts or refuses it against the current model.

Self now observes this chain through runtime_repo_frontier_planning_lifecycle, a read-only projection whose stages are derived from the canonical request, launch bindings, immutable worker results, Mind request, and decision receipt. The MVP coordinator advances each stage only through the established commit primitive: select planning, launch exclusive Imagination, request Mind review, launch the dedicated reviewer, and commit Mind's decision. Failed Imagination or Mind jobs become explicit review stages rather than remaining indistinguishable from running jobs. A terminal Hold or Refuse suppresses immediate replanning of the same current authority. Exact packaged c35272c9 proves the live chain through the Mind boundary: fresh accepted Modeling minted one typed Imagination frontier, Self selected it over older CRRC regather display state, Imagination completed, and Self committed the dedicated Mind request without adopting the candidate or granting Hands authority. Mind launch, judgment, and decision commit remain next.

Selected user proposals are also native Self input. The runtime projection runtime_pending_repo_frontier_proposal_modeling_request returns the single validated selection with no launch binding. Coordinator status routes that authority before generic regather. The MVP no longer rewrites an awaitFrontierProposal action from a CLI flag; an optional request ID is only an equality assertion over Self's derived request. This cuts the split owner exposed when exact 881b2b1a saw the live v23 proposal but remained in manual regather.

Proposal Modeling receives the canonical RepoModel shape, including current domain, claim, and frontier identity. existingFrontier is the operation boundary: upsert_frontier creates only a genuinely new id, while revise_frontier changes an id already owned by Modeling. Admission still fail-closes both mistakes. This context is required because exact 737f2b94 correctly routed a live proposal but the worker, deprived of the frontier inventory, attempted to upsert an existing item and was rejected.

The autonomous proposal crossing is source-grounded in runtime_spine.rs, admitted_model_direction_consideration.rs, coordinator_launch.rs, and repo_model_gateway.rs. A deployment-configured RuntimeRepositoryDomainBinding immutably joins the runtime/swarm/workspace to the exact repository Body binding. It names organizational jurisdiction only; it is not proof of a Git remote. Self promotion reloads the exact direction request/result, worker result and launch, admitted model receipt, domain binding, and Body-owned canonical Git root, then one preserved-authority CAS creates an inert frontier proposal and its Modeling selection. The generic proposal mouth rejects Imagination provenance so it cannot substitute for this causal crossing.

Proposal Modeling is structurally bounded: its sole frontier upsert must recommend Imagination and carry no adopted plan. Proposal Evolution is insert-only. Ordinary Modeling has one separate standing transition: the typed checkpoint-update-needed verdict asserts that the Body map contains a future design gap and must mint exactly one new active, unadopted frontier recommending Imagination, with no unresolved dependencies, safe non-empty source scope, and evidence grounded in the result. checkpoint-ready and regather-needed cannot mutate frontier. nextSafeMove is display-only. Therefore map direction can become an inspectable proposal and planning request, but not a Hands route. The full-chain hostile test supplies an exact proposal-citing Modeling result that recommends direct Hands; Mind admission rejects it before mutation, the store remains byte-identical, and Hands authority remains absent. Only the existing explicit Mind adoption transition may create the route that Hands consumes.

Self remains a router, not a prose interpreter. Once Mind accepts the ordinary future-gap patch, the existing frontier-planning eligibility projection sees the typed active frontier and launches Imagination before generic CRRC or manual regather. Modeling owns representation of the gap; Imagination owns possible futures; Mind alone may adopt one; Hands receives no authority from this transition.

This map must change when ownership changes. Historical scars belong in git, evidence, or an explicitly archived note—not in the machine's Modeling state.

Resident producer replay identity

Resident domain ingestion is an at-least-once producer. The source request ID, kind, provenance, objective, schema, and privacy boundary own pressure identity. created_at_millis records the first observation; status and consumed_by_grant_id belong to the heartbeat lifecycle. They are not producer identity and cannot make an identical later ingestion conflict or recreate work.

enqueue_resident_self_pressure_idempotent therefore accepts an existing row only when its immutable producer fields match, regardless of later observation time or grant consumption. It still rejects any same-ID substitution of kind, provenance, objective, schema, or privacy authority. The shared path applies to admitted-model direction, autonomous proposal Modeling, and Imagination consideration pressure. Verification replays after timestamp change and after heartbeat consumption, and retains a hostile changed-objective collision.

Resident cancellation owns retry admission for a failed bounded coordinator turn. In the same CAS that clears the exact active lease and writes its typed terminal acknowledgement, cancellation verifies the grant still owns the source pressure and returns that pressure from consumed to pending. It does not mint the retry grant. The standard heartbeat remains the sole scheduler and may issue a new grant with a new identity for the same exact pressure after it has reconciled the terminal turn. A failed launch can therefore recover without operator pressure duplication or an authority-bypassing coordinator call. Grant identity includes the pressure-local attempt ordinal as well as heartbeat schedule and action identity. Historical grants remain immutable receipts; a retry cannot collide with its predecessor even when heartbeat reconciles the failed turn and schedules the replacement within the same physiological action. Concurrent issuers still derive the same next ordinal and contend on the one pending-pressure CAS, so attempt identity does not weaken single consumption.

Typed pressure does not own a new coordinator thread. Imagination consideration, admitted-model direction consideration, and autonomous proposal Modeling requests each carry the implementation thread that owns their causal state. Resident preparation reloads that exact request from the runtime store, verifies its runtime identity, and binds its thread into the coordinator argv. The prepared argv is then the single source for child launch and lease thread identity. Only plain operator objectives use the resident runtime thread. epiphany-swarm no longer reconstructs a fixed thread after preparation.

An Imagination direction result may contain several option drafts. Autonomous promotion gives every option its own proposal, provenance binding, and explicit proposal-Modeling request. These are selected work items, not candidates still awaiting preference. runtime_pending_repo_frontier_proposal_modeling_request therefore schedules the oldest unclaimed request by selected_at, then stable request ID. A launch binding removes only its exact request from the pending queue, exposing the next. Resident ingestion queries that same head and emits pressure for only that request. It does not mirror every selected request into a second independently ordered pressure queue. Self owns queue order; it does not silently discard or rank Imagination's already-selected options, and heartbeat owns opportunity without acquiring a second scheduling opinion.

Resident terminal success is also pressure-specific. For a repo-frontier-proposal-modeling grant, a zero-exit coordinator receipt proves only that the bounded coordinator process ended cleanly; it does not prove the requested Modeling launch occurred. Before acknowledging that pressure, resident Self now requires the runtime spine to contain the exact RepoFrontierProposalModelingLaunchBinding. Missing fulfillment is a typed failed turn: the same cancellation authority used by process failure, timeout, and brake cancellation admits the unfulfilled terminal class and atomically requeues the same pressure for heartbeat retry. The producer of a terminal class and the cancellation contract must evolve together; otherwise the runtime errors before the requeue CAS and leaves physiology split across an active resident lease and an uncompleted heartbeat turn.

Typed resident launches run the bounded coordinator in planning mode so an ordinary operator objective cannot silently become actuation. Request-owned lanes that already carry their own authority therefore act through exclusive startup handlers before the generic planning loop: Imagination consideration, admitted model-direction consideration, and proposal-bound Modeling each load their exact request and launch only that request's worker. Proposal Modeling must not depend on the later generic launchModeling action loop; planning mode intentionally stops before that loop actuates. Its startup handler creates the exact RepoFrontierProposalModelingLaunchBinding that resident fulfillment then verifies.

Role tool authority belongs to the role-scoped adapter, not to resident Self. Resident preparation therefore does not append a blanket --no-auto-tools: Modeling and Eyes must be able to inspect their Body through the adapter's read-only grants, while the adapter still refuses tools outside the launched organ contract. Live v41 proved the distinction: tool-starved Modeling twice returned an empty non-typed payload; the same bounded recovery with native tools produced a grounded typed result.

Output shape must also match launch authority. Ordinary Modeling with no typed proposal, claim-repair, or verdict request exposes only node/edge evolution in its output schema. Frontier operations remain available only behind the typed authority fields whose exact identities Mind validates. This moves the first line of defense from a prose warning plus downstream rejection into the model's declared output contract; Mind remains the final admission owner.

Live v42 proves that contract end to end: ordinary resident Modeling received read-only source tools, grounded its map in inspected repository paths, emitted only generic node/edge evolution, and reached Mind RepoModel admission. The next split is downstream. CRRC still derives resumability from the thread state's durable investigation checkpoint, while Modeling acceptance commits RepoModel admission plus observation/evidence state and does not establish that checkpoint. Consequently accepted Modeling can leave prepareCheckpoint true and trigger another generic Modeling launch. Neither generic statePatch nor the worker may become a second checkpoint owner. A typed proposal now asks the frontier-planning circuit to choose one authority: either Mind admission derives the continuity checkpoint deterministically from accepted RepoModel evidence, or CRRC consumes canonical RepoModel admission directly. Canonical Imagination and dedicated Mind must adopt the choice before Hands changes the seam.

Fresh v49 proves the current planning path through canonical Imagination and dedicated Mind adoption. Its six safe paths are the complete implementation owner set at that revision; the previously named vendored app-server owner does not exist. The route is nevertheless preserved as incomplete evidence because the machine itself lacked the newly required relinquishment transaction when Mind adopted that plan. Historical route authority is never widened after the fact.

The live repair boundary is split deliberately. hands_gateway.rs defines the immutable refusal receipt. runtime_spine.rs::relinquish_repo_frontier_hands_route requires exactly one still-current route/authority/intent/review/grant chain, requires at least one safe missing path outside the adopted scope, and refuses to run after patch, command, commit, or PR consequences exist. Hands attests inability; it does not revise RepoModel. In the same compare-and-swap, Mind writes its review and admission receipts, retires the exact frontier through RepoModelPatchPurpose::RelinquishFrontierRoute, emits the next Modeling projection obligation, and records the companion relinquishment receipt. The route and authority remain immutable historical evidence. Their old model revision/hash can no longer validate after the retirement admission, so they are structurally unable to authorize edits. Native status projects the latest relinquishment; epiphany-hands-action record-refusal is the operator mouth. Generic Modeling admission explicitly rejects this Mind-owned purpose, and the full consequence/Soul path remains the only route to a Resolved frontier.

Planning failure has two adjacent authorities. The generic runtime job owns process and transport terminal status. The typed role result owns what Self may infer about a faculty outcome. runtime_repo_frontier_planning_lifecycle reads the latter by exact planning request or launch job identity; it deliberately does not treat an arbitrary failed process as an Imagination judgment. A worker adapter that rejects a malformed planning candidate must therefore persist both receipts: the generic failed job and a non-executable typed Imagination result with item_error, exact launch job identity, and no candidate cargo. Without that projection, a dead failed job remains ImaginationRunning and the current planning request has no lawful review or retry transition. Native interrupt is not the missing owner: it may stop or block a binding, but it cannot fabricate the faculty result that Self's lifecycle consumes.

The repair must not collapse retry scheduling into the semantic planning request. The current request ID is a deterministic function of runtime, thread, model, and frontier identity; it describes what is being planned. A retry is an attempt to execute that same authority, not a new semantic request and not a mutation of the old launch receipt.

  • Owner: the model adapter owns syntactic ingress and must canonicalize set-shaped candidate fields such as safe paths before validation. Ordering is serialization, not Imagination authority. Mind still owns whether the resulting canonical paths stay within the request ceiling.
  • Owner: the model adapter also owns one non-executable typed role failure when candidate parsing or validation fails. It binds the exact worker launch job, carries item_error, carries no candidate or foreign authority cargo, and is adjacent to—not replaced by—the generic failed runtime-job receipt.
  • Owner: Self owns attempt scheduling. An explicit reviewed failure may authorize a new immutable attempt for the same semantic planning request. Attempt identity and launch binding must be unique and monotonic; the prior launch and failure remain immutable evidence.
  • Derived state: planning lifecycle reads the latest lawful attempt while retaining earlier failures. ImaginationFailed is a review boundary, not an implicit retry and not a terminal judgment on the frontier itself.
  • Forbidden writers: native interrupt cannot author faculty failure; generic job status cannot become Imagination truth; a new launch cannot overwrite the old binding; and retry cannot mint a new model/frontier authority or bypass the current request's Body hashes.
  • Negative checks: malformed output yields both failure receipts; no retry is launchable before explicit failure review; exactly one next attempt becomes launchable afterward; stale or substituted review identity is refused; prior failed attempts cannot later supply a candidate or override the successful attempt.

Live v50 exposed a missing-context fault at the Imagination boundary. Runtime spine already enforces that every candidate safe_paths entry equals an immutable planning source_scope entry or descends from one. The model-facing schema described only a non-empty string array, and the runtime output contract asked for identity echo without stating the ceiling. Two consecutive canonical Imagination attempts therefore expanded scope and failed closed with no candidate cargo. The repair belongs at context ownership: the schema and runtime contract now state that safe paths are a sorted, duplicate-free narrowing of source scope, and adjacent useful files belong in stop conditions. The validator remains unchanged and Mind retains final admission authority.

Fresh v51 moved the same immutable planning authority past that ceiling and exposed the next retry invariant. Self correctly names attempt zero repo-frontier-planning-launch-<request> and later immutable attempts repo-frontier-planning-launch-<request>-attempt-<ordinal>. Result validation nevertheless required the attempt-zero record ID for every successful result. Consequently failures and reviews could schedule retries, but no retry could ever become a valid Imagination result. Validation now derives the expected record ID from the persisted binding's attempt ordinal. The regression test proves failure, explicit review, suffixed retry binding, successful result persistence, and transition to ImaginationResultReady without relaxing any other causal identity.

Fresh v52 then proved that full retry path live: the same planning authority produced a valid typed candidate, dedicated Mind adopted it, RepoModel advanced to revision 5, and the substrate derived Hands=true. A separately launched proposal-bound Modeling result became stale at that admission and was correctly rejected. Coordinator action ordering nevertheless treated its reviewed failure as a demand for a new proposal before consulting the newer actionable Hands frontier. This let stale worker history preempt current Mind authority. The coordinator now excludes exactly the state (reviewed proposal failure, current Hands frontier) from stale-result recovery, allowing the existing Hands branch to own the decision. Without a Hands frontier, the consumed proposal still fails closed at awaitFrontierProposal; ordinary non-proposal failures still route back to Modeling.

Supervisor execution-amendment authority

Owner: Mind owns a single-use repair when an immutable adopted plan contains a non-executable command that cannot bind an already-observed Hands consequence. The original Imagination plan and Self route remain immutable evidence.

Inputs: one exact current route, the exact current frontier-item hash, hashes of the original action and command, authenticated supervisor actor/command/admission and packet provenance, one replacement action and command, rationale, and an operator-owned timestamp.

Outputs: one new RepoModel revision plus Mind review, admission, execution- amendment, and Modeling-projection receipts in one compare-and-swap. Self must derive a fresh route from the amended model; the old route cannot become current again. Hands command receipts bind effective_command, and the gate projects both original and effective values for inspection.

Forbidden writers: generic Modeling admission cannot carry the amendment operation; Hands cannot substitute a command; a stale route cannot be amended; and an already-amended plan cannot be amended again. The amendment is not a repair loop and does not erase failed Soul launches or historical Hands receipts.

Verification layer: focused derivation tests prove exact success, original-plan preservation, single-use refusal, and generic-purpose refusal. The Hands receipt test proves a mismatched stated command leaves the store byte-identical before the exact command succeeds. Live v53 now proves the amended route through exact Hands receipts and an accepted Soul result at thread-state revision 31.

Self resolves the complete Soul lifecycle before generic CRRC/regather routing. A pending or running Soul job routes only to result observation. A completed, accepted Soul result routes according to its verdict: bounded missing evidence may return to Hands, while an accepted pass or non-pass awaiting model incorporation routes Modeling. CRRC cannot mint a replacement Hands gate while Soul is running or after Soul has established the newer causal boundary.

Soul provenance classification for adopted frontier plans

Owner: the immutable RepoFrontierPlanDecisionReceipt owns the provenance of an adopted plan. Its Mind-worker result ID is an audit reference, not an organ classifier. All new plan-decision RepoModel admissions therefore carry RepoModelAdmissionSource::FrontierPlanDecision, regardless of whether Mind or an authenticated operator supplied the decision.

Soul selects and verifies provenance by typed route anatomy. A non-empty frontier_plan_decision_id requires the exact decision receipt, Adopt verdict, admission receipt binding, pre-admission model revision/hash and frontier identity, admission-purpose planning/candidate identity, post-admission route model revision/hash, and exact Mind-worker result/job or authenticated-operator source. Only an ordinary worker-result admission may require the Modeling acceptance, Mind-state-commit, and gateway-review chain. Execution amendments retain their separate exact receipt chain.

Derived state: RepoModelAdmissionReceipt.result_id remains inspectable but no longer decides which organ admitted the model. Existing v53 evidence is not rewritten: its explicit frontier_plan_decision_id selects the correct typed validation path despite the legacy generic WorkerResult source tag.

Forbidden writer: Soul cannot infer Modeling from result presence, and a plan decision cannot bypass provenance merely because its admission and review contain a model-produced result. Missing, substituted, non-Adopt, or route-mismatched decisions fail closed before worker launch. The decision's pre-adoption frontier-item hash is deliberately not equated with the route's post-adoption frontier-item hash; Mind's admitted patch is the transition that changes that item.

Exact release build cache ownership

The root release-bundle manifest owns release profile policy. Measured on the exact 21-binary bundle after touching epiphany-core/src/lib.rs, release incremental reduced rebuild time from 7m04s to 31.47 seconds and is therefore enabled in [profile.release]. An independent rust-lld trial reached 29.34 seconds, only 2.13 seconds faster, while depending on host-specific Windows linker discovery; it remains an experiment rather than repository policy. Fresh-target timings (1226.69 seconds with the default linker, 1097.14 with rust-lld) calibrate clean-build cost but do not override the iteration-path decision.

Release construction has two serialized cache authorities. The graph cache is identified only by the frozen root Cargo.lock, target triple, and installed toolchain fingerprint. It owns Cargo outputs and holds an exclusive graph lock through compilation and binary copying. Source commit identity does not partition this cache and never becomes derived build authority.

The source cache is identified by canonical repository identity. It owns one persistent detached worktree so unchanged tracked files retain stable paths and timestamps across commits. Before every build it exclusively locks that source, force-checks out the exact clean commit, cleans the main tree and recursive submodules, and verifies repository ownership, HEAD, status, and submodule identity with long-path-aware Git commands. It remains locked until the release has copied and witnessed every binary. No concurrent packager can mutate source or graph outputs during that interval.

The release witness remains the only packaged-output authority: exact commit, runtime, target, toolchain, sorted binary roles, lengths, and byte digests. Caches accelerate reconstruction; they cannot certify it.

Exact 8bb8b7d3 is the steady-state acceptance proof. After the stable source cache's one-time local population, a documentation/state-only successor kept the same graph and checkout identity; Cargo completed the exact release build in 29.92 seconds. Independent witness inspection still authenticated all 21 binaries and rejected any notion that cache reuse could substitute for release identity.

The release publisher executable is part of this mechanism and must be bootstrapped after its cache implementation changes. On 2026-08-08 an older publisher was still launching an ephemeral ep-src-* checkout and a commit-partitioned target directory; it was terminated after 12.8 minutes while still compiling. Rebuilding the publisher from exact 8a9439ca took 3m49s. The current publisher then reused the persistent source/graph authorities and packaged the 21-binary core-change release in 6m46s of Cargo work. An identical warm package completed Cargo in 1.48s and the full hash/copy/witness path in 18.669s. Benchmark command lines and resolved cache paths are therefore part of release-cache evidence; source code alone does not prove the active packager.

The cache does not erase crate invalidation. Exact 58f42b6a changed epiphany-core and required 6m50s of Cargo work; its successor 5f09d35a changed only epiphany-mvp-coordinator, reused the core artifact, and completed Cargo in 29.58s. The current iteration bottleneck is the broad recompilation and relink fan-out of the monolithic core crate. Incremental release reuse, linker choice, or a deliberate authority-based crate split must be benchmarked as separate release-contract changes rather than mixed into a cognition fix. Exact ecfff489 confirmed the slow case at 7m04s of Cargo work. The active release rustc command had no incremental directory, and the root bundle built all 21 binaries. Release incremental compilation and rust-lld therefore have separate measurable hypotheses; an authority-based core crate split remains the larger structural option if those two changes do not materially reduce edits to the current monolith.

Exact 6f3cdc61 sharpened the remaining ownership defect. The stable source and graph caches were active and third-party dependencies stayed warm, yet one core schema/routing change rebuilt the four first-party libraries and all 21 root release binaries in 6m59s. The root epiphany-release-bundle is one Cargo package whose package-wide dependency list includes epiphany-core and every adapter/runtime crate; 19 of its 21 binary sources directly import epiphany_core. A changed core artifact therefore invalidates almost the whole release bundle even when the changed authority belongs only to coordinator routing.

The intended split follows authority rather than file size. Stable coordinator state/view contracts must live below a volatile Self policy leaf. Runtime-spine persistence, Persona/transport, repository observation, and release tooling must not depend on that leaf. Only status/coordinator consumers should relink when Self policy changes. Removing the root mega-package eventually requires the release packager to build and witness binaries from their owning packages; the witness remains the cross-package release authority. A compatibility re-export from epiphany-core would preserve the invalidation edge and is not a completed split.

Exact 0f0b006d tested the tempting manifest-only cut and rejected it. The packager grouped binaries under three independently locked owner manifests and shared one target directory. Cold core completed in 8m02s; the OpenAI owner then resolved its own graph and began compiling epiphany-core again. The run was terminated at 16m53s before the tool owner could repeat the same wound, and a1a43892 reverted the cut. Separate owner lock universes are therefore not the crate split. The viable design must keep one Cargo dependency graph while moving volatile coordinator policy and the coordinator/status binary consumers out of the stable core compilation unit.

The local replacement implements that single-graph boundary. Stable coordinator DTOs live in surfaces/coordinator_contract.rs and remain available to core state/projection organs. Routing functions live in the separately compiled epiphany-self-policy leaf and are not re-exported through core. Core disables autobin discovery and explicitly declares all 74 retained non-coordinator binaries. The root release graph exposes epiphany-mvp-coordinator only behind optional feature coordinator-runtime; that feature alone enables the policy dependency. The packager first builds ordinary bins without the feature, then builds only coordinator with it under the same root lock and target directory. Target-cache identity depends on target and toolchain, not lockfile bytes; Cargo fingerprints changed dependencies, while --locked and the release witness retain build and publication authority.

Launch latency is a separate whole-store-read wound. The live runtime store was about 40 MiB, and post-Soul Modeling launch took roughly 50-90 seconds before the detached model process appeared. launch_role currently reads coordinator state, assembles memory context, reloads RepoModel shape, commits/reloads the Soul-to-Modeling request and route, reads telemetry, writes telemetry, and then commits the job through path-based helpers. Each helper may independently construct and pull the append-only CultCache store. The next launch-path cut is one transaction-scoped typed read view plus explicit write boundaries, with phase timings at the same owner seams. A cache wrapper that leaves repeated whole-store pulls authoritative would merely hide the smell.

Runtime-spine keyed storage ownership

The live 83 MiB runtime spine still uses SingleFileMessagePackBackingStore. Every coordinator launch opens a complete snapshot and its identity-scoped state/job CAS reads, decodes, sorts, encodes, and replaces that whole file. Fresh v53 timings isolate the cost: state load 79ms, dynamic context 66ms, role augmentation 1.053s, job commit 51.482s, total 52.680s. Prompt assembly is not the bottleneck.

CultCache already owns the standard replacement: RedbMessagePackBackingStore stores each polymorphic (type, key) identity as an independent MessagePack row and performs the same exact batch-CAS checks in one redb transaction. Epiphany must promote that existing backend rather than inventing a cache, journal, sidecar, or second persistence protocol.

Owner: one runtime-spine storage binding selects the physical backend for the entire store. All runtime state, jobs, results, events, Mind admissions, Hands/Soul receipts, and coordinator transactions resolve through that owner.

Migration inputs are an immutable single-file snapshot, its byte digest and entry count, an empty destination, and the destination file identity. The output is one redb store plus a typed migration receipt binding source hash, sorted envelope identities/digests, destination identity, and completion time. The old .cc file becomes sealed evidence and cannot remain a live fallback.

Forbidden writers: no runtime or coordinator helper may instantiate SingleFileMessagePackBackingStore directly after a redb binding is selected; no path may silently infer a backend from whichever decoder succeeds; and no dual-write or reconciliation loop may create two authorities. All direct and programmatic launch/result/admission paths use the same backend factory and CAS primitive.

Negative verification must prove stale CAS refusal, immutable identity collision refusal, migration equivalence for every envelope, absence of writes to the sealed source, crash-safe destination recovery, and a live-sized job commit that no longer scales with total historical store bytes.

Historical transaction benchmarking after implementation corrected the causal map. Exact surviving batches around live job 972f4e31 take roughly 0.8-1.0s through the legacy snapshot backend and 0.02-0.03s through keyed redb. Keyed CAS is a valid secondary optimization, but it cannot explain or remove a 51.482s coordinator bucket by itself. Live migration is therefore not yet authorized by performance evidence.

The Modeling-only pre-transaction owner is Repository Body observation. It builds two isolated Git indexes/trees and two complete raw SHA-256 manifests, then admits only exact equality. On the current 3,994-file Body, an authenticated release observation took 92.30s. The isolated Git add/write-tree portion takes about 1.62s; serial raw file reads and metadata dominate. Manifest entries are independent after typed index parsing, so bounded parallel construction changes only execution order. Per-file before/after metadata checks, raw hashes, deterministic sorting, manifest-root derivation, the second full scan, and exact equality remain owners. The measured parallel observation is 49.52s. A future cut that reuses hashes or weakens the second scan requires a new explicit freshness authority; it must not be smuggled in as a cache.

Cross-host Persona consequence nerve

Owner: Starfire Persona owns cognition, Interpreter effects, and the signed epiphany.persona_discord_delivery_request.v0. Yggdrasil Bifrost owns Discord actuation, its private execution journal, and the signed bifrost.persona_discord_delivery_receipt.v0. The existing Starfire permit issuer owns the final five-second consequence authorization from the canonical CultMesh brake.

Inputs: one exact signed Persona request, one Bifrost trust binding for the admitted target runtime/Persona/channel, one purpose-specific Bifrost permit request identity, the canonical Starfire brake document, and the two purpose-specific public receipt/permit anchors. Runtime identity must be data bound by those anchors and deployment configuration; epiphany-yggdrasil is no longer a valid compiled assumption while cognition resides on Starfire.

Signal path: Epiphany sends the signed request as a typed CultNet raw document over RUDP. Bifrost verifies and persists it before processing. Immediately before Discord actuation Bifrost requests the existing short-lived permit from Starfire and durably records permit consumption before the provider call. Bifrost returns the terminal signed receipt as a separately typed CultNet raw document. Epiphany persists and verifies that receipt before creating delivery evidence and terminalizing the heartbeat request.

Derived state: RUDP connection/ack state is transport-only. The request is an inert proposal until a permit exists. The permit authorizes one bounded attempt but is not delivery evidence. Only the signed Bifrost receipt can prove completed, failed, or terminal-unknown consequence.

Forbidden writers: SFTP may not copy either live .cc store; Bifrost private execution state and Discord credentials may not cross to Starfire; Epiphany cannot manufacture a receipt; Bifrost cannot manufacture or extend a permit; and an unknown journal/receipt cannot be retried automatically. Running the Bifrost mouth on Starfire would move crossing authority and is not an accepted shortcut.

Shared paths: first delivery, restart recovery, duplicate request replay, expired request, braked permit refusal, provider failure, and terminal receipt replay all use the same typed request/permit/receipt identities. The local stores are durable endpoint state beneath the network contracts, not the crossing themselves.

Verification layer: Rust/TypeScript interop fixtures must prove exact tuple and wire compatibility; RUDP smokes must prove request persistence, permit correlation, signed receipt return, replay idempotence, and substituted runtime/channel/signature refusal. Live proof requires one reserved Persona turn to reach model terminal, signed request, released-brake permit, Discord message ID/URL, signed Bifrost receipt, Epiphany delivery evidence, and heartbeat terminal receipt without exposing private state.

Verdict-bound Modeling output authority

Live v53 exposed a missing typed boundary after Soul acceptance. The coordinator committed an exact RepoFrontierModelingRequest and rendered it in dynamic context, but the persisted worker launch did not carry that identity. The model runtime therefore exposed the generic Modeling schema, and a worker could choose ordinary Evolution before Mind rejected it. Context was correct; schema authority was not.

Owner: the typed worker launch carries the exact repo_frontier_modeling_request_id returned by the request-commit boundary. The model runtime specializes its provider schema from that field: exact ID echo, verdict-incorporation purpose, non-empty evidence, and exactly one revise_frontier operation. Prompt text is derived explanation, not authority. Ordinary Modeling retains its generic schema. Mind still validates route, verdict receipt, frontier identity, hashes, evidence, and mutation content at admission. The old path can no longer spend a model turn producing Evolution under verdict authority and rely on a later rejection to discover the mismatch.

Exact 61e8be38 proved that operation-level restriction is necessary but not sufficient. The inherited frontier-item output schema omitted adopted_plan. A schema-conforming revise_frontier therefore implicitly replaced an adopted plan with absence, and Mind correctly rejected it as alteration of execution anatomy. Verdict Modeling launch authority must carry both the exact request and exact routed item, not merely request identity. The provider schema must const-bind all identity anatomy, including the complete adopted plan, while leaving only status, evidence references, gap, and update timestamp writable. The completed worker result is immutable invalid evidence and cannot be made valid by changing admission after the fact. Supersede it only when the corrected launch/schema boundary is ready, then run one new inference.