136 lines
7.2 KiB
Markdown
136 lines
7.2 KiB
Markdown
# Odin
|
|
|
|
Odin is the GameCult all-seer: the central CultMesh node every Verse can use to discover the other Verses, inspect schema catalogs, and find translation paths between local realities.
|
|
|
|
It is not the renderer. It is not Eve. It is not a Starfire utility script wearing a bigger coat. Odin owns discovery, schema awareness, translation planning, and accepted operator surfaces. Eve clients and Gjallar lower Odin's published CultUI surface into whatever body they have.
|
|
|
|
Odin is also the compliance witness for the GameCult service architecture:
|
|
durable service state in CultCache `.cc`, local Verse visibility through
|
|
CultMesh, meaningful presentation as Eve GUI/TUI DSL, and renderers as lowerers
|
|
only.
|
|
|
|
## Rust Spine
|
|
|
|
The target Odin body is Rust-first: ingest through narrow ports, normalize into
|
|
typed Odin records, persist through CultCache `.cc`, expose through CultMesh /
|
|
CultNet document registries over the shared RUDP transport, and lower
|
|
interface state through Eve/CultUI.
|
|
|
|
The first Rust core lives in `crates/odin-core` and already separates typed
|
|
documents, ingest ports, normalization, and repository persistence so unit tests
|
|
can use mocked inputs and pipeline smokes can prove typed handoff without
|
|
booting the whole daemon. Gjallar is not part of that Rust record spine: it is
|
|
the Nightwing-resident terminal compositor in `E:\Projects\Gjallar` that
|
|
consumes Odin's accepted `gamecult.eve.surface_state` snapshot over CultNet/RUDP
|
|
and renders the live display.
|
|
|
|
## Gjallar
|
|
|
|
Gjallar is the herald display daemon that runs on Nightwing. Odin sees the
|
|
Verses, accepts provider surfaces, and publishes the `odin.providers` catalog.
|
|
Gjallar consumes Odin's accepted surface snapshot over CultNet/RUDP, composes
|
|
the multi-scale tiled dashboard from that typed state, lowers Odin's canonical
|
|
marquee tape into continuous gutter text, owns dense character-level update
|
|
behavior, and writes the visible framebuffer.
|
|
|
|
Local package surfaces:
|
|
|
|
- Organ contract: `docs/gjallar.md`
|
|
- Branding Persona state: `personas/gjallar.persona_state.cc`
|
|
- Runtime source: `E:\Projects\Gjallar`
|
|
- Avatar asset: `assets/personas/gjallar-avatar.png`
|
|
- Pixel avatar: `assets/personas/gjallar-avatar-pixel-256.png`
|
|
|
|
## Idunn
|
|
|
|
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 Bifrost's CultMesh bridge. VoidBot owner-DM
|
|
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.
|
|
Agents do not deploy daemons directly. They configure Idunn's target catalog,
|
|
release targets, migration commands, and command boundaries so Idunn can run
|
|
the shared rollout primitive and leave typed witnesses behind.
|
|
|
|
Local package surfaces:
|
|
|
|
- Organ contract: `docs/idunn.md`
|
|
- User README: `src/Idunn/README.md`
|
|
- Rust daemon crate: `crates/idunn-daemon`
|
|
- Rust lifecycle logic: `crates/odin-core/src/idunn.rs`
|
|
- Runtime store: `scratch/idunn/idunn.keepalive.cc`
|
|
- Local VoidBot keepalive: `scripts\health-voidbot.cmd` and
|
|
`scripts\restart-voidbot.cmd`
|
|
- Operator escalation: Bifrost-owned CultMesh crossing; current compatibility
|
|
delivery calls `scripts\notify-idunn-operator-alarm.ps1`, which asks Bifrost
|
|
to publish a typed `gamecult.operator_dm_request.v1` CultMesh command document
|
|
only after Idunn raises an alarm
|
|
|
|
## Authority Map
|
|
|
|
- Owner: Odin owns the network-wide Verse registry, schema catalog index, translation map, and accepted provider catalog/proxy surfaces.
|
|
- Inputs: CultMesh/CultNet peer announcements, schema catalog responses, daemon
|
|
health/provider publications over `cultnet.transport.rudp.v0`, local
|
|
compatibility probes, Docker/ADB host facts, SSH-reachable ops hosts, and
|
|
Mimir's normalized Eve observation ledger.
|
|
- Outputs: CultCache-backed Odin state, CultMesh documents, CultNet
|
|
schema/catalog messages, and an Eve-compatible `/eve/deck` surface for
|
|
dashboards during the bridge period.
|
|
- Derived state: Gjallar's attached Nightwing display, browser dashboards, and future Eve clients are projections of Odin state and provider-owned Eve/CultUI surfaces.
|
|
- Forbidden writers: renderers do not probe the network or decide Verse truth; individual projects do not maintain private incompatible discovery ledgers once Odin can see them.
|
|
- Shared paths: human dashboards, worker schedulers, Verse bootstrap code, and compact TUI views consume the same registry and schema catalog.
|
|
- Deletion line: old per-host coordinator scripts should be deleted or reduced to deployment wrappers that start Odin.
|
|
|
|
## Run Locally On Starfire
|
|
|
|
```powershell
|
|
.\scripts\start-odin.ps1
|
|
curl.exe -fsS http://127.0.0.1:8797/health
|
|
```
|
|
|
|
The Eve/CultUI deck endpoint is a compatibility bridge:
|
|
|
|
```text
|
|
ws://127.0.0.1:8797/eve/deck
|
|
```
|
|
|
|
The native CultNet/RUDP snapshot endpoint is:
|
|
|
|
```text
|
|
127.0.0.1:17871
|
|
```
|
|
|
|
Legacy browser/deck lowerers can consume the LAN bridge endpoint:
|
|
|
|
```text
|
|
ws://192.168.1.66:8797/eve/deck
|
|
```
|
|
|
|
State and logs live under ignored `scratch/odin/`.
|
|
|
|
## Current First Body
|
|
|
|
The first executable is deliberately narrow:
|
|
|
|
- publishes provider catalog `odin.providers`;
|
|
- writes the latest surface to `scratch/odin/latest-surface.json`;
|
|
- persists the same document through local CultMesh/CultCache when `CultLib` packages are available at `E:\Projects\CultLib\packages`;
|
|
- observes Starfire Docker, Periwinkle ADB, Nightwing services/GPU, Raven, EVE, and Yggdrasil reachability;
|
|
- exposes Yggdrasil service status when the local SSH alias can reach it.
|
|
- publishes explicit `verse` and `service` nodes for compact Eve/CultUI lowerers.
|
|
- publishes explicit `observation-stream` nodes for Periwinkle/EVE sensor, microphone, touch, and camera stream summaries when Mimir's CultMesh observation ledger is present.
|
|
- discovers Eve deck provider manifests from known/LAN deck endpoints as a
|
|
compatibility bridge while daemon CultLib dependencies migrate to CultNet
|
|
RUDP transport profiles;
|
|
- includes local Spotiverse on `ws://127.0.0.1:8796/eve/deck` in the known provider seed list;
|
|
- ingests provider-owned Eve/CultUI dashboards, including `mimir.live.stats` and `voidbot.swarm`, and embeds them as Odin `interface` nodes;
|
|
- accepts `gamecult.eve.provider_advertisement.v1` documents in CultMesh interface binding stores so daemons can announce schemas, `.cc` witnesses, surfaces, commands, nested Verses, and style capabilities without Odin scraping private dashboards;
|
|
- preserves provider semantic addresses such as `asgard.starfire.bifrost/eve/tui` and `asgard.starfire.bifrost/eve/gui`, with CultNet routes and WebSocket bridges carried as transport metadata rather than identity;
|
|
- persists operator tiling intent as `odin.interface_layout.v1` under ignored `scratch/odin/interface-layout.json`.
|
|
|
|
The next real cut is to make provider advertisements and CultNet RUDP transport
|
|
profiles the primary discovery path. Static host probes, LAN Eve deck scans,
|
|
hardcoded deck URLs, HTTP health checks, TCP probes, and WebSocket bridges are
|
|
compatibility input adapters. They must not become the architecture.
|