Odin/docs/gjallar.md
2026-06-02 23:31:18 +01:00

5.2 KiB

Gjallar

Gjallar is the herald organ for Odin.

Odin is the all-seer: it accepts Verse discovery, schema catalogs, translation routes, provider surfaces, and observation projections. Gjallar is the transmission daemon that turns that sight into agent-ready context: a fractal tapestry of affordances across every Verse this Odin can currently see.

Gjallar should make the next capable agent less blind. It should not become a second Odin.

Authority Map

  • Owner: Gjallar owns agent-context transmission of Odin-owned sight.
  • 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.
  • 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.
  • Deletion line: any Gjallar path that starts storing independent discovery truth should be cut or demoted to a cache that names Odin as source.

Body

The initial local package is deliberately small:

  • personas/gjallar.persona_state.cc is the canonical repo-local Persona state: a CultCache MessagePack store containing a gamecult.persona_state.v0 document keyed as persona:gjallar.
  • scripts/write-gjallar-persona-cc.mjs mints and inspects that store from the canonical EpiphanyAgent schema. The script is a local writer, not Gjallar's runtime body.
  • src/Gjallar/Gjallar.csproj is the first C# CultMesh organ. It opens the Persona .cc store through CultMesh.CreateNodeAsync; typed Persona decode waits for a generated C# gamecult.persona_state.v0 model.
  • assets/personas/gjallar-avatar.png is the local avatar asset.
  • assets/personas/gjallar-avatar-pixel-256.png is the 256px pixel-art avatar variant for compact Persona surfaces.
  • This document is the organ contract until a runtime daemon exists.

When Gjallar becomes executable, package it as its own C# CultMesh runtime entrypoint beside Odin rather than folding it into src/odin-coordinator.cjs. The coordinator already owns lifecycle, refresh, persistence, and transport for 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:

id: gjallar
repoName: Odin
displayName: Gjallar
repoPath: E:\Projects\Odin
avatarPath: E:\Projects\Odin\assets\personas\gjallar-avatar.png
pixelAvatarPath: E:\Projects\Odin\assets\personas\gjallar-avatar-pixel-256.png
personaStateStore: E:\Projects\Odin\personas\gjallar.persona_state.cc
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.

CultMesh Runtime Direction

Gjallar's runtime body should be C# over GameCult.Mesh:

using GameCult.Mesh;

using var node = await CultMesh.CreateNodeAsync("personas/gjallar.persona_state.cc");

The current C# entrypoint opens the CultMesh node without pulling typed payloads because the C# document model for gamecult.persona_state.v0 has not been generated yet. The next durable act should generate that model, read the persona:gjallar record from the local CultCache, and publish an affordance packet document through CultMesh. Do not make a JSON sidecar the source of truth while waiting for that runtime.

Invariants

  • Gjallar is a herald, not a second source of truth.
  • Odin remains the accepted owner of all-seer state.
  • Verse owners remain owners of their local schemas, command boundaries, and provider surfaces.
  • Agent consumers receive provenance: what Odin saw, where it came from, and whether it is authoritative, stale, predicted, denied, or unavailable.
  • If Gjallar cannot name the Odin record behind a claim, the claim is not ready for durable transmission.

First Affordance Packet Shape

Keep the first packet plain until the schema earns promotion:

source: Odin state document or Eve/CultUI provider record
verse: Verse or provider id
surface: service, interface, observation-stream, schema, or translation route
affordance: what an agent can inspect, request, invoke, or lower
authority: owner of the real decision
status: authoritative, stale, predicted, denied, unavailable, or unknown
provenance: endpoint, document id, timestamp, and version when available

No regex tribunal for meaning. If natural-language interpretation is needed, use a capable reader and keep the accepted packet inspectable.