Record Muninn loss recovery authority
This commit is contained in:
parent
58e5556322
commit
6a7aaea019
3 changed files with 33 additions and 2 deletions
|
|
@ -456,13 +456,25 @@ encoder keyframe actuation, production parity recovery, audio FEC/concealment,
|
|||
bounded long-disconnect edge admission, adaptive sender response, and the
|
||||
fault-injected socket timeline harness.
|
||||
|
||||
The socket harness and bounded PCM loss recovery have now landed. Odin's
|
||||
`cultnet-impair` proxy supplies deterministic seeded loss/burst/reorder/
|
||||
duplicate/jitter/stall profiles around real CultNet endpoints. Muninn emits a
|
||||
typed fixed 4+2 audio parity block after each four constant-size PCM packets;
|
||||
the production Mimir OBS receiver reconstructs up to two missing packets inside
|
||||
the 40 ms reorder budget and feeds them through the existing playout owner.
|
||||
Both sides use the experimental CultLib/CultMesh snapshot lineage used by Eve,
|
||||
Aetheria, and VoidBot; no stable-branch transport shim was introduced.
|
||||
|
||||
The production receiver follow-up fixed two contract contradictions: early
|
||||
video repair no longer declares the frame late (which had made Odin discard all
|
||||
repair requests), and the OBS audio decoder now consumes Muninn's actual float
|
||||
PCM contract rather than treating it as AAC. Audio reorder is bounded to 40 ms
|
||||
with short silence concealment. The next audio cut is Opus with explicit
|
||||
FEC/PLC; the next video cut is a controllable encoder owner that can force IDR
|
||||
without restarting the A/V session.
|
||||
FEC/PLC for variable-rate compressed audio; PCM now has bounded 4+2 erasure
|
||||
recovery plus concealment. The next video cut is a controllable encoder owner
|
||||
that can force IDR without restarting the video session. Receiver keyframe
|
||||
pressure is deliberately not allowed to restart the whole A/V stream and hide
|
||||
the missing authority.
|
||||
|
||||
1. Replace the frame-event diagnostic bridge with concrete direct capture
|
||||
drivers for Leap stereo IR first, then the
|
||||
|
|
|
|||
|
|
@ -190,3 +190,4 @@
|
|||
{"ts": "2026-07-16T20:03:50+01:00", "type": "decision", "status": "ok", "note": "Moonlight common-c study at commit 82e2514 found Muninn already has media-aware packetization, deadlines, parity, receiver feedback, repair caching, and keyframe pressure. Preserve those foundations; close feedback into sender policy, replace the two-second realtime default with consumer-derived deadlines, and split Sleipnir input into replaceable latest state versus ordered non-replaceable edges. Research: docs/research/moonlight-muninn-sleipnir-study-2026-07-16.md."}
|
||||
{"ts": "2026-07-16T20:29:03+01:00", "type": "verification", "status": "ok", "note": "Moonlight-derived reliability cut implemented in Odin against experimental CultLib snapshot 8965f3c0: HID epoch/latest-state/ordered-edge/application-ack semantics; wall clock demoted from ordering; Muninn A/V uses CultNet realtime lane with 100ms default LAN deadline; bounded producer/pending queues; expiring and receiver-late-aware repair cache; decode-chain-only keyframe pressure. Verification passed 168 Muninn, 25 Sleipnir, and 35 vendored experimental CultNet tests."}
|
||||
{"ts": "2026-07-16T20:48:32+01:00", "type": "verification", "status": "ok", "note": "Production Muninn receiver audit fixed two live contract failures: early video repair feedback no longer places live frames in late_frame_ids (which made Odin refuse every repair), with a C++-emitted fixture decoded by Rust; OBS local audio decoder now consumes Muninn's actual f32le stereo 48kHz packets rather than AAC, default reorder is 40ms instead of 2000ms, and short gaps receive bounded silence concealment. Native plugin build and two CTests passed; Odin cross-fixture tests passed."}
|
||||
{"ts": "2026-07-16T21:03:13+01:00", "type": "verification", "status": "ok", "note": "Muninn production audio recovery now uses typed 4+2 GF(256) PCM parity from Odin and a bounded Mimir receiver cache feeding the existing 40 ms reorder owner; native OBS DLL builds and 3/3 CTests pass. Odin cultnet-impair adds deterministic real-socket loss/burst/reorder/duplicate/jitter/stall profiles. Experimental CultLib snapshot lineage remains pinned at 8965f3c0."}
|
||||
|
|
|
|||
|
|
@ -87,6 +87,24 @@ invariants:
|
|||
are temporary smoke/bootstrap edges only.
|
||||
|
||||
accepted_design:
|
||||
- The 2026-07-16 loss-recovery cut is now live on both sides of the Muninn
|
||||
audio boundary. Odin emits typed `muninn.media_audio_parity_shard.v1`
|
||||
records using fixed 4+2 GF(256) parity for constant-size 10 ms PCM packets.
|
||||
Mimir's production OBS receiver retains a bounded recent data window,
|
||||
reconstructs up to two erased packets per block before the 40 ms playout
|
||||
deadline, and then hands recovered packets to the same reorder queue that
|
||||
owns normal playout. The FEC cache is not a second timeline. Native tests
|
||||
exhaust every one- and two-erasure permutation, and the production plugin
|
||||
DLL builds with all three native suites passing. The OBS input ceiling is
|
||||
now 500 ms and the default remains 100 ms; old 1.2-2.0 second test/config
|
||||
assumptions are not realtime authority.
|
||||
- Odin now carries a deterministic bidirectional UDP impairment proxy with
|
||||
seeded clean, iid loss, burst loss, delay/jitter, reorder, duplicate, and
|
||||
stall profiles. This is the acceptance substrate for real CultNet endpoints,
|
||||
not a simulated transport replacement. The remaining critical sender gap
|
||||
is an encoder owner that can actuate a receiver-requested next IDR without
|
||||
restarting the video session; stock FFmpeg CLI capture cannot own that
|
||||
command dynamically.
|
||||
- The 2026-07-16 production receiver audit cut two false contracts. Native
|
||||
Mimir/OBS early video repair feedback no longer marks live frames late, so
|
||||
Odin can actually return cached missing chunks; only assembly expiry emits
|
||||
|
|
|
|||
Loading…
Reference in a new issue