diff --git a/notes/current-system-map.md b/notes/current-system-map.md index 3ec535d..2a8b76f 100644 --- a/notes/current-system-map.md +++ b/notes/current-system-map.md @@ -196,9 +196,19 @@ Y8 frame run through `muninn-move-tracker` serializes a non-empty marker candidate into the Mimir-compatible evidence frame. The daemon now has a source-local Y8 extraction/publish seam plus a first `serve` camera producer: `--move-marker-camera =` polls a Unix V4L2 YUYV frame, -converts it to compact Y8, and feeds that same seam. Windows unit tests prove -the configured camera tick publishes marker evidence through the shared frame -contract; Nightwing hardware/live V4L2 proof is still pending. +converts it to compact Y8, and feeds that same seam. Nightwing hardware now +runs as one Muninn provider with two private per-eye PSMoveAPI subprocesses. +The parent alone owns lights, identity, commands, provider advertisement, +persistence, and the aggregate evidence stream; children exchange hue state +and camera-tagged observations over bounded MessagePack pipes. +`muninn.move_tracker_health.v1` exposes each worker's camera backend, +calibration, update/observation counters, RGB range, and expected-hue pixel +evidence. Live exposure is 0.3 for `nightwing-eye-0` and 0.1 for +`nightwing-eye-1`. Both eyes calibrate all four Moves and produce observations. +The latest Mimir window saw all four IDs on Eye 0, two on Eye 1, and two +same-ID cross-camera correspondences. Do not claim full stereo calibration yet: +four-ID overlap is incomplete and the RUDP subscriber currently receives only +two aggregate frames per 20-60 second window despite continuous worker updates. `MimirMoveProofSurface` is the first Fensalir-visible proof surface for this chain. It consumes the Mimir admission receipt and the Mimir-owned pose stream frame, emits `mimir.move_proof_surface.v1`, and lowers an observer-only diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 904eb1e..417dcc1 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -34,10 +34,10 @@ Get-Content .\state\evidence.jsonl -Tail 8 `cultnet.transport.rudp.v0`; TCP/HTTP/WebSocket are client lowerings, compatibility probes, or migration debt unless a specific runtime has not earned RUDP yet. -- Mimir has daemon-health publication edges into the Odin/Idunn swarm: - `src/Mimir.EveDashboard` and `src/Mimir.EveBrowserReference` publish - `idunn.daemon_health` records over `cultnet.transport.rudp.v0` when - configured. These are self-health witnesses, not lifecycle owners. +- Mimir's old Eve dashboard broker is archived and no longer publishes Idunn + health, `/eve/deck`, `/eve/dashboard`, or WebSocket commands. The browser + reference is a client lowering, not service truth. Dashboard state must return + as typed CultMesh/Eve documents through Odin before deployment resumes. - The live stream app is C# plus Fensalir: `Mimir.slnx` contains `src/Mimir.App` and `src/Mimir.Runtime`. - `src/Mimir.App` hosts Fensalir as the windowing/rendering/D3D12 bridge. @@ -79,6 +79,14 @@ Get-Content .\state\evidence.jsonl -Tail 8 ## Current Pressure +- Nightwing Move tracking is one Muninn provider with two private per-eye + PSMoveAPI worker subprocesses. Eye 0 uses exposure 0.3; Eye 1 uses 0.1. + Both workers calibrate four Moves and advance continuously. Mimir has proved + all four stable IDs on Eye 0, two on Eye 1, and two cross-camera + correspondences. Next fix the aggregate evidence RUDP cadence (only two + frames reached a persistent subscriber in 20-60 seconds), then earn four-ID + stereo overlap before feeding camera calibration. + - Implement the first concrete Leap direct capture driver and measure cadence. - Add remaining camera drivers through `IMimirVideoCaptureDriver`. - Add native audio capture workers for mic, loopback, and network audio feeds. @@ -89,23 +97,22 @@ Get-Content .\state\evidence.jsonl -Tail 8 output management. - Keep PowerShell/FFmpeg/SRT as bridge utilities until native Mimir program output, Eve operation, and Yggdrasil site publication replace them. -- Yggdrasil currently runs the CultMesh media relay on UDP `3075` from - `/opt/gamecult/mimir-cultmesh-media/Mimir.CultMeshMedia`; Starfire currently - runs the receiver PID from - `artifacts/mimir-cultmesh-media-win-x64-selfcontained/Mimir.CultMeshMedia.exe` - and writes `raven-primary-av` to `udp://127.0.0.1:5200`. OBS source - `Raven Monitor + Realtek` has been repointed from old SRT to that local UDP - endpoint. Raven SSH timed out, so launch - `scripts/start-raven-cultmesh-av-sender.ps1` on Raven directly. -- Keep Eve dashboard/browser-reference RUDP health aligned with Odin/Idunn: - Odin accepts the Verse/service map, Idunn owns daemon continuity, and Mimir - processes publish typed health/freshness only for themselves. The next - dashboard boundary cut is provider advertisement, retained state, - command_boundary, and transport_profile over RUDP so HTTP/WebSocket catalog - ingestion can be demoted to client/debug lowering. -- Cut the remaining Eve dashboard, recorder, and witness service truth paths to - explicit CultNet RUDP records next; no new TCP, HTTP, or WebSocket surface - should be allowed to become daemon or transport truth. +- Yggdrasil currently runs the CultMesh media relay from + `/opt/gamecult/mimir-cultmesh-media/Mimir.CultMeshMedia`; senders and + receivers target `cultmesh://asgard.yggdrasil.mimir/media/raven-primary-av` + and let the CultMesh resolver choose the concrete RUDP route. Starfire writes + `raven-primary-av` to `udp://127.0.0.1:5200`. That is the + `Mimir.CultMeshMedia` body bridge, not the OBS plugin feed owner. +- The actual Raven OBS/SRT feed owner is Odin's Muninn on Raven. Use + `scripts/start-raven-muninn-obs-feed.ps1` in this repo as the thin wrapper + over `E:\Projects\Odin\scripts\activate-muninn-raven-av-srt.ps1`, which + drives Raven's real `GameCult-Muninn-Activate` hidden task and + `muninn.exe activate` path. `scripts/start-raven-cultmesh-av-sender.ps1` + remains the separate CultMesh bridge/bootstrap lane. +- Rebuild Eve dashboard only as a CultMesh/Odin surface publisher plus renderer + lowering. Provider advertisement, retained state, command boundary, transport + profile, and command documents must be typed CultMesh records; no TCP, HTTP, + or WebSocket surface should become daemon or transport truth. - Kiyo Pro has two UVC extension units. Moving it to a motherboard USB3 port changed the descriptor path to `root_hub30` / `bcdUSB=0x0320` and exposed 720p/1080p YUY2/MJPG/H264/NV12 at 60 fps, but Windows still reports diff --git a/state/evidence.jsonl b/state/evidence.jsonl index 45d0fbf..7e34847 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -181,3 +181,4 @@ {"ts": "2026-07-13T00:29:23+01:00", "type": "scar", "status": "partial", "note": "Unified Nightwing Muninn proves one provider can own both /dev/video2 and /dev/video3 and publish all four controller IDs. Stable 30s visibility window saw 2 controller frames and 0 labelled markers. Hue state is animated/descending/1000ms and light HID paths are dynamically resolved; the next missing evidence is typed per-camera PSMoveAPI readiness/calibrated-controller/update health. Do not infer tracker health from camera fd ownership, payload size, or visible lights."} {"ts": "2026-07-13T00:47:59+01:00", "type": "verification", "status": "ok", "note": "Typed muninn.move_tracker_health.v1 field evidence isolated the dual-eye failure. Both Nightwing PS3 Eyes identify as V4L2/PS3 Eye 640x480 at exposure 0.1 and can calibrate all 4 Moves, but same-process PSMoveAPI trackers freeze around initialization/update: one process snapshot reached running with update_count=1 for each eye and zero observations; after restart both remained opening with zero updates. Keep one Muninn provider, but run each native PSMoveAPI tracker in an internal subprocess and aggregate camera-tagged observations in the parent."} {"ts": "2026-07-13T01:15:00+01:00", "type": "verification", "status": "partial", "note": "Nightwing now runs one Muninn provider with private per-eye tracker subprocesses and parent-owned MessagePack hue/observation pipes. Current live proof: both eye workers advance thousands of updates; eye1 calibrated 4 Moves and produced 11,908+ observations, and Mimir received all four stable Move IDs from nightwing-eye-1 in one 15s window. Eye0 calibrated all 4 and advances updates but has zero optical observations, so dual-camera correspondence remains unproven and the remaining fault is eye0 optical scene/backend behavior. Idunn restart now explicitly kills worker children with the parent generation."} +{"ts": "2026-07-13T01:29:15+01:00", "type": "verification", "status": "partial", "note": "Per-camera optical evidence and exposure ownership restored Eye 0. At exposure 0.3 Eye 0 peak RGB rose from [72,25,43] to [178,119,112], calibrated 4 Moves, and produced 3,312 observations/latest 4; Eye 1 remains at exposure 0.1. Mimir's persistent window then saw all 4 IDs on Eye 0, 2 on Eye 1, and 2 same-ID cross-camera correspondences. Do not claim full stereo: Eye 1 overlap is incomplete and only 2 aggregate RUDP frames arrived in 20s and 60s windows."} diff --git a/state/map.yaml b/state/map.yaml index 075e051..c425177 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -194,6 +194,22 @@ accepted_design: both the `mimir.move_proof_evidence_frame_snapshot.v1` tuple and embedded Muninn payload. This supports Nightwing field capture/replay through Mimir's snapshot provider while the final live ring/page transport remains pending. + - Nightwing field capture/replay has proven the one-copy snapshot mechanics, + but the first `FullPose` replay was physically false-positive evidence. + Muninn `d4f229a` bundles latest controller state with aggregated marker + candidates from both Nightwing PS3 Eyes into one evidence frame, with the + snapshot payload encoded as MessagePack bytes. The preserved artifact + `artifacts/runtime/nightwing-move-proof-20260712-1041-aggregate.mpack` + replays through `Mimir.BufferSmoke --move-proof-runtime-snapshot-file-smoke` + as `muninn:nightwing:move-evidence:1 -> mimir:starfire:move-evidence:1 -> + mimir:starfire:move-pose:1 -> fensalir:starfire:presented-frame:1`, but + the operator confirmed the Move markers were dark during that capture. Treat + its 99 marker candidates as bright image blobs/noise and use the artifact + only as evidence that Muninn/Mimir/Fensalir replay plumbing works and needs + marker-lit validation. A valid field pose proof still requires lighting the + PS Move orb, capturing real optical marker candidates from calibrated camera + witnesses, and preserving the explicit same-sequence proof spine. The final + live cross-process CultMesh ring/page proof remains pending. - `MimirMoveProofDevSurface` is a dev-only bootstrap gated by `MIMIR_MOVE_PROOF_DEV_SURFACE`. It publishes a synthetic calibrated proof surface through the same MimirRuntime attachment so headless Mimir.App can @@ -232,9 +248,19 @@ accepted_design: evidence. The daemon now has a source-local Y8 extraction/publish seam and a first `serve` camera producer: `--move-marker-camera =` polls a Unix V4L2 YUYV frame, converts it to compact Y8, and feeds that - same seam. Unit tests prove the configured camera tick publishes marker - evidence through the shared frame contract; Nightwing hardware/live V4L2 - proof is still pending. + same seam. Nightwing now runs one public Muninn provider whose two private + per-eye PSMoveAPI subprocesses exchange hue state, observations, and health + with the parent through bounded MessagePack pipes. Children own no store, + provider advertisement, command route, or light output. Typed + `muninn.move_tracker_health.v1` records expose camera backend, calibration, + update/observation counts, RGB range, and expected-hue pixel evidence. + Live field proof on 2026-07-13 established Eye 0 at exposure 0.3 and Eye 1 + at 0.1; both calibrated four Moves and produced observations. A Mimir + visibility window saw all four IDs on Eye 0, two IDs on Eye 1, and two + cross-camera correspondences. Full four-ID stereo coverage and stream + cadence remain pending: the remote subscriber received only two aggregate + frames during both 20-second and 60-second windows despite continuously + advancing tracker workers. - `MimirMuninnMoveEvidenceAdapter.TryAdmitLatestCultMeshFrame` now exposes a typed admission receipt with decoded frame id, producer, publish/read timestamps, sample counts by kind, source/arrival ranges, native reservoir