Route swarm transport authority through Bifrost
This commit is contained in:
parent
27ec51ec9a
commit
d7da79fbc3
5 changed files with 75 additions and 32 deletions
|
|
@ -41,15 +41,17 @@ Idunn is Odin's keepalive organ: the daemon package that should keep the known
|
|||
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 VoidBot's CultMesh owner-DM command. Odin sees
|
||||
the daemons; Idunn keeps the apples from rotting.
|
||||
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.
|
||||
|
||||
Local package surfaces:
|
||||
|
||||
- Organ contract: `docs/idunn.md`
|
||||
- C# CultMesh organ: `src/Idunn/Idunn.csproj`
|
||||
- Runtime store: `scratch/idunn/idunn.keepalive.cc`
|
||||
- Operator escalation: `voidbot.operator-dm` command `owner.dm.send`
|
||||
- Operator escalation: Bifrost-owned CultMesh crossing; current compatibility
|
||||
delivery may call `voidbot.operator-dm` command `owner.dm.send`
|
||||
|
||||
## Authority Map
|
||||
|
||||
|
|
|
|||
|
|
@ -83,13 +83,25 @@ 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 VoidBot's provider-owned
|
||||
`voidbot.operator-dm` command `owner.dm.send` with payload schema
|
||||
`gamecult.operator_dm_request.v1`. It must not own Verse discovery, schema
|
||||
truth, provider dashboards, identity grants, Discord delivery, or renderer
|
||||
needed, Idunn should use 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.
|
||||
|
||||
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.
|
||||
|
||||
## Target Mechanism
|
||||
|
||||
```text
|
||||
|
|
|
|||
|
|
@ -16,17 +16,18 @@ second Odin.
|
|||
- Inputs: Odin's accepted registry, schema index, translation map, provider
|
||||
interfaces, observation-stream summaries, layout hints, and provenance
|
||||
metadata.
|
||||
- Outputs: compact affordance packets for Codex, VoidBot, repo Faces, and other
|
||||
agent consumers; optional Persona-facing memory summaries that name what Odin
|
||||
can see and what can be acted on.
|
||||
- Derived state: summaries, prompts, Persona projections, Discord speech, and
|
||||
handoff notes are notification-only projections of Odin state.
|
||||
- Outputs: compact affordance packets for Codex, native CultMesh agents, repo
|
||||
Faces, Bifrost, and other agent consumers; optional Persona-facing memory
|
||||
summaries that name what Odin can see and what can be acted on.
|
||||
- Derived state: summaries, prompts, Persona projections, Bifrost speech
|
||||
requests, Discord lowerings, and handoff notes are notification-only
|
||||
projections of Odin state.
|
||||
- Forbidden writers: Gjallar does not probe hosts, decide Verse truth, mutate
|
||||
provider-owned dashboards, own renderer layout, or invent schema translation
|
||||
routes.
|
||||
- Shared paths: human dashboards, Codex context assembly, VoidBot repo-Face
|
||||
heartbeats, and future agent bootstrap should consume the same Odin-owned
|
||||
records before Gjallar speaks.
|
||||
- Shared paths: human dashboards, Codex context assembly, native CultMesh agent
|
||||
bootstrap, Bifrost-routed Persona speech, and compatibility MCP access should
|
||||
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.
|
||||
|
||||
|
|
@ -56,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 projection boundary, not the state owner. A future VoidBot 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 future
|
||||
transport owner. A future registry entry should point at a generated projection
|
||||
or learn to read the CultCache record; the canonical source remains:
|
||||
|
||||
```text
|
||||
id: gjallar
|
||||
|
|
@ -72,9 +73,34 @@ personaStateKey: persona:gjallar
|
|||
personaStateSchema: gamecult.persona_state.v0
|
||||
```
|
||||
|
||||
That registration belongs in VoidBot's registry, not here. This repo owns the
|
||||
Persona source record and avatar; VoidBot owns the speech transport and room
|
||||
identity wiring.
|
||||
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.
|
||||
|
||||
## 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.
|
||||
|
||||
Target shape:
|
||||
|
||||
```text
|
||||
Persona runtime / interpreter
|
||||
-> Bifrost speech request through CultMesh
|
||||
-> Bifrost policy, Heimdall claims, topic/work/context linkage
|
||||
-> Discord, GitHub, owner DM, or future public surface lowering
|
||||
-> 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.
|
||||
|
||||
## CultMesh Runtime Direction
|
||||
|
||||
|
|
|
|||
|
|
@ -21,11 +21,11 @@ state.
|
|||
local service manager state, and direct local service probes only when no
|
||||
provider advertisement exists.
|
||||
- Outputs: typed keepalive observations, restart requests, denied-action
|
||||
records, operator alarms, owner-DM escalation requests through VoidBot, and an
|
||||
records, operator alarms, Bifrost operator-notification requests, and an
|
||||
Eve/CultUI keepalive surface.
|
||||
- Derived state: dashboard cells, Discord speech, agent summaries, and Odin
|
||||
service projections are notification-only views of Idunn-owned keepalive
|
||||
records.
|
||||
- Derived state: dashboard cells, Bifrost receipts, Discord or owner-DM
|
||||
lowerings, agent summaries, and Odin service projections are
|
||||
notification-only views of Idunn-owned keepalive records.
|
||||
- Forbidden writers: Idunn does not decide which Verses exist, invent provider
|
||||
schemas, mutate provider dashboards, own identity/session grants, or hide
|
||||
restarts behind Odin refresh logic. Individual daemons should not carry
|
||||
|
|
@ -59,7 +59,7 @@ idunn.keepalive_decision.v1
|
|||
idunn.restart_request.v1
|
||||
idunn.restart_result.v1
|
||||
idunn.operator_alarm.v1
|
||||
idunn.owner_dm_escalation.v1
|
||||
idunn.operator_escalation.v1
|
||||
```
|
||||
|
||||
## Invariants
|
||||
|
|
@ -80,10 +80,12 @@ idunn.owner_dm_escalation.v1
|
|||
- Idunn should fail closed when authority is unclear. Unknown ownership,
|
||||
repeated restart failure, missing command authority, or degraded health that
|
||||
needs a human becomes an operator alarm.
|
||||
- Operator alarms use CultMesh to request VoidBot owner notification through
|
||||
the provider-owned `voidbot.operator-dm` command `owner.dm.send` with payload
|
||||
schema `gamecult.operator_dm_request.v1`. Idunn must not learn Discord token
|
||||
handling or DM delivery internals.
|
||||
- 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.
|
||||
|
||||
## First Runtime Direction
|
||||
|
||||
|
|
@ -95,7 +97,8 @@ Idunn's C# runtime should grow in this order:
|
|||
4. Emit `idunn.keepalive_decision.v1` records without acting.
|
||||
5. Add restart adapters only for named authority boundaries: local systemd,
|
||||
Windows service control, Docker, or provider-advertised commands.
|
||||
6. Add `voidbot.operator-dm` escalation for cases that need operator action.
|
||||
6. Add Bifrost operator escalation for cases that need human action, with
|
||||
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
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ Console.WriteLine("Idunn CultMesh organ initialized.");
|
|||
Console.WriteLine($"Keepalive store: {cachePath}");
|
||||
Console.WriteLine("Provider id: idunn.keepalive");
|
||||
Console.WriteLine("Authority: daemon lifecycle, health watching, restart intent, and operator escalation for Odin-known daemons");
|
||||
Console.WriteLine("Owner escalation: CultMesh command voidbot.operator-dm owner.dm.send");
|
||||
Console.WriteLine("Owner escalation: Bifrost CultMesh bridge; VoidBot owner DM is compatibility delivery only");
|
||||
Console.WriteLine($"CultMesh server: {(options.Serve ? "started" : "disabled")}");
|
||||
Console.WriteLine("Typed keepalive records and restart adapters are the next cut.");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue