diff --git a/README.md b/README.md index f4ba52f..3a77c80 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ swarm alive after Odin has accepted where each daemon lives and what authority path may touch it. Individual daemons publish health and command boundaries; Idunn brings them up after reboots or crashes, watches health, and escalates operator-needed failures through Bifrost's CultMesh bridge. VoidBot owner-DM -delivery is a compatibility actuator until that command lives natively in -Bifrost's Verse. Odin sees the daemons; Idunn keeps the apples from rotting. +delivery is a demoted compatibility actuator, not the owner; the command belongs +in Bifrost's Verse. Odin sees the daemons; Idunn keeps the apples from rotting. Local package surfaces: diff --git a/docs/architecture.md b/docs/architecture.md index 3d43ce2..dc78b3a 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -69,11 +69,11 @@ Odin's executable body is split by ownership: The entrypoint is not allowed to grow new probe, surface, provider, layout, or renderer policy. If a new owner is needed, name the owner and its invariant before adding code. -Gjallar is the named herald organ for future agent-context transmission. Its +Gjallar is the named herald organ for agent-context transmission. Its current package lives in `docs/gjallar.md`, `personas/gjallar.persona_state.cc`, `src/Gjallar/Gjallar.csproj`, `assets/personas/gjallar-avatar.png`, and `assets/personas/gjallar-avatar-pixel-256.png`. When it becomes executable, it -should be added as its own C# CultMesh entrypoint rather than being folded into +must be added as its own C# CultMesh entrypoint rather than being folded into Odin's coordinator. Gjallar may read Odin-owned state and emit affordance packets; it must not own the underlying registry, probe, provider, layout, or translation decisions. @@ -83,24 +83,26 @@ lives in `docs/idunn.md` and `src/Idunn/Idunn.csproj`. Idunn may read Odin-owned service records and provider advertisements, then bring daemons up after reboots or crashes, watch health, emit keepalive observations, restart requests, denied-action records, and operator alarms. When human action is -needed, Idunn should use CultMesh to request a Bifrost-owned operator +needed, Idunn uses CultMesh to request a Bifrost-owned operator notification crossing. VoidBot's `voidbot.operator-dm` command `owner.dm.send` -is only a compatibility delivery actuator until that command lives natively in -Bifrost's Verse. Idunn must not own Verse discovery, schema truth, provider -dashboards, identity grants, Discord delivery, owner-DM delivery, or renderer -layout. Keepalive loops should move into Idunn instead of accumulating inside -Odin's coordinator or individual daemons. +is a demoted compatibility delivery actuator, not the owner. The target command +lives in Bifrost's Verse; any still-VoidBot delivery path must be invoked by +Bifrost or documented as migration debt. Idunn must not own Verse discovery, +schema truth, provider dashboards, identity grants, Discord delivery, owner-DM +delivery, or renderer layout. Keepalive loops belong in Idunn, not Odin's +coordinator or individual daemons. Bifrost is the bridge for Persona speech and other public/owner-facing -crossings. When a Persona interpreter decides a Face should speak, the accepted -side effect should be a Bifrost CultMesh command or document that names actor, -authority, target surface, context, policy result, and receipt path. VoidBot may -observe Discord, preserve room cognition, moderate, and provide compatibility -delivery while the migration is underway, but it must not remain the owner of -swarm speech transport. VoidBot's repo search, Discord history search, archive -lookup, and source retrieval should be native CultCache/CultMesh services; MCP -is the bridge for external agentic access, not the native path for GameCult -agents that already have CultMesh affordances. +crossings. When a Persona interpreter decides a Face speaks, the accepted +side effect is a Bifrost CultMesh command or document that names actor, +authority, target surface, context, policy result, and receipt path. VoidBot +observes Discord, preserves room cognition, moderates, and may provide +compatibility delivery, but it is not the owner of swarm speech transport. +VoidBot's repo search, Discord history search, archive lookup, and source +retrieval are required native CultCache/CultMesh service surfaces. Any remaining +VoidBot-local or MCP-only implementation is migration debt. MCP is the bridge +for external agentic access, not the native path for GameCult agents that +already have CultMesh affordances. ## Target Mechanism diff --git a/docs/gjallar.md b/docs/gjallar.md index 9fbc36f..94816b8 100644 --- a/docs/gjallar.md +++ b/docs/gjallar.md @@ -26,7 +26,7 @@ second Odin. provider-owned dashboards, own renderer layout, or invent schema translation routes. - Shared paths: human dashboards, Codex context assembly, native CultMesh agent - bootstrap, Bifrost-routed Persona speech, and compatibility MCP access should + bootstrap, Bifrost-routed Persona speech, and compatibility MCP access must consume the same Odin-owned records before Gjallar speaks. - Deletion line: any Gjallar path that starts storing independent discovery truth should be cut or demoted to a cache that names Odin as source. @@ -57,9 +57,9 @@ Odin. Gjallar's entrypoint should own context publication and no more. ## Persona Registration VoidBot's current native Persona reader expects a JSON `personaStatePath`. That -is a compatibility projection boundary, not the state owner and not the future -transport owner. A future registry entry should point at a generated projection -or learn to read the CultCache record; the canonical source remains: +is a compatibility projection boundary, not the state owner and not the +transport owner. Any registry entry must point at a generated projection or +learn to read the CultCache record; the canonical source remains: ```text id: gjallar @@ -74,17 +74,16 @@ personaStateSchema: gamecult.persona_state.v0 ``` That compatibility registration belongs in the current Discord adapter, not -here. This repo owns the Persona source record and avatar. Bifrost should own -the CultMesh speech crossing when a Persona interpreter decides it wants to -speak; Discord is then a Bifrost lowering/receipt path, with VoidBot acting only -as legacy room cognition and delivery machinery until the native bridge is -complete. +here. This repo owns the Persona source record and avatar. Bifrost owns the +CultMesh speech crossing when a Persona interpreter decides it wants to speak. +Discord is then a Bifrost lowering/receipt path, with VoidBot acting only as +legacy room cognition and compatibility delivery machinery. ## Transport Boundary Persona speech is a bridge crossing. The interpreter may decide that a Face -should speak, but the public transport request should be a Bifrost CultMesh -command or document, not a VoidBot-owned side effect. +speaks, but the public transport request is a Bifrost CultMesh command or +document, not a VoidBot-owned side effect. Target shape: @@ -96,11 +95,12 @@ Persona runtime / interpreter -> Bifrost receipt ``` -VoidBot still owns Discord observation, room cognition, moderation judgment, and -compatibility delivery while that bridge is being moved. Its repo search, -Discord history search, and archive/source retrieval should become native -CultCache/CultMesh services. MCP remains a bridge for external agentic access, -not the native affordance path for GameCult agents that can speak CultMesh. +VoidBot owns Discord observation, room cognition, moderation judgment, and +compatibility delivery. Its repo search, Discord history search, and +archive/source retrieval are required native CultCache/CultMesh services. Any +remaining VoidBot-local or MCP-only implementation is migration debt. MCP is a +bridge for external agentic access, not the native affordance path for GameCult +agents that can speak CultMesh. ## CultMesh Runtime Direction diff --git a/docs/idunn.md b/docs/idunn.md index bd6d89f..935317e 100644 --- a/docs/idunn.md +++ b/docs/idunn.md @@ -35,7 +35,7 @@ state. repair, boot rehydration, and future remote worker recovery must pass through the same keepalive command primitive. - Deletion line: any keepalive loop inside Odin, Gjallar, Eve lowerers, or - renderer code should be cut or demoted to a probe that names Idunn as the + renderer code must be cut or demoted to a probe that names Idunn as the restart owner. ## Body @@ -67,7 +67,7 @@ idunn.operator_escalation.v1 - Odin remains the accepted owner of Verse and service discovery. - Idunn owns continuity decisions after a daemon is known. - Individual daemons own their work and their health publication, not their - surrounding lifecycle. They should be simple to kill and simple for Idunn to + surrounding lifecycle. They must be simple to kill and simple for Idunn to bring back. - Providers own their own command boundaries. Idunn requests restart through advertised authority or a named local service manager adapter. @@ -83,9 +83,11 @@ idunn.operator_escalation.v1 - Operator alarms use CultMesh to request Bifrost-owned operator notification. Bifrost is the bridge for the crossing and records the receipt. VoidBot's `voidbot.operator-dm` command `owner.dm.send` with payload schema - `gamecult.operator_dm_request.v1` is a compatibility delivery actuator until - the owner-DM command lives natively in Bifrost's Verse. Idunn must not learn - Discord token handling, DM delivery internals, or VoidBot-specific transport. + `gamecult.operator_dm_request.v1` is a demoted compatibility delivery + actuator, not the owner. The owner-DM command lives in Bifrost's Verse; any + still-VoidBot delivery path must be invoked by Bifrost or documented as + migration debt. Idunn must not learn Discord token handling, DM delivery + internals, or VoidBot-specific transport. ## First Runtime Direction @@ -101,5 +103,5 @@ Idunn's C# runtime should grow in this order: VoidBot owner-DM delivery only as a demoted compatibility target. 7. Publish an Eve/CultUI keepalive surface from Idunn-owned records. -No ad hoc JSON manifest should become the live state owner. Debug projections -are fine when they name the `.cc` record or CultMesh document behind them. +No ad hoc JSON manifest may become the live state owner. Debug projections are +fine when they name the `.cc` record or CultMesh document behind them.