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