Mimir/state/evidence.jsonl
2026-05-24 22:47:32 +01:00

93 lines
56 KiB
JSON

{"ts":"2026-05-21T17:31:13+00:00","type":"implementation","status":"ok","note":"MimirVideoFrameDescriptor carries dimensions, pixel format, stride, device timestamp, and optional native/GPU handle; MimirNativeIngestStreamSource can push LeapStereoIr or other camera frames directly into rolling buffers while process-backed ingest remains a network/diagnostic edge."}
{"ts":"2026-05-21T17:40:33+00:00","type":"decision","status":"ok","note":"Mimir live camera ingest should talk directly to drivers through IMimirVideoCaptureDriver: LeapUVC/libusb, LeapC images, Media Foundation, DirectShow, or GPU shared textures."}
{"ts":"2026-05-21T18:55:00+00:00","type":"implementation","status":"ok","note":"Deleted script-era packages, tests, helper tools, dependency manifests, archived research mirrors, and stale docs from the working tree. The repo's live surface is C# Mimir.Runtime, Mimir.App, native reservoir, PowerShell bridge utilities, Aquarium, and Faust/native DSP."}
{"ts":"2026-05-21T19:05:00+00:00","type":"correction","status":"ok","note":"Restored the research archive as reference-only memory. Research may preserve external examples and failed-path lessons, but live implementation must be rebuilt through direct drivers, native buffers, Aquarium GPU compute, and Faust/native DSP."}
{"ts":"2026-05-21T19:30:00+00:00","type":"verification","status":"ok","note":"Raw PS3 Eye libusb/WinUSB cadence probe measured both cameras simultaneously at 320x240 requested 187 Hz: camera 0 delivered 915 frames in 5.005s (182.81 fps), camera 1 delivered 916 frames in 5.005s (183.01 fps). At 640x480 requested 60 Hz they delivered 58.69 fps and 57.09 fps. Leap remains unmeasured in raw UVC/KS mode."}
{"ts":"2026-05-21T20:05:00+00:00","type":"verification","status":"ok","note":"Native LeapUVC Kernel Streaming probe measured VID_F182 through usbvideo.sys without Media Foundation, DirectShow, OpenCV, or frame processing. Advertised 640x240 YUY2 stereo IR mode is 115 fps; the minimal one-buffer blocking KS read loop delivered 415 frames in 5.003s (82.95 fps). 640x120 delivered 155.40 fps against a 214 fps advertised mode. Next driver cut needs queued KS/AVStream streaming, or an explicit WinUSB/libusb UVC driver rebind decision if usbvideo.sys remains the bottleneck."}
{"ts":"2026-05-21T20:25:00+00:00","type":"verification","status":"ok","note":"LeapUVC KS probe now keeps eight asynchronous NtDeviceIoControlFile reads queued. The path reports async=yes but cadence stays effectively unchanged: 640x240 YUY2 delivered 415 frames in 5.004s (82.93 fps), and 640x120 delivered 777 frames in 5.000s (155.39 fps). The limiting factor is not simply an empty user-mode read queue."}
{"ts":"2026-05-21T20:55:00+00:00","type":"verification","status":"ok","note":"LeapUVC KS control sweep showed the short-window 83 fps result was mostly startup drag. With two seconds of warm-up discarded and eight queued async KS reads, 640x240 YUY2 delivered about 110.7 fps against 115 fps advertised; 640x120 YUY2 delivered 1030 frames in 5.003s (205.87 fps) against 214 fps advertised. Exposure, gamma, HDR/LED, gain, and dark-frame controls are reachable through KS; digital gain=0 and the old FPS-ratio selector are rejected with ERROR_INVALID_PARAMETER."}
{"ts":"2026-05-21T21:25:00+00:00","type":"verification","status":"ok","note":"Razer Kiyo direct KS probe measured VID_1532 PID_0E03 and PID_0E05 camera interfaces with eight queued async reads and two-second warm-up discard. Plain Kiyo is exposure-limited by default: 1920x1080 MJPG reaches 30.27 fps with manual exposure -9/-10, and 1280x720 MJPG reaches 51.51 fps after manual exposure/gain sweep against 60 fps advertised. Kiyo Pro advertises 60 fps at 1280x720 and 1920x1080 MJPG, but the current KS path delivers only about 25 fps regardless of manual exposure; it needs separate control/driver investigation before high-cadence use."}
{"ts":"2026-05-21T21:55:00+00:00","type":"verification","status":"ok","note":"Online Kiyo Pro research found matching trouble reports: Razer documents 1080p60/720p60, HDR can reduce frame rate, anti-flicker/powerline can interact with frame rate, and Microsoft maps low-light compensation to AUTO_EXPOSURE_PRIORITY, which can vary frame rate. Local KS follow-up found Kiyo Pro reports low-light priority=1 and powerline=50Hz. Setting low-light priority to 0 did not improve cadence; setting powerline to 60Hz moved 720p/1080p MJPG only from about 25 fps to about 29 fps. Standard KS controls are not enough; next step is compare Synapse/OBS and inspect vendor/extension controls or firmware state."}
{"ts":"2026-05-21T22:15:00+00:00","type":"verification","status":"ok","note":"Kiyo Pro HDR-off test added KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR get/set with filter-scope and pin-0 extended-property headers. The camera returns Element not found for standard extended Video HDR, and setting HDR off does not change cadence: 720p/1080p MJPG remain about 25 fps. HDR may still be controlled through Razer/Synapse, but not via the standard Windows extended Video HDR KS property on this path."}
{"ts":"2026-05-21T22:45:00+00:00","type":"verification","status":"ok","note":"Kiyo Pro controls-only probe parsed USB descriptors through hub IOCTLs without Synapse. The device exposes UVC extension units {2c49d16a-32b8-4485-3ea8-643a152362f2} and {23e49ed0-1178-4f31-ae52-d2fb8a8d3b48}; the second answers KS selector probes including writable selectors 1,3,4,6,11,12,14,15 and readable selector 10 returns ASCII PYTHON_V2B. Stronger finding: the local Kiyo Pro is behind a Genesys Logic VID_05E3&PID_0610 hub at USB speed 2 / bcdUSB 0x0210, so it is on a high-speed USB 2.x path rather than SuperSpeed USB 3.x. Verify/move bus topology before mutating unknown vendor controls."}
{"ts":"2026-05-21T23:10:00+00:00","type":"verification","status":"ok","note":"After moving Kiyo Pro to a motherboard USB3 port, the descriptor path changed to root_hub30 port 7 with bcdUSB 0x0320 and 720p/1080p YUY2/MJPG/H264/NV12 all advertised at 60 fps. Windows still reports USB speed enum 2 (UsbHighSpeed, not UsbSuperSpeed). Baseline cadence remains locked around 25 fps across all tested 720p/1080p formats: YUY2 24.96/24.98, MJPG 25.20/25.03, H264 25.19/25.01, NV12 25.07/25.16. Verify a true SuperSpeed cable/port path before blaming unknown vendor selectors."}
{"ts":"2026-05-21T23:25:00+00:00","type":"verification","status":"ok","note":"Kiyo Pro moved to a second motherboard USB3 port: composite device is now Port_#0008.Hub_#0003 on the same AMD ROOT_HUB30. The device descriptor remains bcdUSB 0x0320 but hub IOCTL reports negotiated speed UsbHighSpeed(2), not UsbSuperSpeed(3). Cadence was not rerun because this is the same high-speed fallback state; next physical test is a known-good USB3 data cable or a known-good SuperSpeed device on the same ports."}
{"ts":"2026-05-22T00:05:00+00:00","type":"verification","status":"ok","note":"Kiyo Pro moved to neighbor sender machine Raven. PnP reports camera/media/composite/microphone interfaces present. Descriptor-only probe reports VID_1532 PID_0E05 on Raven USB3 root hub port 6 with bcdUSB 0x0320 but negotiated speed UsbHighSpeed(2), not UsbSuperSpeed(3); Raven hub inventory reports zero SuperSpeed devices. Same cable/camera failing SuperSpeed on two machines makes the stock cable or Kiyo Pro SuperSpeed lane the stronger suspect."}
{"ts":"2026-05-22T00:30:00+00:00","type":"verification","status":"partial","note":"Simultaneous local camera pull found only three camera devices visible: LeapUVC, Kiyo Pro, and one PS3 Eye; regular Kiyo and the second PS3 Eye were absent. KS multi harness plus raw PS3 Eye probe pulled Leap 640x240 YUY2, Kiyo Pro 1080p MJPG, and PS3 Eye concurrently. With PS3 Eye 640x480@60: Leap 40.12 fps, Kiyo Pro 24.99 fps, PS3 Eye 56.06 fps. With PS3 Eye 320x240@187: Leap 81.10 fps, Kiyo Pro 25.33 fps, PS3 Eye 185.74 fps. Leap loses cadence under shared USB load; split high-rate cameras across controllers before claiming six-camera viability."}
{"ts":"2026-05-22T00:50:00+00:00","type":"verification","status":"ok","note":"After port swapping, five camera devices / six optical sensors were visible and pulled simultaneously: LeapUVC's packed stereo IR pair, Kiyo Pro, regular Kiyo, and two PS3 Eyes. Kiyo Pro still negotiated UsbHighSpeed(2) on root_hub30 despite bcdUSB 0x0320; hub inventory reported zero SuperSpeed devices. With both PS3 Eyes at 640x480@60: Leap stereo 57.33 fps, Kiyo Pro 24.97 fps, Kiyo 30.30 fps, PS3 Eye 0 59.59 fps, PS3 Eye 1 57.60 fps. With both PS3 Eyes at 320x240@187: Leap stereo 81.05 fps, Kiyo Pro 24.97 fps, Kiyo 30.28 fps, PS3 Eye 0 187.60 fps, PS3 Eye 1 187.03 fps. All currently intended optical sensors can be pulled at once through direct-driver probes; Leap remains topology-sensitive."}
{"ts":"2026-05-22T01:10:00+00:00","type":"verification","status":"partial","note":"Port isolation follow-up put Leap alone on the blue rear USB3 group/root_hub30#5 port 3, Kiyos together on root_hub30#7&18eea21b, and Eyes on remaining front/back USB-A ports. Only one PS3 Eye enumerated. Visible simultaneous pull with PS3 Eye at 320x240@187 delivered Leap stereo 80.99 fps, Kiyo Pro 24.93 fps, Kiyo 30.37 fps, and PS3 Eye 185.85 fps. Leap did not recover to its solo ~110 fps cadence despite root-hub isolation, so the bottleneck is not only same-row/same-root-hub contention; investigate broader xHCI scheduling, CPU/interrupt pressure, or KS/usbvideo behavior under multi-device load."}
{"ts":"2026-05-22T01:30:00+00:00","type":"verification","status":"partial","note":"After splitting cameras across Mimir and Raven, the local Mimir host enumerated LeapUVC, regular Kiyo, and one PS3 Eye. Local simultaneous pull with PS3 Eye 320x240@187 delivered Leap 81.34 fps, Kiyo 30.27 fps, and PS3 Eye 185.56 fps. Leap+Kiyo only delivered Leap 82.77 fps and Kiyo 16.83 fps. Leap-only same-session baseline delivered 84.18 fps, with best fast-combined scenario 92.87 fps and 640x120 baseline 173.62 fps. Offloading Kiyo Pro and one PS3 Eye did not restore the previous ~110.8 fps Leap result; current hypothesis shifts to Leap port/controller/device state or KS/usbvideo behavior, not only total local camera bandwidth."}
{"ts":"2026-05-22T01:45:00+00:00","type":"verification","status":"ok","note":"Moving the Focusrite Scarlett Solo away from the Leap USB neighborhood substantially recovered local split-host cadence. Leap-only baseline rose to 95.48 fps, best fast-combined scenario to 101.67 fps, and 640x120 baseline to 192.83 fps. With local Leap + regular Kiyo + one PS3 Eye at 320x240@187 active, Leap delivered 105.10 fps, Kiyo 30.17 fps, and PS3 Eye 185.81 fps. The split-host local set is viable; the prior ~81 fps Leap band was caused by local USB layout including the Focusrite, not just camera count."}
{"ts":"2026-05-22T02:05:00+00:00","type":"verification","status":"partial","note":"Raven PS3 Eye raw interface initially had no driver binding. Exported the working Mimir host libwdi WinUSB driver package from oem26.inf, copied it to Raven under C:\\Meta\\mimir-ps3eye-winusb-driver, added the libwdi self-signed certificate to Raven Root and TrustedPublisher stores, and installed it as oem34.inf with pnputil. Raven now reports VID_1415&PID_2000&MI_00 as USBDevice OK, provider libwdi, service WinUSB. The copied ps3eye_dual_cadence.exe opens the device, but cadence is not viable yet: 320x240@187 delivered 132.24 fps then 78.93 fps, and 640x480@60 delivered 6.32 fps with multi-second gaps. Driver open is solved; Raven USB path/device cadence still needs isolation."}
{"ts":"2026-05-22T02:35:00+00:00","type":"verification","status":"ok","note":"Moved the Raven PS3 Eye back to the Mimir host. Local enumeration showed LeapUVC, regular Kiyo, and two PS3 Eyes; Kiyo Pro was not local. With Focusrite away from the Leap USB neighborhood, all local sensors ran in parallel cleanly. With both PS3 Eyes at 320x240@187: Leap 106.07 fps, Kiyo 30.33 fps, PS3 Eye 0 186.57 fps, PS3 Eye 1 186.14 fps. With both PS3 Eyes at 640x480@60: Leap 108.07 fps, Kiyo 30.34 fps, PS3 Eye 0 57.79 fps, PS3 Eye 1 58.08 fps. Current local topology is viable for Leap stereo + regular Kiyo + both PS3 Eyes."}
{"ts":"2026-05-22T02:55:00+00:00","type":"verification","status":"ok","note":"Moved Kiyo Pro back to the Mimir host. Local enumeration showed LeapUVC, Kiyo Pro, and two PS3 Eyes; regular Kiyo was not local. Kiyo Pro remained on root_hub30#7&18eea21b port 8 at UsbHighSpeed(2), bcdUSB 0x0320. With both PS3 Eyes at 320x240@187: Leap 110.80 fps, Kiyo Pro 24.97 fps, PS3 Eye 0 187.46 fps, PS3 Eye 1 186.89 fps. With both PS3 Eyes at 640x480@60: Leap 110.72 fps, Kiyo Pro 24.87 fps, PS3 Eye 0 59.91 fps, PS3 Eye 1 59.19 fps. Kiyo Pro does not poison Leap cadence in the current layout; it remains a ~25 fps high-speed USB RGB source."}
{"ts":"2026-05-22T03:15:00+00:00","type":"verification","status":"ok","note":"Moved regular Kiyo from front panel to rear port and mouse into Leap USB neighborhood. All five camera devices / six optical sensors were visible locally: LeapUVC stereo, Kiyo Pro, regular Kiyo, and two PS3 Eyes. With both PS3 Eyes at 320x240@187: Leap 110.84 fps, Kiyo Pro 25.08 fps, Kiyo 30.18 fps, PS3 Eye 0 187.59 fps, PS3 Eye 1 187.02 fps. With both PS3 Eyes at 640x480@60: Leap 110.76 fps, Kiyo Pro 25.14 fps, Kiyo 30.18 fps, PS3 Eye 0 59.66 fps, PS3 Eye 1 59.95 fps. The full intended local optical set is viable; Kiyo Pro remains cadence-limited by high-speed USB negotiation."}
{"ts":"2026-05-22T03:35:00+00:00","type":"verification","status":"ok","note":"Rechecked the final full local topology after the regular Kiyo was moved to a rear port and a mouse moved into the Leap USB neighborhood. All five camera devices / six optical sensors remained visible and cadence stayed healthy. High-rate Eye run: Leap 110.84 fps, Kiyo Pro 25.08 fps, regular Kiyo 30.18 fps, PS3 Eye 0 187.59 fps, PS3 Eye 1 187.02 fps. Full-frame Eye run: Leap 110.76 fps, Kiyo Pro 25.14 fps, regular Kiyo 30.18 fps, PS3 Eye 0 59.66 fps, PS3 Eye 1 59.95 fps. Mouse traffic does not reproduce the Focusrite-induced Leap collapse."}
{"ts":"2026-05-22T04:10:00+00:00","type":"implementation","status":"ok","note":"Added a diagnostic frame-event path from native camera probes into Mimir.Runtime rolling buffers. MimirFrameEventProcessStreamSource reads JSON-line video-frame metadata into MimirVideoFrameDescriptor samples; KS and repo-owned PS3 Eye probes can emit those frame events. This is a playground witness for Aquarium UI/cadence, not the final pixel hot path."}
{"ts":"2026-05-22T04:45:00+00:00","type":"verification","status":"partial","note":"Mimir.BufferSmoke loaded the probe runtime config, started the KS and PS3 Eye frame-event probes, polled MimirSynchronizationHub, and confirmed live samples in rolling buffers for leap-stereo-ir, kiyo-rgb, ps3-eye-0, and ps3-eye-1. Kiyo Pro is declared but empty: the KS path enumerates the device and modes, then fails at KSSTATE_ACQUIRE with ERROR_INVALID_HANDLE. PnP camera interface reports OK, composite reports OK, media interface reports Error, and non-elevated pnputil restart is denied."}
{"ts":"2026-05-22T05:05:00+00:00","type":"verification","status":"ok","note":"After replugging the Kiyo Pro, all Pro PnP interfaces reported OK and the KS probe again measured 1280x720 MJPG at 24.97 fps and 1920x1080 MJPG at 25.19 fps. Mimir.BufferSmoke with --require-samples then confirmed all five declared local optical buffers received samples: kiyo-pro-rgb 99, kiyo-rgb 120, leap-stereo-ir 401, ps3-eye-0 937, ps3-eye-1 937 over the 8 second smoke run. Pro remains UsbHighSpeed and ~25 fps, but it is now in the runtime buffers."}
{"ts":"2026-05-22T05:35:00+00:00","type":"verification","status":"ok","note":"Added native/probes/wasapi_audio_cadence and MimirAudioBlockDescriptor so WASAPI audio-block metadata enters Mimir.Runtime rolling buffers through the diagnostic event adapter. Endpoint inventory found five capture endpoints and four render endpoints. Full Mimir.BufferSmoke with --require-samples and active music on Scarlett speakers proved ten non-empty buffers: five camera buffers, Focusrite mic, Kiyo mic, Kiyo Pro mic, one USB Camera mic, and Scarlett speaker loopback. Scarlett loopback is silent/no-packet when no render stream is active; the second USB Camera mic endpoint enumerates OK but produced zero WASAPI packets in standalone and simultaneous tests."}
{"ts":"2026-05-22T05:50:00+00:00","type":"verification","status":"partial","note":"Correlated the two PS3 Eye audio endpoints to their USB parents. The working endpoint is Microphone (5- USB Camera-B4.09.24.1), MMDEVAPI {57befef3-599c-4c73-a0cd-9539ffc2f54f}, parent USB\\VID_1415&PID_2000&MI_01\\9&35158e62&0&0001 / composite USB\\VID_1415&PID_2000\\8&29c54ea8&0&4; its camera interface MI_00 is bound to libusbK and WASAPI emits 480-frame blocks. The silent endpoint is Microphone (4- USB Camera-B4.09.24.1), MMDEVAPI {f26c55af-5018-438a-8cc1-6dbead205a3c}, parent USB\\VID_1415&PID_2000&MI_01\\9&11052345&0&0001 / composite USB\\VID_1415&PID_2000\\8&2efe0359&0&1; its camera interface MI_00 is bound to WinUSB/libwdi and standalone WASAPI capture opens but emits zero packets. Both MI_01 audio devices report Microsoft usbaudio OK, so the failure is stream data, not endpoint enumeration."}
{"ts":"2026-05-22T06:05:00+00:00","type":"verification","status":"ok","note":"After the other PS3 Eye was unplugged/replugged, the previously silent Microphone (4- USB Camera-B4.09.24.1) endpoint started emitting 480-frame WASAPI blocks even though its MI_00 camera interface remained on oem26.inf / WinUSB/libwdi. Full Mimir.BufferSmoke with --require-samples proved 11 non-empty buffers: five camera buffers, Focusrite mic, Kiyo mic, Kiyo Pro mic, both PS3 Eye mics, and active Scarlett speaker loopback. The earlier driver-as-cause hypothesis is weakened; the failure was fixed by device re-enumeration without changing the camera-side driver binding."}
{"ts":"2026-05-22T06:25:00+00:00","type":"implementation","status":"ok","note":"Ported the first synchronization measurement loop into the current runtime. WASAPI probe can emit base64 sample payloads with audio-block JSON, MimirFrameEventProcessStreamSource decodes them into MimirStreamSample.Data, and MimirAudioSynchronizationAnalyzer estimates delay by normalized cross-correlation against mic-focusrite-local. Two-mic sync smoke with sample payloads proved both buffers and reported mic-focusrite-local->mic-usb-camera-0 delaySamples=2138, delayMs=44.542, confidence=0.393 over 4800 compared samples. This is measurement only; SRO smoothing, adaptive resampling, and fractional-delay correction are still next."}
{"ts":"2026-05-22T11:39:31+01:00","type":"verification","status":"partial","note":"Chirplet-backed sync smoke used Scarlett speaker loopback as timing authority with 9-16 kHz calibration chirps playing, resampled 48 kHz mics into the 44.1 kHz loopback timeline, and built an aligned audio frame with 4 channels: loopback, mic-focusrite-local delaySamples=-768 confidence=0.160, mic-kiyo delaySamples=-256 confidence=0.119, and mic-kiyo-pro delaySamples=-1664 confidence=0.118. Both PS3 Eye audio buffers were empty in this run while both PS3 Eye camera buffers were live, so PS3 Eye audio remains enumeration/runtime-fragile rather than solved."}
{"ts":"2026-05-22T11:48:37+01:00","type":"verification","status":"ok","note":"After replugging the PS3 Eyes, full Mimir.BufferSmoke with --require-samples proved both PS3 Eye audio buffers were live again: mic-usb-camera-0 count=324 and mic-usb-camera-1 count=210, each reporting 2ch 48000Hz Float32 480-frame WASAPI blocks. Both PS3 Eye camera buffers were live at the same time. Loopback-referenced sync reports included mic-usb-camera-0 delaySamples=2368 confidence=0.095 and mic-usb-camera-1 delaySamples=-2304 confidence=0.152; only mic-usb-camera-1 cleared the current aligned-frame confidence gate in that run."}
{"ts":"2026-05-22T11:58:15+01:00","type":"verification","status":"ok","note":"Delay signs were suspect because MimirAudioSynchronizationAnalyzer compared latest sample tails from buffers with different edge timestamps. The analyzer now estimates each pair at a shared timestamp edge and BuildAlignedAudioFrame chooses an output edge all positive-late channels can supply. Controlled 9-16 kHz chirplet smoke after the fix reported positive loopback-relative PS3 Eye delay: mic-usb-camera-1 delaySamples=704, delayMs=15.964, confidence=0.166, and the aligned frame contained loopback plus mic-usb-camera-1."}
{"ts":"2026-05-22T12:38:53+01:00","type":"implementation","status":"ok","note":"Documented the chirplet calibration model and started the structured implementation. MimirChirpletCalibrationPhrase now owns a harmonic-ish phrase around 8 kHz, 10 kHz, 12 kHz, and 16 kHz, PCM rendering for Aquarium emission, matched chirplet timing traces, and per-band matched-energy response hooks. MimirRuntime emits that shared phrase instead of a separate hard-coded sweep, and MimirAudioSynchronizationAnalyzer uses the same phrase for loopback-referenced delay analysis with 16-sample hops and parabolic fractional peak interpolation. BufferSmoke output now includes fractionalDelaySamples and per-band energy."}
{"ts":"2026-05-22T12:42:00+01:00","type":"verification","status":"ok","note":"Built Mimir.slnx with zero warnings after structured chirplet changes. A 4-second Mimir.BufferSmoke run against the full probe config printed fractional delays and band energy, and built a 5-channel aligned frame: loopback plus mic-focusrite-local fractionalDelaySamples=2239.233 confidence=0.105, mic-kiyo fractionalDelaySamples=1859.505 confidence=0.496, mic-usb-camera-0 fractionalDelaySamples=2338.772 confidence=0.395, and mic-usb-camera-1 fractionalDelaySamples=1934.795 confidence=0.183. This run verifies report plumbing; the final response normalizer and fractional-delay actuator are still future work."}
{"ts":"2026-05-22T12:46:18+01:00","type":"implementation","status":"ok","note":"Added MimirAudioSynchronizationStateTracker and MimirAudioSynchronizationState. The hub now updates confidence-gated per-source sync state from chirplet reports, smoothing fractional delay and estimating delay-slope/SRO in ppm. Mimir.BufferSmoke polls sync during the run and prints sync-state lines; Aquarium UI exposes the smoothed state. Verification built cleanly and a phrase-backed smoke printed sync-state loopback-scarlett-speakers->mic-usb-camera-0 smoothedDelaySamples=47.397 delayMs=1.075 sroPpm=0.000 confidence=0.216. Final fresh reports can still disappear when loopback rendering stops or falls outside the shared buffer edge, so active loopback remains a live precondition."}
{"ts":"2026-05-22T12:53:02+01:00","type":"implementation","status":"ok","note":"Changed chirplet calibration from a single repeated motif to a stateless timeline fingerprint. MimirChirpletCalibrationPhrase.ForIndex(N) deterministically generates phrase N; runtime emits N mod 16 every 3.25 seconds, and the analyzer searches the 16-phrase cycle. Each phrase is a birdsong-like asymmetric motif with six chirplets spread over about 1.38 seconds. Mimir.slnx built cleanly. A short BufferSmoke run completed without analyzer errors, but loopback emitted zero packets during that smoke, so it verified plumbing only, not fresh delay estimates."}
{"ts":"2026-05-22T13:12:32+01:00","type":"verification","status":"partial","note":"Actual Mimir.App runtime test with MIMIR_RUNTIME_CONFIG=config/mimir-runtime.probes.example.json and MIMIR_SYNC_TELEMETRY_SECONDS enabled proved Aquarium WASAPI output wakes the Scarlett loopback in the real app path. Headless run showed loopbackCount rising to 57 with mic buffers live; visible-window run showed loopbackCount 77 with Focusrite/Kiyo/Kiyo Pro/PS3 Eye mic buffers live. The runtime now updates sync analysis on a 0.5s cadence and telemetry prints loopback, reports, states, and audio buffer counts. No confident acoustic sync state locked in these app runs: reports were absent until enough phrase audio accumulated, then a live report appeared with confidence 0.000. Treat this as online emission/capture proven, online acoustic lock not yet solved."}
{"ts":"2026-05-22T13:34:00+01:00","type":"implementation","status":"ok","note":"Replaced the discrete 16-phrase chirplet cycle with MimirChirpletTimeline, a deterministic unbounded chirplet stream. MimirRuntime now continuously queues uncached 0.5-second PCM segments through Aquarium audio with 1 second of lead, and MimirAudioSynchronizationAnalyzer extracts continuous chirplet atom energy traces from loopback and mic windows rather than searching a finite phrase cycle. Short headless Mimir.App telemetry runs proved the actual runtime path now locks online: loopback and all six audio buffers were live, reports were produced, and sync states appeared for Focusrite, Kiyo, Kiyo Pro, and both PS3 Eye mics. Delay estimates are still jumpy enough that the fractional-delay/SRO actuator should wait for better state filtering."}
{"ts":"2026-05-22T14:10:00+01:00","type":"implementation","status":"partial","note":"Changed MimirChirpletTimeline from anonymous deterministic texture to an explicit order-3 de Bruijn symbol timeline over 32 separated chirp symbols. Any three consecutive correctly detected symbols identify a timeline event within the current operating horizon; reports now expose timelineMatchedEvents and timelineConfidence when event-index refinement is used. A synthetic check rendered two seconds of canonical timeline audio and decoded events 0, 1, and 2 back to a window start of -0.0015 seconds. Real headless app sniff did not provide a clean physical proof because Scarlett loopback capture again stopped advancing early; build remains clean."}
{"ts":"2026-05-22T14:32:00+01:00","type":"implementation","status":"ok","note":"Reworked MimirChirpletTimeline symbols from fixed frequency slots into time/frequency constellations. The order-3 de Bruijn sequence still gives three-chirp timeline placement, but each symbol now carries identity through start band, glide shape, duration, and following inter-chirp gap. Event start times are precomputed over the de Bruijn period instead of using a fixed stride. Synthetic verification rendered two seconds of canonical timeline audio and decoded interior events 9, 10, and 11 back to a zero-second window start, proving placement does not rely on the opening triplet."}
{"ts":"2026-05-22T14:48:00+01:00","type":"verification","status":"partial","note":"Attempted a 20-second real-world Mimir.App chirplet sync run with all configured local mics. The headless path only emitted one telemetry tick before runtime updates stopped. Switching to the normal app path produced telemetry through t=4.26s with all six audio buffers live and sync states for Focusrite, Kiyo, Kiyo Pro, and both PS3 Eye mics. Timeline-symbol refinement appeared on Focusrite, Kiyo, and one PS3 Eye, but delay estimates were unstable and the app did not continue telemetry to 20 seconds. Replaced the coarse acquisition trace with envelope energy to avoid matched-filter scans in the hot acquisition path; symbol decoding remains the refinement step."}
{"ts":"2026-05-22T15:20:00+01:00","type":"implementation","status":"partial","note":"Removed hidden re-entrant synchronization analysis from the live app path. MimirRuntime now calls a bounded rotating AnalyzeAudioSynchronizationStep every 0.1s, MimirSynchronizationHub caches per-source reports/states, and UI/telemetry read cached state instead of invoking the analyzer or BuildAlignedAudioFrame. FitDelayFromEvents now collapses duplicate candidate event observations by strongest energy, fixing the real app crash 'An item with the same key has already been added. Key: 0'. Dotnet build passed. A visible Mimir.App run with all configured mics no longer crashed at the earlier 4s wall and produced telemetry through runtime t=17.28s in a 22s wall-time harness; it did not reach a full 20 runtime seconds because startup consumed wall time. All non-loopback mics produced cached reports/states, but delay estimates remained unstable and timeline event refinement was intermittent, so the next live invariant is robust outlier rejection/state filtering before any actuator drives resampling."}
{"ts":"2026-05-22T16:05:00+01:00","type":"implementation","status":"partial","note":"Documented the intended decoder as a constrained chirplet transform: known dictionary projection to symbol observations, code-valid de Bruijn triplets to canonical timeline anchors, anchors to affine source clock fits, and delay/SRO from comparing loopback and mic clock fits. Added MimirChirpletStreamDecode records and MimirChirpletStreamDecoder with a bounded PCM window, absolute sample offsets, triplet anchors, and clock fits. MimirAudioSynchronizationAnalyzer now prefers matched decoded timeline anchors before falling back to the older chirplet-energy lag search. Synthetic self-test over two seconds of emitted timeline audio currently decodes 12 symbols and one correct anchor for event 9 at sample 47520 with clock 48000 Hz; this proves the new spine but also proves the symbol likelihood/codebook layer is not finished enough to place every triplet yet."}
{"ts":"2026-05-22T16:35:00+01:00","type":"implementation","status":"partial","note":"Replaced one-best-symbol triplet placement with a constrained transform/trellis pass. DecodeStreamWindow now emits transform frames with multiple symbol candidates per chirp, enumerates candidate triplets through the de Bruijn map, scores measured inter-chirp gaps, and keeps the coherent local clock path rather than accepting any random valid triplet. Synthetic two-second emitted timeline check improved from one anchor to 11 coherent anchors, including events 0-9, with fitted clock 47978.350 Hz, confidence 0.885, and 8.741 sample MAE. This is the right decoder shape; remaining work is symbol/codebook separation and sub-frame timing precision so the fit lands exactly at 48000 Hz and covers every emitted triplet."}
{"ts":"2026-05-22T17:05:00+01:00","type":"implementation","status":"ok","note":"Removed the legacy synchronization pipelines from live code. MimirAudioSynchronizationAnalyzer no longer contains chirplet-energy lag search, normalized cross-correlation, approximate runtime clock placement, known-event observation, or integer aligned-frame construction; it only emits timing reports from at least three matched decoded timeline anchors. Deleted MimirAlignedAudioFrame and removed BuildAlignedAudioFrame from MimirSynchronizationHub and BufferSmoke. MimirChirpletTimeline no longer exposes DecodeReferenceWindow, ObserveKnownEvents, BuildTimelineEnergyTrace, or one-best-symbol triplet placement. approximateTimelineSeconds was removed from sync analysis signatures because canonical chirplet anchors now own placement."}
{"ts":"2026-05-22T17:35:00+01:00","type":"implementation","status":"ok","note":"Separated chirplet symbol ownership into MimirChirpletSymbolCodebook and added per-candidate refined sample offsets to transform frames. The codebook now guarantees each of the 32 symbols has a unique chirp shape; rhythm is additional code evidence rather than an acoustic alias. ClassifySymbolsAt now does coarse dictionary search, local sample-resolution search, and parabolic sub-sample refinement per symbol candidate. Synthetic two-second emitted timeline check now detects all 15 emitted chirps, decodes 13 possible triplet anchors for events 0-12, and fits clock=48001.819 Hz with confidence=0.952 and MAE=5.171 samples, improved from 11 anchors / 47978.350 Hz / MAE=8.741."}
{"ts":"2026-05-22T17:45:00+01:00","type":"implementation","status":"ok","note":"Replaced single-phase chirplet matching with quadrature sine/cosine kernels and fixed emitted timeline segment gain so canonical chirps are not amplitude-renormalized per half-second segment. Added `Mimir.BufferSmoke --chirplet-self-test` as a first-class synthetic invariant check. The check renders two seconds of canonical timeline audio, detects all 15 emitted chirps, keeps 13 triplet anchors for events 0-12, fits clock=47999.999990 Hz with confidence=1.000, and holds anchor MAE to 0.000014 samples. The next proof is the same deterministic anchor stability through actual loopback and microphone paths."}
{"ts": "2026-05-22T15:52:26+00:00", "type": "implementation", "status": "ok", "note": "Restored the repo-local Python persistence helpers from the Epiphany-style helper family after checking VoidBot and sibling repos. Mimir now has tools/localcast_state.py for status/evidence/branch edits and tools/localcast_prepare_compaction.py for pre-compaction state audits; AGENTS.md points future agents at both helpers."}
{"ts": "2026-05-22T17:34:45+01:00", "type": "verification", "status": "ok", "note": "Aquarium WASAPI resampler used int multiplication for source.Length * targetSampleRate; a 60s 48k chirplet batch overflowed and queued one 44.1k output frame. Switching to double-length arithmetic restored 2,646,000 output frames and audible chirplets."}
{"ts": "2026-05-22T18:08:51+01:00", "type": "verification", "status": "partial", "note": "Release live chirplet decoder test: Scarlett loopback->Scarlett mic produced repeated runtime reports in ~230-335 ms per 2s analysis window, typically 3-5 matched timeline events. Pair tests also produced reports for Kiyo mic. Kiyo Pro and both USB Camera mics showed chirplet energy but failed to form valid triplet anchors in this pass. Six-audio-source fan-out exposed process-probe buffer continuity/overlap failures, with many candidates rejected as insufficient-window."}
{"ts": "2026-05-22T18:34:16+01:00", "type": "research", "status": "ok", "note": "Archived chirplet decoder research under research/chirplet-sync-decoder. Distilled conclusion: current BuildChirpletEnergyTrace is dense sliding matched filtering; for Mimir's controlled sync beacon, redesign symbol codebook for dechirp+FFT/Goertzel classification so code constraints shape the receiver before expensive scoring."}
{"ts": "2026-05-22T18:47:44+01:00", "type": "implementation", "status": "ok", "note": "Added runtime-owned audio sync mode selection for chirp-only, no-chirp, and hybrid. Config/env now expose MIMIR_AUDIO_SYNC_MODE plus audioSync.mode/referenceSourceId/calibrationGain; no-chirp disables active calibration and reports passive sync as not wired yet, while hybrid currently uses the active pilot until passive confidence gating and shaped watermark emission are implemented. dotnet build and chirplet self-test passed."}
{"ts": "2026-05-22T19:08:10+01:00", "type": "implementation", "status": "ok", "note": "Renamed the public no-chirp mode to passive and started the real hybrid sync machine. Added MimirPassiveAudioSynchronizationEstimator using PHAT-weighted cross-spectrum delay estimation over loopback/program audio; MimirAudioSynchronizationAnalyzer now reports passive evidence in passive/hybrid modes and falls back to chirplet anchors when hybrid passive confidence is weak. Hybrid runtime emission now queues short active pilot chunks only while passive confidence stays below threshold. dotnet build, passive sync self-test, and chirplet self-test passed."}
{"ts": "2026-05-22T19:08:56+01:00", "type": "verification", "status": "partial", "note": "Passive live smoke with MIMIR_AUDIO_SYNC_MODE=passive and config/mimir-runtime.probes.example.json emitted no calibration audio and produced loopback/program-audio reports: Focusrite delaySamples=6653 confidence=0.805, Kiyo Pro delaySamples=6804 confidence=0.227, USB Camera 0 delaySamples=-882 confidence=1.000 over 88200 compared 44.1k samples. This proves the passive path can lock on real loopback/music, but the negative Eye delay needs timestamp/window-sign inspection before driving an actuator."}
{"ts": "2026-05-22T19:33:21+01:00", "type": "verification", "status": "ok", "note": "Fixed passive sync confidence bug. Negative passive lags now produce status=passive-negative-lag with confidence=0, single-window passive confidence is capped at 0.85, and hub invalidates cached reports/state for negative-lag traces. Passive self-test now proves both positive delay recovery and reversed-input zero confidence. A 14s live passive smoke showed negative Focusrite evidence at confidence 0 without leaving a report/state, while positive passive reports stayed capped at 0.85."}
{"ts": "2026-05-22T19:49:43+01:00", "type": "implementation", "status": "partial", "note": "Built the first chirp-bin active watermark machine. MimirChirpBinTimeline renders a fixed-slope/window 32-bin chirp codebook and decodes with one dechirp plus fixed Goertzel bin scoring, then feeds de Bruijn triplet anchors and clock fitting. Hybrid fallback now renders/decodes chirp-bin evidence instead of the old dense chirplet matcher. Synthetic --chirp-bin-self-test passed with 23 frames, 21 anchors, 48000 Hz clock, and zero MAE; old --chirplet-self-test still passed. A real hybrid app run emitted chirp-bin batches, but the current probe config's 30s capture limit left loopback/mic windows stale before acoustic chirp-bin reports could be proven."}
{"ts": "2026-05-22T19:58:44+01:00", "type": "implementation", "status": "ok", "note": "Fixed hybrid watermark being obtrusive. Root causes: Aquarium applied EnqueuePcm16Base64 gain twice, Mimir treated immediate audio chunks like scheduled future segments and caught up missed hybrid segments as audible backlog, and probe configs stopped WASAPI capture after 30s. Aquarium now applies queued PCM gain once; Mimir hybrid uses separate low watermarkGain default 0.035, emits one 0.5s chirp-bin burst every 2s only while passive confidence is weak, and skips missed segments instead of catch-up dumping. Probe audio durations are now 3600s. Short hybrid app run showed batches at firstSegment 0,4,8,12 with gain 0.035."}
{"ts": "2026-05-22T20:32:10+01:00", "type": "verification", "status": "ok", "note": "Hybrid chirp-bin analyzer no longer inherits passive 2s gate: short-window self-test feeds rolling buffers with 1s chirp-bin loopback/candidate audio and recovers a 317-sample delay exactly with 5 matched events and 0.854 confidence. Live app smoke after the fix did not prove acoustic decode because Scarlett loopback stalled after one block, so that run is loopback freshness evidence rather than duration evidence."}
{"ts": "2026-05-23T10:26:32+01:00", "type": "verification", "status": "ok", "note": "Chirp-bin hybrid analyzer now proves microsecond-scale fractional timing in memory: --hybrid-sync-self-test uses a 317.375-sample delayed rolling-buffer candidate and recovers 317.392716 samples, 0.017716 samples / 0.369 us error, with 5 matched chirp-bin events and 0.851 confidence. Reports and sync states now expose delayUs alongside fractional samples."}
{"ts": "2026-05-23T10:39:21+01:00", "type": "verification", "status": "partial", "note": "Focusrite Scarlett Solo currently exposes only generic Windows audio behavior before driver install: no ASIO registry entries, shared WASAPI capture 48000Hz Float32, shared Scarlett loopback 44100Hz Float32, and strict WASAPI exclusive 24-bit/192kHz requests are rejected with unsupported format. Official Focusrite Control 3.27.0 installer was downloaded from Focusrite to artifacts/drivers/focusrite_control_v3_27_0.exe with SHA256 07F1B031ABAB6F0F641B2BD6219AC264B37932332BE5B3997BADC00AEC113AD9; install/verify ASIO before cutting the Scarlett hot path."}
{"ts": "2026-05-23T16:01:35+01:00", "type": "verification", "status": "ok", "note": "Focusrite driver install registered Focusrite USB ASIO and Focusrite Thunderbolt ASIO in HKLM\\\\SOFTWARE\\\\ASIO. The new native ASIO probe instantiated Focusrite USB ASIO from CLSID {AC4D0455-50D7-4498-B3CD-9A41D130B759}, reported 2 inputs / 2 outputs, preferred 192-frame buffers, accepted 44.1/48/88.2/96/176.4/192 kHz, and captured nonzero 2-channel Int32LSB input callbacks at 192 kHz for 5 seconds. Scarlett ASIO is now usable; next cut is feeding ASIO buffers into Mimir.Runtime instead of the WASAPI diagnostic bridge."}
{"ts": "2026-05-23T16:19:02+01:00", "type": "verification", "status": "ok", "note": "Raven ASIO verification succeeded over SSH. Focusrite USB ASIO is registered on Raven and the copied native asio_audio_cadence probe set 192000 Hz, reported 4 inputs / 2 outputs, 192-frame preferred buffers, 44.1-192 kHz support, Int32LSB input channels named Input 1, Input 2, Loopback 1, Loopback 2, and captured nonzero 4-channel callbacks for 5 seconds: 4990 callbacks, 958080 frames, estimated wall-clock rate 191546.848 Hz. Raven can pull Scarlett ASIO at 192 kHz, including driver loopback channels."}
{"ts": "2026-05-23T17:06:31+01:00", "type": "verification", "status": "ok", "note": "Starfire now has the Scarlett Solo 4th Gen attached locally: USB VID_1235 PID_8218 serial S1DE2FP360D5F6. Focusrite USB ASIO exposes 4 inputs / 2 outputs locally: Input 1, Input 2, Loopback 1, Loopback 2, all Int32LSB. The ASIO probe set 192000 Hz and captured nonzero 4-channel callbacks for 5 seconds with 192-frame preferred buffers. This restores local ASIO loopback ownership to the Mimir host; Raven no longer needs to carry game-audio loopback for the soundfield timing path."}
{"ts": "2026-05-23T17:56:26+01:00", "type": "verification", "status": "partial", "note": "Added monitor-sweep mode to the ASIO cadence probe and ran Starfire Scarlett Solo 4th Gen at 192 kHz with 0.02 full-scale output bursts from 8-40 kHz. ASIO loopback channels detected the emitted tone at about 0.01949 amplitude for every tested frequency through 40 kHz. Acoustic input channel 1 detected weak tone energy around 8 kHz and 12 kHz (~0.00041, about -33.5 dB relative to loopback), dropped by 14-16 kHz, and was extremely weak above 20 kHz (roughly -58 dB at 20 kHz, -62 dB at 24 kHz, -80 dB at 32 kHz). Current studio-monitor/acoustic path is not a strong ultrasonic sync carrier; ASIO loopback is excellent for local reference and acoustic calibration should stay near the highest measured robust audible band unless stronger transducers/mics prove otherwise."}
{"ts": "2026-05-23T18:46:59+01:00", "type": "verification", "status": "ok", "note": "Added sample-rate selection to the hybrid chirp-bin self-test and removed the high-rate timing plateau bias from MimirChirpBinTimeline while preserving the 48 kHz compatibility behavior. Synthetic active chirp-bin timing now scales with sample rate: 48 kHz recovered 317.392716 vs 317.375 samples (0.369 us error), 96 kHz recovered 634.766098 vs 634.75 samples (0.168 us error), and 192 kHz recovered 1269.499997 vs 1269.5 samples (about 0.000003 samples, below printed microsecond precision). This proves the timing kernel benefits from 192 kHz in memory; live hardware proof still requires feeding ASIO callbacks into Mimir.Runtime instead of the diagnostic WASAPI/process path."}
{"ts": "2026-05-23T19:03:44+01:00", "type": "measurement", "status": "ok", "note": "Scarlett ASIO chirp-only artifact at 192 kHz: Loopback 1 -> Loopback 2 decoded at 0.000 us with 7 anchors and 0.896 confidence; physical input 2 decoded at 616.226 samples / 3209.508 us with 3 anchors and 0.516 confidence; physical input 1 had no anchors. One 2-second matched-kernel chirplet comparison took roughly 100 seconds, so the current chirp-only decoder is diagnostic, not the runtime hot path."}
{"ts": "2026-05-23T19:22:00+01:00", "type": "implementation", "status": "ok", "note": "Made the active audio sync path use the receiver-cheap chirp-bin decoder for both chirp-only and hybrid modes. The old arbitrary chirplet matcher remains diagnostic/reference only. The chirp-bin decoder now uses bounded energy/onset proposals, dechirp plus fixed Goertzel bins, explicit time/frequency ambiguity candidates, and constrained local waveform correlation for final fractional delay. Synthetic 192 kHz chirp-only and hybrid self-tests both recover a 1269.5-sample delay with printed 0.000 us error; a real Scarlett ASIO chirp-bin artifact decodes Loopback 1 -> Loopback 2 at 0.000 us with 12 anchors and 0.999 confidence, while physical mic channels still need acoustic robustness work."}
{"ts": "2026-05-23T19:40:50+01:00", "type": "implementation", "status": "ok", "note": "Extended active chirp-bin decoding toward the Perfect Machine receiver shape: standalone DecodeStreamWindow now refines source offset against the scheduled waveform so a listener with only codebook/schedule state can place delayed audio on canonical time. Synthetic 192 kHz standalone tests recover 1269.5 samples exactly, 96000 samples / 500 ms to below printed microsecond precision, and 13789.75 samples within 0.021 us. Pairwise Mimir sync now rejects independent clock-fit differences outside a 10s live horizon so coherent period aliases do not become absurd delays. Fensalir project references were updated from removed Aquarium.LocalCast to Aquarium.Fensalir."}
{"ts": "2026-05-23T19:47:34+01:00", "type": "implementation", "status": "ok", "note": "Active chirp-bin decoding now preserves calibration evidence as well as timing: each classified chirp carries the full dechirped 32-bin energy surface, stream decodes aggregate those bins into BandResponses, and sync reports print/expose those per-band response estimates. This makes the chirp stream a timing witness and a frequency-response calibration surface. Verified dotnet build, 192 kHz chirp-only self-test, 500 ms standalone self-test, and Scarlett ASIO loopback artifact with response bands."}
{"ts": "2026-05-23T20:03:21+01:00", "type": "implementation", "status": "ok", "note": "Added chirp-bin calibration profiles as the live meatspace response surface. MimirChirpBinCalibrationProfile summarizes per-source frames, anchors, clock confidence, anchor error, usable bins, and strongest measured bands from active chirp-bin decodes. MimirAudioSynchronizationAnalyzer keeps profiles even when timing reports are rejected, and BufferSmoke now prints them for runtime and ASIO artifact analysis. Verified build, 192 kHz chirp-only self-test, 500 ms standalone receiver self-test, Scarlett loopback sync, and physical input calibration evidence from the stored ASIO artifact."}
{"ts": "2026-05-23T20:19:36+01:00", "type": "implementation", "status": "ok", "note": "Replaced the profile-only chirp-bin calibration cut with a usable physical calibration model. The model records per-source usable bands, symbol reliability, expected-vs-observed confusion observations, timing residuals, delay hypotheses, phase summaries, and an adaptive codebook plan. MimirChirpBinTimeline can now decode with learned per-symbol weights, group-delay correction, and persisted delay-hypothesis seeds. BufferSmoke can run --calibrate-chirp-bin-asio-f32 to render/capture/analyze/persist the model, and --analyze-asio-f32 can load it via --calibration. The ASIO native worker now supports --emit-json-blocks so Focusrite ASIO callbacks can feed Mimir.Runtime continuously through the existing frame-event adapter while the native ABI cut is still pending."}
{"ts": "2026-05-23T20:31:27+01:00", "type": "implementation", "status": "ok", "note": "Completed the physical chirp-bin calibration loop instead of stopping at summaries. The calibration model now owns a shared emission plan from measured reliable symbols, and MimirRuntime renders chirp-bin calibration with that plan so dead bins are removed from the emitted alphabet and sequence order rises as needed. MimirChirpBinTimeline decodes variable-order codewords from the same emission plan, keeps learned response weights/group-delay correction, records bin-shift in confusion/delay hypotheses, and still preserves the default 32-symbol path when no model is loaded. ASIO callback ingestion remains continuous through the ASIO worker's sample-bearing runtime stream path; the next native ABI cut removes process transport overhead, not clock-domain ownership."}
{"ts": "2026-05-23T20:33:00+01:00", "type": "verification", "status": "ok", "note": "Verified continuous runtime ASIO ingestion through the ASIO worker stream path. Using config/mimir-runtime.asio.example.json, BufferSmoke ran for 2 seconds against Focusrite USB ASIO at 192 kHz and ingested 13,324 sample-bearing audio blocks across asio-ch0..asio-ch3, 3,331 blocks per channel, each 192 Float32 frames. This proves loopback and mic channels enter Mimir.Runtime buffers continuously in one ASIO clock domain; the run did not sync because BufferSmoke does not emit speaker calibration audio."}
{"ts": "2026-05-23T21:41:47+01:00", "type": "implementation", "status": "ok", "note": "Implemented the in-process Focusrite ASIO runtime source. native/asio_capture owns the ASIO COM driver/callback buffers and MimirAsioStreamSource drains 192 kHz Float32 blocks into Mimir.Runtime buffers for asio-ch0..asio-ch3 without stdout/base64 transport. The chirp-bin calibration model is now per output/mic path and the active decoder uses learned symbol weights, phase-coherence weights, group-delay correction, and joint global delay/bin-shift hypotheses."}
{"ts": "2026-05-23T21:41:53+01:00", "type": "verification", "status": "ok", "note": "Verified the in-process ASIO runtime ingest and active decoder after the native ASIO cut. dotnet build Mimir.slnx and cmake --build native/asio_capture/build --config Release passed cleanly. BufferSmoke with config/mimir-runtime.asio.example.json ingested 12,196 sample-bearing blocks in two seconds at 192 kHz, with 2,048 buffered 192-frame Float32 blocks on each asio-ch0..asio-ch3 channel. The standalone 192 kHz chirp-bin receiver recovered a 96,000-sample delay with 0.000001 sample error, and calibrated ASIO artifact analysis recovered asio-ch2->asio-ch3 at 0.000 us with 0.812 confidence."}
{"ts": "2026-05-23T21:43:33+01:00", "type": "verification", "status": "ok", "note": "Reran the in-process ASIO ingest after native cleanup changes. BufferSmoke with config/mimir-runtime.asio.example.json ingested 12,204 sample-bearing blocks in two seconds at 192 kHz and retained 2,048 192-frame Float32 blocks for each asio-ch0..asio-ch3 buffer. This remains an ingest proof only because BufferSmoke does not emit calibration audio in that run."}
{"ts": "2026-05-23T22:45:11+01:00", "type": "implementation", "status": "ok", "note": "Separated Mimir's app runtime from Fensalir's demo runtime. MimirRuntime no longer references Aquarium.Fensalir or delegates Frame/RenderPlan/Audio/Synth/Update/ComposeFrame to FensalirRuntime. It owns an empty scene with heightfield tracing and starfield disabled, its own audio/UI/render-plan documents, and only emits calibration audio when the configured reference audio buffer exists. Headless Mimir.App boots with 'Mimir empty scene runtime booted' and no Fensalir splash reconstruction/fractal scene in Mimir source."}
{"ts": "2026-05-23T23:10:00+01:00", "type": "verification", "status": "partial", "note": "Live chirp-only physical Scarlett run on 2026-05-23 emitted through the Focusrite output path and captured 4 ASIO inputs at 192 kHz. Runtime app telemetry locked Loopback 1->Loopback 2 (asio-ch2->asio-ch3) with 13-14 matched chirp-bin events and confidence 1.000. Physical mic input asio-ch1 heard enough energy to calibrate 145 frames / 64 anchors over the 20s capture, with 6 reliable symbols and delay hypotheses around 2,748 samples, but the current pairwise analyzer still failed to produce a timing report in a 2s window. asio-ch0 produced usable band energy but zero anchors. Persisted calibration/chirp-bin/scarlett-live-20260523-230642.json; raw capture remains ignored under artifacts/."}
{"ts": "2026-05-23T23:19:38+01:00", "type": "verification", "status": "partial", "note": "After raising physical mic gain, reran live chirp-only ASIO and a 20s Scarlett calibration capture on 2026-05-23. Runtime still locked digital loopback asio-ch2->asio-ch3 at confidence 1.000 with 13-14 matched events. Physical mic asio-ch1 improved in the long capture from 64 to 74 anchors and clock confidence from 0.806 to 0.879, with 5 reliable symbols and delay hypotheses around 2682-2692 samples. The current 2s calibrated pairwise analyzer still failed to report asio-ch1 because short slices often decode 0-4 candidate anchors with no matched triplet path. asio-ch0 remains energy-only with zero anchors. Persisted calibration/chirp-bin/scarlett-hotmic-20260523-231637.json."}
{"ts": "2026-05-23T23:30:55+01:00", "type": "decision", "status": "ok", "note": "Added source-level code algorithm map and linked Perfect Machine hypotheses research note."}
{"ts": "2026-05-23T23:45:11+01:00", "type": "decision", "status": "ok", "note": "Added Perfect Machine domain index plus 2026-05-23 architecture/optimization/reference study and sample implementation sketches for decoder, SIMD/GPU scoring, actuator, and native rings."}
{"ts": "2026-05-24T01:55:37+01:00", "type": "decision", "status": "ok", "note": "Completed corrected two-hour Perfect Machine study pass from 2026-05-23T23:54:42.9041588+01:00 through 2026-05-24T01:54:56.9747630+01:00; research/perfect-machine-study-2026-05-23 now indexes decoder architecture, acoustic field models, calibration sessions, Fensalir/native boundaries, distributed receivers, benchmarks, failure modes, low-level notes, and sample implementation sketches."}
{"ts": "2026-05-24T11:38:08+01:00", "type": "implementation", "status": "ok", "note": "Added bioacoustic indexed-cepstral training harness with CultLib/CultCache typed result receipts and WAV artifact directories. Latest run artifacts/bioacoustic-training/bioacoustic-20260524-103438 scored 20 hypothesis/degradation cases; identity often survives mel-cepstral warp/blur, but timing MAE under warp points next at a global clock/path hypothesis rather than larger brute-force matching."}
{"ts": "2026-05-24T16:06:07+01:00", "type": "implementation", "status": "ok", "note": "Added global bioacoustic clock hypothesis scoring to the training harness and the first Faust-owned alignment actuator surface. Corrected receipt artifacts/bioacoustic-training/bioacoustic-20260524-150000 favors baseline-mfcc-index/blur-light with total 0.766 after penalizing low-anchor timing fits. bioacoustic-actuator-self-test estimates 317.375 samples, applies fractional correction, and remeasures 0.000 us residual; faust/mimir_alignment_actuator.dsp validates through Faust C++ generation."}
{"ts": "2026-05-24T16:09:30+01:00", "type": "implementation", "status": "ok", "note": "Extended the corrected bioacoustic training run to 0.75s in artifacts/bioacoustic-training/bioacoustic-20260524-150729. Compact indexing wins clean throughput at total 0.752/realtime 6.6x, baseline remains steadier under degradation, highband has warped-path value, and anchor density/time-to-lock should become explicit metrics."}
{"ts": "2026-05-24T17:02:15+01:00", "type": "implementation", "status": "ok", "note": "Promoted Perfect Machine research configurations into Mimir.Runtime module library: decoder/language/path-learning/localization/benchmark/actuator/capture/ingest/reservoir/distributed/network/authority/publication profiles, CultMesh contracts, Fensalir lowering, manifest export, and BufferSmoke profile/contract smoke commands."}
{"ts": "2026-05-24T17:06:40+01:00", "type": "verification", "status": "ok", "note": "Added and optimized Mimir-to-Fensalir lowering benchmark. Six synthetic camera buffers plus two audio sync states lower in about 2.5 us/iteration with roughly 2.3 KB allocated per iteration after pre-sizing lists and removing LINQ sort/projection."}
{"ts": "2026-05-24T22:26:12+01:00", "type": "experiment", "status": "ok", "note": "Added log-mel-domain warp/blur damage and log-mel spectral-flux proposal decoder variants to the bioacoustic contestant arena. Canary packet plus packet-razor-index remains best: 92.522 language score on logmel-warp-light-blur. Naive flux proposals preserve anchors but lose to managed FFT overhead, so fuse flux into the existing feature pass before promoting it."}
{"ts": "2026-05-24T22:46:18+01:00", "type": "experiment", "status": "ok", "note": "Built packet-razor-streaming-faust: schedule-owned local packet windows with four payload hypotheses and tiny timing refinement, plus Faust front-end lowering target. Arena result on canary-packet-trill: best language score 1121.012 on logmel-blur-light, 62.6x realtime, 6/6 events, 100% payload. Lesson: wide MFCC search is acquisition/reference; hot loop should lock clock then inspect scheduled local packet windows."}
{"ts": "2026-05-24T22:47:10+01:00", "type": "verification", "status": "ok", "note": "Verified faust/mimir_packet_razor_frontend.dsp with Faust 2.85.5 C++ generation. The DSP front-end exposes 16 log-spaced resonant band-energy outputs plus 16 positive-flux outputs for the packet razor streaming receiver lowering target."}