Odin/docs/gjallar.md

88 lines
3.9 KiB
Markdown

# 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:
```powershell
dotnet build E:\Projects\Gjallar\src\Gjallar\Gjallar.csproj
```
Publish for Nightwing:
```powershell
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
```text
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.