No description
  • Rust 93.2%
  • PowerShell 5.7%
  • C 0.5%
  • HLSL 0.4%
  • Batchfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens d2689af772 Speak the shared media contract instead of a private copy
Muninn's media records now come from CultLib rather than odin-core, and its
envelope, record keys, validators and chunk key are gone in favour of the shared
ones. 608 lines removed against 149 added, nearly all of it duplication that
existed because there was nowhere else to put it.

What went, and why it was there:

The four *WirePayload tuple structs restated each record's entire field list
positionally, kept in step by hand, for the sole purpose of applying
serde_bytes to the payload — a workaround for the DatabaseEntry derive ignoring
serde attributes. The records carry `bytes` now, so the derive emits bin itself.
CultLib has a test comparing both encodings byte for byte before the deletion.

encode/decode_media_wire_record, the four record-key builders, the four record
validators, VideoChunkKey and the feedback-key normaliser were all contract
living inside one producer. A consumer needed every one of them and had to
reimplement or approximate them, which is precisely how the C++ receiver drifted.

Muninn keeps what is genuinely its own: it names itself as producer, once, in
MUNINN_MEDIA_PRODUCER, and passes that through MediaWireProvenance. The envelope
no longer hardcodes "muninn-media:" and "muninn.media" into documents any other
producer would also have had to emit.

One test changed meaning rather than being deleted. A hex fixture captured from
the deployed C++ OBS bridge carries muninn.media_receiver_feedback.v1, which the
rename retires. It is now
`the_previous_generation_bridge_is_deliberately_no_longer_understood` and asserts
the refusal, naming what it refused. That break is real and accepted: the bridge
is being replaced by Ratatoskr, and accepting both schema names would preserve
the ownership confusion the rename exists to remove. If that test starts passing,
someone has put the old id back.

Requires CultLib 96138ff on claude/cultmesh-media-stream-contract. The pin in
Cargo.toml still points at c13b6ba and must move before this builds clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 02:24:17 +02:00
crates Speak the shared media contract instead of a private copy 2026-09-10 02:24:17 +02:00
docs Record Ratatoskr, and what still blocks it 2026-09-10 01:42:57 +02:00
native Observe scheduled Move hues through PSMoveAPI 2026-07-12 22:07:41 +01:00
scripts Rebase Idunn actuator scripts off the projects root 2026-09-04 01:05:40 +02:00
.gitignore Give the extracted Muninn a root of its own 2026-09-09 23:04:41 +02:00
Cargo.toml Give the extracted Muninn a root of its own 2026-09-09 23:04:41 +02:00
README.md Give the extracted Muninn a root of its own 2026-09-09 23:04:41 +02:00

Muninn

Local capture broker for the GameCult swarm.

Muninn resolves what data streams a host can offer, advertises them, and serves them to CultMesh peers on request. Screen and loopback audio, cameras, PS Move controllers and their optical markers, HID and XInput gamepads, Quest access.

Muninn running does not mean Muninn is broadcasting. Each feed it can reach is available for another service to request. Mimir asks for sensors. Sleipnir asks for input. A stream asks for screen and audio. Muninn does not decide what any of them are for.

Extracted from Odin with its full history. Muninn had lived as three crates inside the repository of the service that discovers it, with its document schemas owned by odin-core — an inversion of the ownership it needs to hold. Same shape as the Idunn extraction of 2026-09-05, and done deliberately after it.


Status

This repository does not build yet. It is a faithful history extraction, not a finished cut. muninn-daemon still depends on odin-core by path for the twenty record types and schema constants it uses, and that dependency is one of the things being removed.

See docs/teardown-map.md for the working map: current body, the authorities currently fused into one 14,567-line main.rs, schema decomposition, extraction blast radius, and the measured diagnosis of the audio decay that prompted the rebuild.

Authority

  • Owner: Muninn owns local source enumeration, capability advertisement, per-consumer stream grants, and transport of granted streams.
  • Input: locally reachable devices; typed capture stream commands from requesting peers.
  • Output: CultMesh Media Streams and typed sensor records.
  • Not Muninn's: the media protocol itself (a general CultMesh contract, owned by CultLib), discovery and rendezvous (Odin), deployment and continuity (Idunn), the hue programs that decide what colour a Move should be (Mimir), and any consumer's lowering — OBS, browser, or otherwise.

Muninn is one producer of a general contract. It is not the contract.