Make Bifrost transport ownership mandatory

This commit is contained in:
Meta Vens 2026-06-04 19:21:22 +01:00
commit 800cdc6c3f
4 changed files with 46 additions and 42 deletions

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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.