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/memory-graph-semantic-projection-authority-map.md
2026-07-16 13:21:59 +01:00

561 lines
30 KiB
Markdown

# Memory Graph Semantic Projection Authority Map
## Objective
Give every Epiphany swarm persistent semantic recall over both its Mind and its
Modeling-owned Body map without allowing Qdrant, an embedding service, Persona,
or presentation code to become memory authority.
CultCache/CultMesh typed documents remain truth. Qdrant is a rebuildable nerve
that ranks canonical document identities.
## Current Mechanism
- The runtime-spine `EpiphanyMemoryGraphEntry` is the admitted RepoModel. Its
revision and hash bind Modeling-owned architecture, dataflow, summaries, and
frontier.
- Reviewed `EpiphanyAgentMemoryEntry` documents own lane and Persona memory.
`memory_graph_from_agent_memories` derives their typed Mind graph projection.
- `plan_memory_graph_context_cut` resolves full typed nodes, edges, summaries,
anchors, and frontier from a validated graph snapshot. BM25 is its correct
local ranking path.
- `retrieval.rs` has a functioning Qdrant/Ollama client for source chunks.
- `persona_memory_cache.rs` separately re-chunks Persona state, reindexes the
whole identity during recall, and renders Qdrant payload text. This is a
Persona-shaped substitute for the shared Mind/Modeling semantic nerve.
- `EpiphanyMemoryEmbeddingManifest` is unused inside RepoModel. Cache health
must not mutate the canonical model revision or hash.
## Owner
- Mind claims: their admitted typed CultCache documents.
- Modeling claims: the current runtime-spine RepoModel.
- Projection synchronization and semantic candidate ranking: one shared
`memory_graph::semantic_projection` organ.
- Qdrant and Ollama: xenos transport/cache boundaries only.
## Inputs
- `swarm_id` and exact visibility/authority scope.
- Validated canonical graph snapshots derived from admitted Mind documents or
loaded from the current RepoModel.
- Stable embedding-provider identity, model identity, vector dimension, and
projection profile version. Physical endpoint is operational configuration,
not semantic identity.
## Outputs
- Two physical projection collections: Mind and Modeling.
- Typed point payloads containing locators and hashes, never authoritative
claim text.
- A typed CultCache projection receipt/status outside RepoModel.
- Ranked candidate references that core reloads and revalidates against current
canonical state before producing a context packet.
## Derived State
- Embeddings, scores, point payloads, collection metadata, indexed counts,
projection timestamps, and projection health are cache-only.
- `EpiphanyMemoryEmbeddingManifest` is no longer an owner; it is legacy
notification-shaped state and must not be updated through RepoModel admission.
- Qdrant payload text is no longer memory; query results are locators only.
## Partition Law
- Modeling: `repo_architecture` and `repo_dataflow` nodes/edges/summaries plus
unresolved frontier.
- Mind: `role_self`, `short_term`, `incubation`, `agency_pressure`,
`candidate_intervention`, `identity`, and `evidence` nodes/edges/summaries.
- Physical collection separation is the privacy and rebuild boundary. Payload
filters are additional defense, not tenancy.
- Every point carries `swarm_id`. Modeling points also bind repo/graph identity;
Mind points bind their canonical role/identity scope where present.
## Point Identity And Provenance
Point UUID is deterministic over:
`swarm_id | partition | canonical_type | canonical_key | canonical_document_id`
Content and embedding versions do not change identity. They decide whether the
same point must be replaced.
Every point binds:
- canonical type, key, and document id
- canonical schema version, revision, and aggregate hash
- canonical document content hash
- graph/domain/profile/lifecycle
- source references and source hashes
- authority/visibility scope
- embedding provider, model, dimensions, and projection profile version
## Query Path
1. Explicit frontier and explicitly requested ids retain priority.
2. The embedder embeds the query using the partition's versioned query profile.
3. Qdrant returns candidate locators and scores.
4. Core reloads current canonical typed state.
5. Core rejects missing, retired, stale, hidden, cross-partition, revision-bound,
or hash-mismatched candidates.
6. Valid candidate ids seed the existing context-cut planner, which resolves
the full typed objects and preserves graph expansion, anchors, warnings, and
budget law.
7. Qdrant/Ollama failure adds a warning and uses BM25. Correctness is unchanged.
## Forbidden Writers
- Qdrant cannot write claims, lifecycle, visibility, evidence, frontier, Mind
decisions, RepoModel, or agent memory.
- Query payloads cannot speak directly into prompts.
- Persona cannot own a separate corpus contract.
- Cache status cannot require a RepoModel patch.
- Collection existence cannot attest schema/model compatibility.
- Synchronization cannot enumerate or delete foreign collections or scopes.
- Yggdrasil hosts the nerve; it does not own the thought.
## Shared Paths
- Workspace source retrieval, Persona recall, Mind recall, and Modeling recall
use one native embedding/vector transport.
- Mind and Modeling projectors own document semantics; the transport owns only
HTTP, batching, compatibility validation, and typed serialization at the JSON
boundary.
- Local Docker and Yggdrasil use the same logical embedding identity when the
model/dimensions/profile are identical, even if the endpoint moves.
## Failure And Rebuild
- Missing Qdrant/Ollama, stale projection, incompatible collection metadata, or
partial synchronization falls back to typed BM25 traversal.
- Incremental sync replaces changed stable ids and deletes only absent ids in
the exact owned swarm/partition scope.
- Rebuild constructs and verifies a compatible generation before retiring the
last usable projection.
- Deleting all Epiphany semantic collections must lose speed only.
## Cut Line
1. Extract the existing Qdrant/Ollama wire machinery into one typed native
backend; do not add a third client.
2. Add pure graph projection documents, stable identities, and canonical
candidate revalidation.
3. Add index and semantic-context CLI paths over canonical typed sources with a
typed projection receipt.
4. Prove distinct collections, compatibility refusal, stable rebuild ids,
changed/deleted document synchronization, hostile payload rejection,
frontier priority, and BM25 fallback.
5. Rewire Persona recall through Mind graph candidates and delete its private
chunk/client/index/search authority.
6. Retire the existing `epiphany_persona_memory_v0` collection only after the
shared Mind path is proven.
7. Remove sibling v0 `memory-graph.msgpack`/`.cc` from live authority; production
Modeling projection reads the runtime-spine RepoModel.
## Landed First Nerve (2026-07-15)
- `semantic_backend.rs` is now the single native Qdrant/Ollama xenos boundary
used by workspace retrieval and the shared memory projection. Collection
metadata is read back and compared exactly before reuse.
- `memory_graph::semantic_projection` derives stable locator documents and
revalidates candidates against current canonical hashes without trusting
payload prose.
- `memory_graph::semantic_index` synchronizes exact swarm/partition scope into
`epiphany_mind_v1` and `epiphany_modeling_v1`, writes immutable typed receipts
outside RepoModel, and falls back to canonical BM25 on backend failure.
- `epiphany-memory-semantic` indexes or queries admitted runtime RepoModel,
admitted agent memory, or an explicitly named composed graph store. It
refuses agent memory as Modeling and runtime RepoModel as Mind.
- `epiphany-repo-model-bootstrap` gives the runtime-spine owner an explicit
one-time atomic bootstrap from typed thread-state. It deliberately ignores
stale sibling graph files.
- Persona heartbeat recall now reads the shared Mind projection, restricts the
cut to Persona's exact domain, reloads canonical graph objects, and renders
the typed packet. The Persona-only client/chunk/search/index implementation
and its `epiphany_persona_memory_v0` collection are deleted.
- The tracked v0 sibling `state/memory-graph.msgpack` is deleted. Runtime-spine
RepoModel is the Modeling owner.
Local proof indexed 43 Mind documents and 3 currently fresh Modeling documents
with `qwen3-embedding:0.6b` at 1024 dimensions. The thin Modeling count is
honest pressure: several imported thread-state claims have missing or changed
source anchors and remain stale rather than being made searchable by optimism.
## Completion-Gated Projection Physiology
The landed projection has an indexing command and immutable index receipts, but
no durable reflex from canonical admission to projection completion. Calling
the command from a timer would make elapsed time a substitute for causality.
### Owner And Inputs
- The canonical admission transaction owns projection pressure. A RepoModel
admission already commits a `RepoModelAdmissionReceipt` with the admitted
revision and hash. An agent-Mind mutation must likewise commit the exact
`EpiphanyAgentMemoryEntry` generation and a typed Mind commit witness in one
CAS; the current direct `cache.put` writers in `agent_memory.rs` are not yet a
sufficient completion boundary.
- That transaction emits one immutable semantic-projection obligation as a
companion, keyed by swarm, partition, canonical source identity, and exact
canonical generation/content-set hash. The obligation carries no claim text
and grants no memory authority.
- The projector reads only the obligation plus the canonical CultCache source,
derives projection documents again, and refuses any generation mismatch.
### Completion Signal And Outputs
- `MemorySemanticIndexReceipt` is the completion signal only when it binds the
exact obligation, canonical source generation/content-set hash, collection
compatibility, indexed count, and terminal status. Its present shape lacks
the obligation/source-commit reference and therefore proves an indexing run,
not discharge of admission pressure.
- Projection health is derived: `ready` means the newest canonical obligation
has one exact successful receipt; `pending` means it has none; `failed` means
the latest attempt receipt failed while the obligation remains open; `stale`
means a newer canonical generation exists. Counts, timestamps, vectors, and
retry attempts remain notification/cache state.
- Semantic query correctness never waits for health. A missing or non-ready
receipt selects canonical BM25; a matching receipt permits Qdrant ranking
followed by canonical candidate revalidation.
### Nervous System, Idunn, And CultMesh
- The admission companion is the reflex. A scheduler may immediately queue it;
a periodic pulse may rediscover an uncompleted obligation after restart.
Neither timer nor heartbeat may invent an obligation, declare it complete,
advance its canonical generation, or suppress BM25 fallback.
- Idunn owns survival, restart, executable identity, and aftercare for the
projector daemon. It may report that the worker is unavailable or restart
it; it does not own canonical memory, projection demand, indexed truth, or
completion judgment.
- CultMesh carries typed obligation, attempt/receipt, and derived-health
projections for operators and consumers. It does not host a second queue or
writable health flag. Provider-owned CultCache documents remain the source;
CultMesh publication is a lowering of those documents, and Eve/Gjallar only
render them downstream.
### Forbidden Writers, Shared Paths, And Cut Line
- Forbidden completion writers: wall-clock timers, collection existence,
Qdrant point counts, payload prose, Idunn liveness, CultMesh mirrors, Eve or
Gjallar, and manual status commands.
- RepoModel repair/evolution/verdict admission and every reviewed agent-Mind
mutation must share the same `canonical commit + projection obligation`
primitive. Bootstrap/import may use it once; raw `cache.put` paths may not
bypass it.
- Cut first: replace direct agent-memory writes with an atomic admitted
generation/commit witness; extend the index receipt to bind an obligation;
then add the Idunn-hosted consumer and CultMesh health projection. Do not add
polling flags, file-mtime inference, or a reconciliation cache around the
current unwitnessed writes.
## Atomic Admission Landed (2026-07-15)
- Runtime-spine now carries one immutable binding to the canonical Mind-store
swarm identity. Runtime id, graph id, paths, metadata, and CLI labels cannot
substitute for it.
- RepoModel bootstrap, generic Modeling admission, and frontier-plan Adopt each
commit their canonical model witness and one deterministically derived
Modeling projection obligation in the same CAS. Exact retries require the
obligation; missing or colliding companions fail closed.
- A one-time legacy runtime migration preserves the unchanged bootstrap model,
migration receipt, and swarm binding envelopes while adding only the missing
obligation. The live runtime store passed this migration under
`gamecult.epiphany.main`.
- Reviewed Mind self-patches and lifecycle operations now commit the complete
canonical role generation, immutable/latest generation witness, persisted
Mind admission receipt, and exact Mind projection obligation in one CAS.
The canonical source hash is recomputed in fixed role order on every
admission and must authenticate the previous witness.
- JSON import, legacy repair, raw migration replacement, and canonical trait
seeding are explicitly bootstrap-only and structurally refuse after the
first admitted generation. SoA remains derived and cannot advance Mind.
- Empty canonical partitions still produce obligations. Empty is a demand to
remove stale scoped points, not permission to preserve a previous
projection.
Remaining: migrate the current legacy Mind rows into generation zero pressure;
add projector claims/attempt terminal CAS and bind index receipts to exact
obligations; make queries require the newest exact success before Qdrant
ranking; then publish derived health through provider-owned CultMesh state and
attach Idunn process survival.
## Projector Execution Rebuild Map (2026-07-15)
### Owner
One projector executor owns mutation of a semantic scope identified by
`(swarm_id, partition)` for the duration of an exact canonical obligation.
Canonical admission owns the obligation. The executor owns only its durable
claim, Qdrant synchronization, post-write observation, and terminal evidence.
Qdrant, health projections, schedulers, Idunn, CultMesh, Eve, and Gjallar own
none of those decisions.
### Inputs And Outputs
- Inputs: the newest exact obligation for the authenticated canonical source
head; the canonical snapshot reconstructed from that source; immutable swarm
identity; embedding and collection compatibility; projector incarnation.
- Success output: an immutable receipt bound to every obligation/source field,
emitted only after the observed scoped point set and typed payload identities
equal the derived canonical projection.
- Failure output: a terminal failed attempt for the claimed obligation. It
never erases the obligation or permits semantic query.
- Derived output: `pending`, `failed`, `stale`, or `ready` health. Health is
recomputed sight, not writable state.
### Derived State And Demotions
- `MemorySemanticProjectionHealth` is no longer a prospective daemon status;
it is derived from canonical head, newest matching obligation, exact attempt,
and exact receipt.
- Collection existence, compatibility, point counts, HTTP success, embedding
success, and process liveness are observations only.
- An older success is no longer readiness once a newer canonical obligation
exists. A repair attempt begun after success suppresses that success until a
newer successful terminal receipt proves the scope again.
### Forbidden Writers And Shared Paths
- The CLI may not call the raw indexer and `put` an unbound ready receipt.
- Query and Persona heartbeat recall may not touch Qdrant until the same gate
authenticates the current head, selects its newest exact obligation, and
finds its immutable exact success receipt.
- A caller-supplied swarm id, arbitrary graph-store snapshot, timer, collection
metadata, Qdrant payload, or renderer status cannot open the gate.
- Initial execution, crash replay, daemon restart, operator retry, and repair
all use the same scope claim and terminalization primitives.
### Cut Line
1. Remove the CLI's direct `index -> ordinary receipt put` authority path.
2. Replace it with a scope-serialized claim, idempotent synchronization, fresh
canonical-head reauthentication, post-write verification, and terminal CAS.
3. Delete the empty-partition refusal. An empty desired set bypasses Ollama,
deletes every point in its exact scope, preserves other scopes, and earns a
zero-document receipt; an absent collection is already synchronized.
4. Require the exact readiness gate before embedding or Qdrant query; otherwise
use canonical BM25 without touching either external service.
5. Only after execution and query authority are sealed, lower derived health to
CultMesh and give Idunn survival responsibility for the executor daemon.
### Restart And Concurrency Law
- Claims serialize the shared mutation scope, not merely an obligation id;
generations of one swarm partition overwrite the same point population.
- A crash before terminal evidence leaves pressure open. Replay is idempotent
and repairs partial upsert/delete work; partial state is never queryable.
- Recovery requires an explicit fenced incarnation/epoch. A wall-clock lease
alone may identify a candidate for recovery but cannot let the previous
executor publish afterward.
- Terminal success CAS expects the exact live claim and reauthenticated source
head. If the source advanced mid-run, the old mutation may exist in Qdrant
but cannot become ready; the newer obligation repairs it while queries use
canonical BM25.
## Projector Execution Landed (2026-07-15)
- The direct CLI `raw index -> ordinary receipt put` authority path is gone.
The public executor claims the exact `(swarm, partition)` scope, records a
running attempt, synchronizes Qdrant, observes the resulting scope, and can
publish success only through an exact terminal CAS against the unchanged
canonical authority envelopes.
- Claims carry executor identity and a monotonically fenced epoch. The internal
recovery transition terminalizes the abandoned attempt, advances the epoch,
and makes the old executor structurally unable to publish. That transition is
deliberately withheld from production callers until Idunn supplies typed
stale/recovery authority; a random peer cannot fence a live executor. Failed
execution leaves an exact failed terminal attempt and never grants readiness.
- Mind source authentication includes immutable swarm identity, all seven
canonical role rows, and the latest generation witness. Modeling source
authentication includes immutable runtime swarm binding and the canonical
RepoModel envelope. Both reconstruct and compare the obligation before work.
- Empty canonical partitions bypass Ollama. A missing collection already
represents the empty set; an existing compatible collection deletes every
point in the exact swarm/partition scope and confirms that none remain.
Non-empty synchronization observes the exact ID set and typed locator payload
set after upsert/delete before returning a candidate receipt.
- Semantic query now requires the newest authenticated source input plus its
exact immutable success receipt before either Ollama or Qdrant is touched.
CLI context and Persona heartbeat use this gate. Missing, stale, foreign, or
unbound evidence selects canonical BM25 and reports fallback.
- The live Mind generation-1 and Modeling revision-0 obligations for
`gamecult.epiphany.main` were discharged through the new protocol. Mind
indexed 43 documents and Modeling indexed 3 at 1024 dimensions. Repeated
execution returned the same receipts without another projection mutation;
live context then used Qdrant ranking while resolving every hit back to
canonical documents and ignoring payload prose.
Remaining physiology: publish provider-owned derived projection health through
CultMesh, attach Idunn-owned daemon survival and authorize the fenced recovery
transition with typed stale/recovery evidence, and add the daemon pulse that
discovers open obligations without letting time own their creation or
completion.
## CultMesh Health And Idunn Recovery Authority Map (2026-07-15)
### Owner
- Canonical Mind and Modeling admission own projection demand through the exact
source head and semantic-projection obligation in their source store.
- The projector executor owns only its scope claim, projection mutation,
post-write observation, attempt terminalization, and exact success receipt.
- The provider-side health projector owns recomputing and publishing derived
sight from that canonical evidence. It cannot mint the opaque readiness token
consumed by query.
- Idunn owns projector process survival, restart policy, stale-process
observation, and explicit recovery authorization. The projector still owns
the fenced recovery CAS; Idunn cannot write projection completion.
- CultMesh transports the provider-owned health projection. Eve, Gjallar, and
other downstream consumers lower or render it without acquiring authority.
### Inputs And Outputs
- Health input is an authenticated `MemorySemanticProjectionInput` plus the
exact claims, attempts, and receipts in the same canonical source store.
- Recovery input binds the exact swarm, partition, claim id, epoch, abandoned
executor incarnation, replacement executor incarnation, and Idunn evidence
that the abandoned process is dead or otherwise physically unable to write.
Elapsed time alone may nominate a stale claim for inspection; it cannot grant
fencing authority.
- Health output is one typed provider-authored CultMesh document per
`(swarm_id, partition)`: canonical source identity and generation, obligation
id, derived `pending|failed|stale|ready`, optional exact receipt and latest
attempt/error, provider incarnation, observation time, and private-state
seal. Any `queryEligible` field is display-only.
- Recovery output is an Idunn authorization/receipt paired with the projector's
epoch-advancing CAS. The old running attempt becomes terminally failed and the
replacement claim becomes the only logical completion writer.
### Physical Epoch Isolation
Projector mutation is now confined to the exact
`(obligation_id, claim_id, claim_epoch)` namespace. Qdrant payload filters bind
all three identities, physical point UUIDs include all three identities plus
the canonical locator point id, and payload `pointId` remains the canonical
locator identity. Empty synchronization, upsert, observation, deletion, and
query therefore address one claim incarnation only.
Success receipts use schema v2 and bind `claim_id`, `claim_epoch`, and the exact
post-scroll vector-binding root. Legacy receipts decode with empty/zero defaults
but cannot become query eligible. An authority-authenticated succeeded claim
with legacy or invalid receipt evidence derives the typed repair posture; claim
status alone never opens repair.
Opaque readiness carries the exact successful receipt, and query derives its
Qdrant filter only from that receipt. Activation is consequently the CultCache
terminal-success CAS selecting an already-observed physical namespace; a
fenced writer can continue harming only its abandoned namespace.
This cut makes the following structurally true:
- an executor can upsert, observe, query, and delete only within its own epoch;
- the exact success receipt binds the epoch namespace that query will filter or
address;
- activation of a successful epoch is atomic from the query gate's perspective;
- a superseded executor resuming late cannot mutate the active epoch;
- retirement and garbage collection of old epochs are separate derived
maintenance and cannot decide readiness.
Executor labels are diagnostic identity, not reusable capabilities: a second
claim call is refused even when it presents the same `executor_id`. Recovery
remains withheld until Idunn provides typed authorization; this physical cut
does not invent that grant.
### Derived State And Forbidden Writers
- Projection health, staleness, Qdrant counts, collection existence, process
liveness, timestamps, and latest error are observation/cache state only.
- Idunn command exit is not provider heartbeat, semantic readiness, or proof
that a restarted child initialized successfully.
- The health mirror, Self, operator commands, CultMesh, Eve, and Gjallar cannot
create obligations, attempts, receipts, canonical state, or readiness.
- Arbitrary peers cannot invoke recovery with free-form claim and reason
strings. Production recovery requires store-authenticated typed Idunn
authorization and physical epoch isolation.
### Provider-Status Ownership Cut
`epiphany-cluster-daemon` is the legitimate production writer of its typed
heartbeat/status. Idunn records stale observation, command execution, restart,
and awaiting-provider-heartbeat in scheduler/poke/recovery state without
rewriting provider status, operator action, or heartbeat time. A restarted
provider becomes ready only when that provider publishes a newer authentic
heartbeat; synthetic provider writers remain confined to test/quarantine
bodies.
This ownership cut is now landed. Scheduler staleness forces Idunn
reconciliation without changing the provider envelope. Command success records
`awaiting-provider-heartbeat`; failure records `restart-failed`. The persisted
poke intent binds the observed stale heartbeat and configured threshold, while
provider status, operator action, and `last_heartbeat_utc` remain unchanged.
Only a later provider-authored heartbeat can establish readiness.
Poke intent/receipt v1 binds the heartbeat observed before intervention and the
attempt/completion timestamps. Receipt-directory sight resolves
`awaiting-provider-heartbeat` only when the same provider publishes a heartbeat
newer than both that observation and the completed attempt. Command attempts
increase restart backoff pressure regardless of exit code; a causally newer
provider heartbeat is the sole event that clears the failure count. The bounded
survival rehearsal proves the provider envelope remains unchanged across two
successful restart commands while the lifecycle receipt remains awaiting,
then publishes a real provider heartbeat and proves the receipt resolves and
restart pressure resets.
Generated supervisor attempts use unique intent identities and receipt identity
derives from the intent. Identity plus latest-pointer publication is one CAS:
non-identical reuse is refused, exact retry is idempotent, and a delayed retry
cannot rewind the latest lifecycle observation.
### Shared Paths And Verification Layer
CultMesh health sight is landed.
- Owner: canonical Mind or Modeling CultCache state owns projection truth and
query admission. The semantic-health publisher owns only creation of the
non-authoritative CultMesh observation.
- Inputs: the canonical store, a sealed projection input whose obligation and
authority envelopes exactly match that store, and bounded opaque provider
runtime/incarnation identities. Ready observation additionally reloads and
authenticates the complete succeeded scope-claim, attempt, and receipt chain.
- Outputs: immutable local-area observation events plus one chronological
per-swarm/partition latest mirror carrying `pending|failed|ready`, canonical
fingerprints, bounded ready-only counts, provider identity, and timestamps.
- Derived state: mirror status, `queryEligibleDisplayOnly`, aggregate
`observed-ready|observed-attention|unknown`, and TUI rows are sight only.
- Forbidden writers: CultMesh rows, Verse/Eve/Gjallar consumers, Idunn, and
operator repair commands cannot create obligations, claims, attempts,
receipts, readiness, or semantic-query admission.
- Shared paths: `epiphany-memory-semantic health` is the sole explicit
publication pulse, and `epiphany-verse-query semantic-health` only lowers the
latest mirrors. Index execution emits its canonical receipt without calling
the sight publisher, so a mirror failure cannot redefine execution success.
- Cut line: there is no mirror-to-canonical import, mirror-to-Qdrant query, or
mirror-to-readiness edge. A stale sealed input is refused instead of being
published as current sight.
- Verification layer: tests exercise pending, authenticated ready, later failed
repair, stale-input refusal, bounded provider identities, mirror poisoning,
chronological latest behavior, private-text exclusion, and absence of
backend contact or query admission from forged sight.
The published document is explicitly non-authoritative,
provider/incarnation-stamped, private-state sealed, and contains no graph path,
error, command, or payload prose. Event and latest writes advance atomically
through a chronological compare-and-swap.
- Initial execution, retry, crash replay, scheduled rediscovery, and operator
request share the same projector execution primitive. A stuck running claim
branches only through typed Idunn recovery, then re-enters that path.
- Mind and Modeling authenticate from distinct canonical stores but publish the
same renderer-neutral CultMesh health schema.
- The daemon pulse discovers current open obligations after restart. It never
creates an obligation or infers completion from time, process state, or
Qdrant existence.
- Negative verification must prove supervisor tick/reconcile cannot change a
provider status envelope and command exit zero cannot produce a heartbeat.
- Recovery verification must suspend an old executor at each mutation phase,
recover under a new epoch, resume the old executor after replacement success,
and prove it cannot alter the active epoch or publish terminal success.
- Publication verification must derive every health state from canonical
evidence, repair a missing/stale CultMesh mirror without changing readiness,
and prove hostile mirror state cannot open semantic query.
- Restart verification must rediscover open Mind and Modeling obligations,
preserve exact-success idempotence, and require a real provider heartbeat
before Idunn reports the projector body ready.