Odin/docs/gjallar.md

3.9 KiB

Gjallar

Gjallar is the Nightwing-resident terminal compositor for Odin's domain.

Odin is the all-seer: it accepts Verse discovery, schema catalogs, translation routes, provider surfaces, and observation projections. Gjallar talks to Odin, enumerates the active provider surfaces Odin can show, and composes those surfaces into the live multi-scale dashboard running on Nightwing.

Gjallar exists so Odin does not need to care how a pile of provider-owned TUIs fits on one fast display, and provider daemons do not need to know the terminal body they are being lowered into.

Authority Map

  • Owner: Gjallar owns Nightwing dashboard composition, tiling, marquee lowering, visual density, framebuffer presentation, and character-level refresh behavior.
  • Inputs: Odin's Eve/CultUI deck endpoint, provider ids, provider-owned surface graphs, Odin's canonical marquee tape, display constraints, font choices, and operator runtime flags.
  • Outputs: the visible Nightwing framebuffer and compact Gjallar frame/status telemetry.
  • Derived state: panel packing, visual weight, tile position, gutter cells, marquee glyph positions, glyph size, and frame timing are derived from Odin/provider surfaces plus display constraints.
  • Forbidden writers: Gjallar does not probe hosts, accept Verse truth, mutate provider-owned dashboards, invent schema translation routes, or replace Odin's provider registry.
  • Shared paths: Nightwing's physical display, local frame dumps, future compact overlays, and agent-facing TUI captures should all lower the same Gjallar composition behavior when they want the "everything Odin can show" view.
  • Deletion line: the old Rust gjallar.overview feed is not a runtime authority. Any path that wants Nightwing composition belongs in E:\Projects\Gjallar; any path that decides discovery truth belongs in Odin.

Body

  • E:\Projects\Gjallar is Gjallar's executable C# runtime repo.
  • Gjallar.csproj builds the Nightwing framebuffer compositor.
  • Gjallar currently consumes Odin's provider catalog over the compatibility HTTP/WebSocket deck bridge, defaulting to ws://192.168.1.66:8797/eve/deck with no fixed provider id. The target input path is a native CultNet subscription over cultnet.transport.rudp.v0; the WebSocket bridge is not daemon-owned truth.
  • The old Rust crates/gjallar-daemon and gjallar.overview records were cut because they created an intermediate composition owner that did nothing Odin and Gjallar's live renderer could not explain directly.
  • assets/personas/gjallar-avatar.png and assets/personas/gjallar-avatar-pixel-256.png remain branding assets for the view/persona surface.

Build from the repo root:

dotnet build E:\Projects\Gjallar\src\Gjallar\Gjallar.csproj

Publish for Nightwing:

dotnet publish E:\Projects\Gjallar\src\Gjallar\Gjallar.csproj -c Release -r linux-x64 --self-contained true -o E:\Projects\Gjallar\scratch\publish\gjallar

Runtime Contract

provider-owned Eve/CultUI surfaces
  -> Odin discovery and provider catalog/proxy surfaces
  -> Odin canonical Stonks/poetry marquee tape
  -> Gjallar provider enumeration, packing, marquee lowering, and framebuffer lowering
  -> Nightwing visible display

Nightwing is the host/body. Gjallar is the product that runs there. Odin owns the accepted discovery/provider view. Each daemon owns its own surface truth.

Invariants

  • Odin remains the accepted owner of all-seer discovery and provider indexing.
  • Gjallar owns display composition, not discovery truth.
  • Provider surfaces are lowered, not rewritten into status summaries.
  • Marquee content is not provider-boundary status noise. Odin publishes the canonical tape; Gjallar renders it as one continuous stream across gutter rows.
  • Missing or invalid provider surfaces disappear or render as unavailable; they do not become invented truth.
  • Frame/status telemetry observes Gjallar's rendering behavior only.