{ "status": "pass", "mode": "smoke", "strict": false, "platform": "darwin", "arch": "arm64", "hostname": "Hampuss-Mac-Studio.local", "startedAt": "2026-06-09T04:08:25.060Z", "endedAt": "2026-06-09T04:10:06.715Z", "reportDir": "/Users/hampus/Development/fluxer/fluxer_desktop/native-media-reports/2026-06-09T0407-codex-macos-smoke", "gates": [ { "name": "mode-valid", "status": "pass", "mode": "smoke" }, { "name": "documentation-current", "status": "pass", "missing": [] }, { "name": "strict-prerequisites", "status": "skip", "reason": "smoke mode" }, { "name": "strict-command-plan", "status": "skip", "reason": "smoke mode" } ], "plannedCommands": [ { "name": "main-process-native-media-unit-tests", "command": "node --test src/main/NativeVoiceEngine.test.mjs src/main/NativeScreenCapture.test.mjs", "category": "shared", "cwd": "." }, { "name": "desktop-typecheck", "command": "pnpm typecheck", "category": "shared", "cwd": "." }, { "name": "webrtc-sender-build", "command": "pnpm --dir native/webrtc-sender build", "category": "native-sender", "cwd": "." }, { "name": "webrtc-sender-tests", "command": "pnpm --dir native/webrtc-sender test", "category": "native-sender", "cwd": "." }, { "name": "webrtc-sender-livekit-harness", "command": "pnpm --dir native/webrtc-sender test:livekit", "category": "livekit", "cwd": "." }, { "name": "mac-screen-capture-build", "command": "pnpm --dir native/mac-screen-capture build", "category": "platform-native", "cwd": "." }, { "name": "mac-screen-capture-tests", "command": "pnpm --dir native/mac-screen-capture test", "category": "platform-native", "cwd": "." }, { "name": "mac-app-audio-build", "command": "pnpm --dir native/mac-app-audio build", "category": "platform-native", "cwd": "." }, { "name": "mac-app-audio-rust-tests", "command": "pnpm --dir native/mac-app-audio test:cargo", "category": "platform-native", "cwd": "." }, { "name": "mac-app-audio-js-tests", "command": "'/Users/hampus/Development/fluxer/node_modules/.pnpm/node_modules/.bin/vitest' run", "category": "platform-native", "cwd": "native/mac-app-audio" } ], "commands": [ { "name": "main-process-native-media-unit-tests", "command": "node --test src/main/NativeVoiceEngine.test.mjs src/main/NativeScreenCapture.test.mjs", "category": "shared", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:08:25.062Z", "endedAt": "2026-06-09T04:08:25.338Z", "durationMs": 276, "stdoutTail": "▶ NativeScreenCapture source identity and capability reporting\n ✔ normalizes display and window sources without changing source ids (2.653541ms)\n ✔ starts display and window captures with exact source id and kind and reports diagnostics (1.257458ms)\n ✔ fails fast when native frame sink is required but unavailable (0.6175ms)\n ✔ passes caller-provided capture id and native sink handle to the platform wrapper (0.494583ms)\n ✔ reports macOS and Linux display/window capture capabilities from platform backends (0.748042ms)\n✔ NativeScreenCapture source identity and capability reporting (6.317833ms)\n▶ NativeVoiceEngine v2 bridge contract fixtures\n ✔ registers and removes every v2 IPC channel from the bridge contract fixture (2.216209ms)\n✔ NativeVoiceEngine v2 bridge contract fixtures (2.659666ms)\n▶ NativeVoiceEngine v2 IPC request fixtures\n ✔ replays fixture: valid connect reaches the native engine (0.942959ms)\n ✔ replays fixture: invalid connect args throw (0.602334ms)\n ✔ replays fixture: invalid mic enabled args return typed operation failure (0.997125ms)\n ✔ replays fixture: valid microphone publish returns typed success (0.571541ms)\n ✔ replays fixture: invalid microphone publish returns typed operation failure (0.397ms)\n ✔ replays fixture: valid zero-copy screen publish reaches native engine (0.593ms)\n ✔ replays fixture: explicit non-zero-copy screen publish is rejected (0.448708ms)\n ✔ replays fixture: hardware screen encoding without zero-copy is rejected (0.5ms)\n ✔ replays fixture: valid native screen audio publish reaches native engine (0.410292ms)\n ✔ replays fixture: invalid screen audio route throws (0.41325ms)\n ✔ replays fixture: valid camera publish reaches native engine (0.3655ms)\n ✔ replays fixture: invalid camera publish throws (0.345917ms)\n ✔ replays fixture: connected stats return normalized empty stats (0.378125ms)\n ✔ replays fixture: valid participant volume reaches native engine (0.356667ms)\n ✔ replays fixture: invalid participant volume throws (0.33175ms)\n ✔ replays fixture: valid remote subscription reaches native engine (0.372709ms)\n ✔ replays fixture: invalid remote subscription quality throws (0.322209ms)\n ✔ replays fixture: valid data publish reaches native engine (0.440584ms)\n ✔ replays fixture: invalid data payload throws (0.37625ms)\n✔ NativeVoiceEngine v2 IPC request fixtures (9.494209ms)\n▶ NativeVoiceEngine connection lifecycle\n ✔ prewarms the native voice backend once through IPC (0.402042ms)\n ✔ reuses the prewarmed native voice engine instance for connect (0.345084ms)\n ✔ prepares a fresh idle native voice engine after disconnect (0.408292ms)\n ✔ does not forward native events after disconnecting a pending connect (6.291459ms)\n ✔ disconnects stale native connect completion after a replacement connect starts (1.882667ms)\n✔ NativeVoiceEngine connection lifecycle (9.5095ms)\n▶ NativeVoiceEngine screen frame routing\n ✔ publishes screen share with source pacing and exposes a native frame sink handle (0.514834ms)\n ✔ forwards device screen share publish options to the native engine (0.381375ms)\n ✔ keeps screen-share audio published when screen video is unpublished (0.475375ms)\n ✔ replaces screen captures without releasing screen-share audio or duplicating priority (0.35675ms)\n ✔ updates active screen-share encoding over IPC (0.355959ms)\n ✔ republishes active screen-share when update changes codec or hardware mode (0.2975ms)\n ✔ forwards watch and unwatch operations with source, enablement, and quality intact (0.32775ms)\n ✔ reports VideoToolbox hardware capability from the native addon (0.26625ms)\n ✔ reports native voice engine capabilities from the native addon (0.29925ms)\n ✔ maps native addon microphone not-connected errors to the typed operation code (0.355417ms)\n✔ NativeVoiceEngine screen frame routing (3.728334ms)\nℹ tests 40\nℹ suites 5\nℹ pass 40\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 207.168208\n", "stderrTail": "" }, { "name": "desktop-typecheck", "command": "pnpm typecheck", "category": "shared", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:08:25.339Z", "endedAt": "2026-06-09T04:08:26.138Z", "durationMs": 799, "stdoutTail": "\n> fluxer_desktop@0.0.0 typecheck /Users/hampus/Development/fluxer/fluxer_desktop\n> tsgo --noEmit\n\n", "stderrTail": "" }, { "name": "webrtc-sender-build", "command": "pnpm --dir native/webrtc-sender build", "category": "native-sender", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:08:26.138Z", "endedAt": "2026-06-09T04:08:46.274Z", "durationMs": 20136, "stdoutTail": "\n> @fluxer/webrtc-sender@0.0.0 build /Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender\n> cargo run --locked --quiet --manifest-path ../../../tools/ci/Cargo.toml -- build-desktop-native-addon\n\n[buildRustNodeAddon] cwd=/Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender\n+ /Users/hampus/.rustup/toolchains/1.93.0-aarch64-apple-darwin/bin/cargo build --release --target aarch64-apple-darwin --manifest-path Cargo.toml --features camera-native\n+ codesign --force --sign - /Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender/webrtc-sender.darwin-arm64.node\n", "stderrTail": "warning: unused import: `enum_dispatch`\n --> vendor/libwebrtc/src/audio_source.rs:15:13\n |\n15 | use crate::{enum_dispatch, imp::audio_source as imp_as};\n | ^^^^^^^^^^^^^\n |\n = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default\n\nwarning: unnecessary `unsafe` block\n --> vendor/libwebrtc/src/native/apm.rs:32:25\n |\n32 | sys_handle: unsafe {\n | ^^^^^^ unnecessary `unsafe` block\n |\n = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default\n\nwarning: hiding a lifetime that's elided elsewhere is confusing\n --> vendor/libwebrtc/src/native/audio_mixer.rs:30:34\n |\n30 | fn get_audio_frame_with_info(&self, target_sample_rate: u32) -> Option;\n | ^^^^^ the lifetime is elided here ^^^^^^^^^^ the same lifetime is hidden here\n |\n = help: the same lifetime is referred to in inconsistent ways, making the signature confusing\n = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default\nhelp: use `'_` for type paths\n |\n30 | fn get_audio_frame_with_info(&self, target_sample_rate: u32) -> Option>;\n | ++++\n\nwarning: `libwebrtc` (lib) generated 3 warnings (run `cargo fix --lib -p libwebrtc` to apply 2 suggestions)\nwarning: struct `DmabufFrameDesc` is never constructed\n --> src/texture_source.rs:14:12\n |\n14 | pub struct DmabufFrameDesc {\n | ^^^^^^^^^^^^^^^\n |\n = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default\n\nwarning: variants `InvalidDimensions`, `UnsupportedFormat`, `InvalidPlanes`, and `SdkNativeTextureUnsupported` are never constructed\n --> src/texture_source.rs:29:5\n |\n27 | pub enum TextureEncodeError {\n | ------------------ variants in this enum\n28 | NoTexture,\n29 | InvalidDimensions,\n | ^^^^^^^^^^^^^^^^^\n30 | UnsupportedFormat,\n | ^^^^^^^^^^^^^^^^^\n31 | InvalidPlanes,\n | ^^^^^^^^^^^^^\n...\n34 | SdkNativeTextureUnsupported,\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n |\n = note: `TextureEncodeError` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis\n\nwarning: function `fourcc` is never used\n --> src/texture_source.rs:75:10\n |\n75 | const fn fourcc(bytes: [u8; 4]) -> u32 {\n | ^^^^^^\n\nwarning: constant `DRM_FORMAT_XRGB8888` is never used\n --> src/texture_source.rs:79:7\n |\n79 | const DRM_FORMAT_XRGB8888: u32 = fourcc(*b\"XR24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ARGB8888` is never used\n --> src/texture_source.rs:80:7\n |\n80 | const DRM_FORMAT_ARGB8888: u32 = fourcc(*b\"AR24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XBGR8888` is never used\n --> src/texture_source.rs:81:7\n |\n81 | const DRM_FORMAT_XBGR8888: u32 = fourcc(*b\"XB24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ABGR8888` is never used\n --> src/texture_source.rs:82:7\n |\n82 | const DRM_FORMAT_ABGR8888: u32 = fourcc(*b\"AB24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XRGB2101010` is never used\n --> src/texture_source.rs:83:7\n |\n83 | const DRM_FORMAT_XRGB2101010: u32 = fourcc(*b\"XR30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ARGB2101010` is never used\n --> src/texture_source.rs:84:7\n |\n84 | const DRM_FORMAT_ARGB2101010: u32 = fourcc(*b\"AR30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XBGR2101010` is never used\n --> src/texture_source.rs:85:7\n |\n85 | const DRM_FORMAT_XBGR2101010: u32 = fourcc(*b\"XB30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ABGR2101010` is never used\n --> src/texture_source.rs:86:7\n |\n86 | const DRM_FORMAT_ABGR2101010: u32 = fourcc(*b\"AB30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_NV12` is never used\n --> src/texture_source.rs:87:7\n |\n87 | const DRM_FORMAT_NV12: u32 = fourcc(*b\"NV12\");\n | ^^^^^^^^^^^^^^^\n\nwarning: function `drm_format_supported` is never used\n --> src/texture_source.rs:89:8\n |\n89 | pub fn drm_format_supported(drm_format: u32) -> bool {\n | ^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `MAX_TEXTURE_EDGE` is never used\n --> src/texture_source.rs:104:7\n |\n104 | const MAX_TEXTURE_EDGE: u32 = 8192;\n | ^^^^^^^^^^^^^^^^\n\nwarning: function `validate_dimensions` is never used\n --> src/texture_source.rs:106:4\n |\n106 | fn validate_dimensions(width: u32, height: u32) -> Result<(), TextureEncodeError> {\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: function `validate_dmabuf_desc` is never used\n --> src/texture_source.rs:131:8\n |\n131 | pub fn validate_dmabuf_desc(desc: &DmabufFrameDesc) -> Result<(), TextureEncodeError> {\n | ^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `sdk_accepts_dmabuf_texture_buffers` is never used\n --> src/texture_source.rs:244:4\n |\n244 | fn sdk_accepts_dmabuf_texture_buffers() -> bool {\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `should_attempt_dmabuf_encode` is never used\n --> src/texture_source.rs:262:8\n |\n262 | pub fn should_attempt_dmabuf_encode(\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `try_publish_dmabuf` is never used\n --> src/texture_source.rs:335:12\n |\n335 | pub fn try_publish_dmabuf(\n | ^^^^^^^^^^^^^^^^^^\n\nwarning: function `publish_native_buffer` is never used\n --> src/texture_source.rs:362:8\n |\n362 | fn publish_native_buffer(source: &NativeVideoSource, buffer: NativeBuffer, timestamp_us: i64) {\n | ^^^^^^^^^^^^^^^^^^^^^\n\nwarning: variants `Bgra` and `Nv12` are never constructed\n --> src/engine.rs:256:5\n |\n255 | enum PendingVideoFrame {\n | ----------------- variants in this enum\n256 | Bgra {\n | ^^^^\n...\n264 | Nv12 {\n | ^^^^\n\nwarning: `fluxer_webrtc_sender` (lib) generated 21 warnings\n Finished `release` profile [optimized] target(s) in 0.47s\n/Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender/webrtc-sender.darwin-arm64.node: replacing existing signature\n" }, { "name": "webrtc-sender-tests", "command": "pnpm --dir native/webrtc-sender test", "category": "native-sender", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:08:46.274Z", "endedAt": "2026-06-09T04:09:48.093Z", "durationMs": 61819, "stdoutTail": "_and_raw ... ok\ntest events::tests::json_u8_array_serializes_bytes_as_numbers ... ok\ntest events::tests::leaves_plain_ascii_and_unicode_untouched ... ok\ntest events::tests::raw_array_preserves_prebuilt_json_objects ... ok\ntest events::tests::track_source_strings_match_livekit_js_sources ... ok\ntest hardware_encoder::tests::publish_codec_runtime_gate_accepts_h265_when_reported_available ... ok\ntest hardware_encoder::tests::publish_codec_runtime_gate_only_requires_hardware_for_h265 ... ok\ntest hardware_encoder::tests::reports_available_nvenc_when_compiled_and_runtime_ready ... ok\ntest hardware_encoder::tests::reports_available_videotoolbox_with_h264_and_h265 ... ok\ntest hardware_encoder::tests::reports_driver_sdk_incompatibility_before_encode_session ... ok\ntest hardware_encoder::tests::reports_h264_only_when_hevc_guid_is_absent ... ok\ntest hardware_encoder::tests::reports_missing_runtime_prerequisites_when_compiled ... ok\ntest hardware_encoder::tests::reports_missing_runtime_prerequisites_when_probe_is_absent ... ok\ntest hardware_encoder::tests::reports_no_cuda_devices_using_obs_style_reason ... ok\ntest hardware_encoder::tests::reports_no_supported_codecs_when_guid_query_finds_no_fluxer_codecs ... ok\ntest hardware_encoder::tests::reports_not_compiled_before_runtime_missing ... ok\ntest hardware_encoder::tests::reports_unsupported_platforms_clearly ... ok\ntest hardware_encoder::tests::reports_videotoolbox_h264_only_when_hevc_session_is_unavailable ... ok\ntest hardware_encoder::tests::reports_videotoolbox_unavailable_with_status_details ... ok\ntest hardware_encoder::tests::reports_windows_nvenc_publish_backend_not_compiled ... ok\ntest hardware_encoder::tests::reports_windows_nvenc_runtime_dll_names_when_missing ... ok\ntest hardware_encoder::tests::reports_windows_nvenc_without_linux_zero_copy_inputs ... ok\ntest send_control::tests::audio_buffer_growth_caps_at_configured_max_and_reset_clears_pressure ... ok\ntest send_control::tests::audio_buffer_expands_on_gaps_and_shrinks_after_stability ... ok\ntest send_control::tests::audio_buffer_ignores_clock_regression_without_false_rebuffer ... ok\ntest send_control::tests::audio_buffer_max_is_clamped_to_real_time_bounds ... ok\ntest send_control::tests::idle_snapshot_reflects_audio_pressure_without_video_state ... ok\ntest send_control::tests::video_controller_continues_degrading_under_sustained_latency_pressure ... ok\ntest send_control::tests::video_controller_degrades_on_encoder_drop_pressure ... ok\ntest send_control::tests::video_controller_degrades_on_encoder_egress_pressure ... ok\ntest send_control::tests::audio_buffer_stress_stays_within_realtime_bounds_under_jitter ... ok\ntest send_control::tests::video_controller_degrades_on_latency_pressure_without_coalescing ... ok\ntest send_control::tests::video_controller_ignores_pure_coalescing_jitter ... ok\ntest send_control::tests::audio_buffer_ignores_concurrent_stale_pushes_without_moving_last_push_backwards ... ok\ntest send_control::tests::video_controller_ignores_single_encoder_egress_sample ... ok\ntest send_control::tests::video_controller_ignores_sustained_coalescing_jitter_across_windows ... ok\ntest send_control::tests::video_controller_keeps_requested_fps_when_adaptive_send_is_disabled ... ok\ntest send_control::tests::video_controller_preserves_pressure_reason_while_degraded_but_stable ... ok\ntest send_control::tests::video_controller_recovers_after_stable_windows ... ok\ntest send_control::tests::video_controller_recovers_from_minimum_in_two_stable_steps ... ok\ntest send_control::tests::video_controller_requires_a_full_stable_recovery_window ... ok\ntest send_control::tests::video_stats_effective_fps_uses_capture_time_bounds_for_out_of_order_records ... ok\ntest send_control::tests::video_stats_snapshot_counts_coalescing_drops_failures_and_effective_fps ... ok\ntest send_control::tests::video_controller_stress_keeps_target_inside_configured_bounds ... ok\ntest stats::tests::bitrate_computes_kbps_from_byte_delta ... ok\ntest stats::tests::bitrate_first_sample_is_zero ... ok\ntest stats::tests::bitrate_half_second_doubles_rate ... ok\ntest stats::tests::bitrate_rejects_backwards_time_and_bytes ... ok\ntest stats::tests::empty_stats_serialise_to_null_rtt_and_empty_arrays ... ok\ntest stats::tests::sanitize_audio_level_clamps ... ok\ntest stats::tests::full_stats_serialise_to_exact_contract_shape ... ok\ntest stats::tests::sanitize_kbps_drops_nan_inf_negative_and_rounds ... ok\ntest send_control::tests::video_stats_handles_concurrent_recording_without_lost_counts ... ok\ntest stats::tests::send_health_serialises_to_exact_contract_shape ... ok\ntest stats::tests::unit_conversions_seconds_to_ms ... ok\ntest stats::tests::video_inbound_omits_audio_level_audio_omits_fps ... ok\ntest texture_source::tests::dmabuf_desc_from_parts_populates_all_plane_arrays ... ok\ntest texture_source::tests::dmabuf_desc_from_parts_rejects_incomplete_native_inputs ... ok\ntest texture_source::tests::dmabuf_desc_from_parts_rejects_negative_fds ... ok\ntest texture_source::tests::drm_format_gate_accepts_obs_vkcapture_texture_formats ... ok\ntest texture_source::tests::dxgi_format_gate_accepts_8bit_rgba_bgra_only ... ok\ntest texture_source::tests::error_strings_are_stable ... ok\ntest texture_source::tests::probe_is_available_only_for_explicit_hardware_codecs ... ok\ntest texture_source::tests::should_attempt_dmabuf_is_sdk_gated_after_validation_capability ... ok\ntest texture_source::tests::should_attempt_falls_back_when_capability_unavailable ... ok\ntest texture_source::tests::should_attempt_validates_frame_when_capability_available ... ok\ntest texture_source::tests::validate_accepts_a_clean_bgra_texture ... ok\ntest texture_source::tests::validate_dmabuf_accepts_supported_formats_with_optional_uuid ... ok\ntest texture_source::tests::validate_dmabuf_rejects_invalid_planes ... ok\ntest texture_source::tests::validate_precedence_handle_before_dims_before_format ... ok\ntest texture_source::tests::validate_rejects_odd_zero_and_oversized_dims ... ok\ntest texture_source::tests::validate_rejects_unsupported_format ... ok\ntest texture_source::tests::validate_rejects_zero_handle_as_no_texture ... ok\ntest yuv::tests::bgra_black_white_grey_levels ... ok\ntest engine::tests::pcm16_audio_frame_rejects_implausible_format_and_overlong_chunks ... ok\ntest yuv::tests::bgra_golden_2x2_solid_colour_exact_bytes ... ok\ntest yuv::tests::bgra_golden_strided_2x2_skips_row_padding ... ok\ntest yuv::tests::bgra_plane_sizes ... ok\ntest yuv::tests::bgra_primaries_have_expected_chroma_signs ... ok\ntest yuv::tests::copy_nv12_planes_preserves_nv12_layout ... ok\ntest yuv::tests::copy_nv12_planes_rejects_short_buffers ... ok\ntest yuv::tests::copy_nv12_planes_respects_destination_stride ... ok\ntest yuv::tests::nv12_4x4_deinterleaves_two_chroma_columns ... ok\ntest yuv::tests::nv12_golden_4x2_packed_to_i420 ... ok\ntest yuv::tests::nv12_packed_2x2_deinterleaves ... ok\ntest yuv::tests::nv12_respects_row_padding ... ok\ntest yuv::tests::nv12_short_buffer_is_rejected ... ok\ntest yuv::tests::rejects_odd_or_tiny_dimensions ... ok\ntest yuv::tests::rgb_golden_2x2_solid_colour_matches_bgra_path ... ok\ntest yuv::tests::rgb_plane_sizes_and_levels ... ok\ntest yuv::tests::rgb_rejects_odd_dims_and_short_buffer ... ok\n\ntest result: ok. 144 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 6 tests\ntest video_frame_meta_matches_contract ... ok\ntest outbound_fixtures_match_contract ... ok\ntest inbound_covers_subscribe_and_lifecycle ... ok\ntest outbound_covers_the_single_identity_publish_path ... ok\ntest inbound_fixtures_match_contract ... ok\ntest e2ee_state_is_ok_on_the_wire ... ok\n\ntest result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n▶ webrtc-sender loader wrapper\n ✔ resolves the native addon filename for every desktop OS/arch target (0.586ms)\n ✔ rejects unsupported platform/architecture pairs explicitly (0.172042ms)\n ✔ returns a native hardware encoder capability when the binding exports one (1.042375ms)\n ✔ delegates dropped video callback metrics through the VoiceEngine wrapper (0.114833ms)\n ✔ reports VoiceEngine feature capabilities from the wrapped native prototype (0.322209ms)\n ✔ delegates native voice engine prewarm when the binding exports it (0.055542ms)\n ✔ delegates device microphone publish through the VoiceEngine wrapper (0.10525ms)\n ✔ delegates native camera devices and publish options through the VoiceEngine wrapper (0.117583ms)\n ✔ delegates device screen-share publish through the VoiceEngine wrapper (0.119541ms)\n ✔ reports device screen-share publish as unavailable for older native bindings (0.114084ms)\n ✔ delegates screen-share simulcast selection through the VoiceEngine wrapper (0.104083ms)\n ✔ delegates connect options through the VoiceEngine wrapper (0.10775ms)\n ✔ delegates native screen frame sink handle creation through the VoiceEngine wrapper (0.060958ms)\n ✔ treats native screen frame sink handles as unavailable for older voice bindings (0.065791ms)\n ✔ defaults dropped video callback metrics to zero for older native bindings (0.050375ms)\n ✔ delegates remote track subscription updates through the VoiceEngine wrapper (0.071958ms)\n ✔ ignores remote track subscription updates for older native bindings (0.054042ms)\n ✔ delegates data packets through the VoiceEngine wrapper (0.129167ms)\n ✔ rejects invalid data packet payloads in the wrapper (0.146916ms)\n ✔ returns an unavailable hardware encoder capability without a binding (0.039833ms)\n✔ webrtc-sender loader wrapper (4.374833ms)\n▶ livekit harness setup matrix\n ✔ maps all supported codec spellings to expected mime types (1.00325ms)\n ✔ parses codec lists with fallback and rejects empty effective lists (0.878375ms)\n ✔ default non-strict config keeps the fast local live setup small (0.956958ms)\n ✔ strict config expands to multi-codec secondary-publisher scenarios (0.648125ms)\n ✔ stress knobs parse packet loss, resolution stability, audio gap, and video pattern (0.379917ms)\n ✔ stress knobs reject impossible send pacing configurations (1.902ms)\n ✔ explicit secondary codec expectations override rotating defaults (0.287792ms)\n ✔ secondary screen codec aliases are accepted and conflicting aliases are rejected (0.592416ms)\n ✔ external token setup derives identities, requires matching tokens, and redacts reports (0.933834ms)\n ✔ report sanitization strips URL credentials, query strings, and fragments (0.452459ms)\n ✔ jwt subject and TCP target parsing catch malformed live setups early (0.230125ms)\n ✔ admin token has the room-scoped grant needed for server publishing validation (0.303459ms)\n ✔ scenario room names are stable and bounded for generated-token suites (0.07075ms)\n ✔ strict report checks fail when the strict window has too few samples to measure gaps (137.344709ms)\n ✔ strict report checks use only samples inside the measured window (6.192458ms)\n ✔ strict packet loss gate uses loss deltas inside the strict window (10.880291ms)\n ✔ server publishing checks cover primary and secondary screen, audio, and camera tracks (0.760666ms)\n ✔ server publishing checks fail closed on missing server tracks (0.331583ms)\n ✔ server publishing checks reject wrong participant identity (0.246792ms)\n ✔ server publishing checks reject wrong kind, source, and screen mime (0.27275ms)\n ✔ server publishing checks reject muted or missing mute state on expected tracks (0.213459ms)\n ✔ server publishing checks handle protobuf numeric enums without accepting data tracks as video (0.200917ms)\n ✔ server publishing checks fail closed on missing secondary, audio, camera, and screen-audio tracks (0.217459ms)\n ✔ strict server publishing validation does not pass open on Twirp errors (0.242125ms)\n✔ livekit harness setup matrix (166.608375ms)\nℹ tests 44\nℹ suites 2\nℹ pass 44\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 973.929333\n", "stderrTail": "segmentation v1.13.2\n Compiling convert_case v0.11.0\n Compiling image v0.25.10\n Compiling cxx-build v1.0.194\n Compiling flume v0.11.1\n Compiling core-media-sys v0.1.2\n Compiling napi v3.9.0\n Compiling thiserror-impl v1.0.69\n Compiling objc v0.2.7\n Compiling cocoa v0.20.2\n Compiling cocoa-foundation v0.2.1\n Compiling darling_core v0.14.4\n Compiling block2 v0.6.2\n Compiling objc2-core-foundation v0.3.2\n Compiling libloading v0.9.0\n Compiling ctor v1.0.7\n Compiling anstyle v1.0.14\n Compiling metal v0.18.0\n Compiling parking_lot v0.12.5\n Compiling objc2-foundation v0.3.2\n Compiling der v0.7.10\n Compiling darling_macro v0.14.4\n Compiling clap_lex v1.1.0\n Compiling darling v0.14.4\n Compiling yoke v0.8.2\n Compiling crypto-common v0.1.6\n Compiling block-buffer v0.10.4\n Compiling crypto-bigint v0.5.5\n Compiling digest v0.10.7\n Compiling spki v0.7.3\n Compiling hmac v0.12.1\n Compiling signature v2.2.0\n Compiling pkcs8 v0.10.2\n Compiling hkdf v0.12.4\n Compiling sha2 v0.10.9\n Compiling rfc6979 v0.4.0\n Compiling sec1 v0.7.3\n Compiling pkcs1 v0.7.5\n Compiling ed25519 v2.2.3\n Compiling sha1 v0.10.6\n Compiling core-video-sys v0.1.4\n Compiling ciborium-io v0.2.2\n Compiling rtrb v0.3.4\n Compiling livekit v0.7.43\n Compiling clap_builder v4.6.0\n Compiling fluxer_gpu_rebuild v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/gpu-rebuild)\n Compiling elliptic-curve v0.13.8\n Compiling napi-sys v3.2.1\n Compiling napi-derive-backend v5.0.4\n Compiling ecdsa v0.16.9\n Compiling primeorder v0.13.6\n Compiling device-info v0.1.1\n Compiling p384 v0.13.1\n Compiling p256 v0.13.2\n Compiling fluxer_webrtc_sender v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender)\n Compiling itertools v0.13.0\n Compiling libloading v0.8.9\n Compiling same-file v1.0.6\n Compiling nohash-hasher v0.2.0\n Compiling rustc-hash v2.1.2\n Compiling cast v0.3.0\n Compiling walkdir v2.5.0\n Compiling clap v4.6.1\n Compiling prost-types v0.12.6\n Compiling futures-executor v0.3.32\n Compiling fluxer_screen_frame_bus v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/screen-frame-bus)\n Compiling fluxer_desktop_native v0.1.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/rust)\n Compiling futures v0.3.32\n Compiling oorandom v11.1.5\n Compiling anes v0.1.6\n Compiling criterion-plot v0.6.0\n Compiling napi-derive v3.5.6\n Compiling prost-build v0.12.6\n Compiling pbjson-build v0.6.2\n Compiling tokio-util v0.7.18\n Compiling pbjson v0.6.0\n Compiling tokio-stream v0.1.18\n Compiling bmrng v0.5.2\n Compiling tinytemplate v1.2.1\n Compiling livekit-runtime v0.4.0\n Compiling pbjson-types v0.6.0\n Compiling ppv-lite86 v0.2.21\n Compiling ed25519-dalek v2.2.0\n Compiling half v2.7.1\n Compiling rand_chacha v0.9.0\n Compiling rand_chacha v0.3.1\n Compiling rustls-webpki v0.103.13\n Compiling ciborium-ll v0.2.2\n Compiling rand v0.9.4\n Compiling rand v0.8.6\n Compiling ciborium v0.2.2\n Compiling criterion v0.7.0\n Compiling crossbeam-queue v0.3.12\n Compiling rsa v0.9.10\n Compiling mozjpeg v0.10.13\n Compiling jsonwebtoken v10.4.0\n Compiling nokhwa-core v0.1.9\n Compiling from_variants_impl v1.0.2\n Compiling nokhwa-bindings-linux v0.1.4\n Compiling nokhwa-bindings-windows v0.4.6\n Compiling from_variants v1.0.2\n Compiling zerovec v0.11.6\n Compiling zerotrie v0.2.4\n Compiling nokhwa v0.10.11\n Compiling os_info v3.15.0\n Compiling tokio-rustls v0.26.4\n Compiling hyper-rustls v0.27.9\n Compiling livekit-protocol v0.7.8\n Compiling tinystr v0.8.3\n Compiling potential_utf v0.1.5\n Compiling icu_collections v2.2.0\n Compiling icu_locale_core v2.2.0\n Compiling icu_provider v2.2.0\n Compiling icu_properties v2.2.0\n Compiling icu_normalizer v2.2.0\n Compiling idna_adapter v1.2.2\n Compiling idna v1.1.0\n Compiling url v2.5.8\n Compiling tower-http v0.6.11\n Compiling tungstenite v0.29.0\n Compiling reqwest v0.12.28\n Compiling tokio-tungstenite v0.29.0\n Compiling webrtc-sys-build v0.3.18\n Compiling webrtc-sys v0.3.33 (/Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender/vendor/webrtc-sys)\n Compiling livekit-datatrack v0.1.8\n Compiling livekit-api v0.5.0\n Compiling libwebrtc v0.3.35 (/Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender/vendor/libwebrtc)\nwarning: unused import: `enum_dispatch`\n --> vendor/libwebrtc/src/audio_source.rs:15:13\n |\n15 | use crate::{enum_dispatch, imp::audio_source as imp_as};\n | ^^^^^^^^^^^^^\n |\n = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default\n\nwarning: unnecessary `unsafe` block\n --> vendor/libwebrtc/src/native/apm.rs:32:25\n |\n32 | sys_handle: unsafe {\n | ^^^^^^ unnecessary `unsafe` block\n |\n = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default\n\nwarning: hiding a lifetime that's elided elsewhere is confusing\n --> vendor/libwebrtc/src/native/audio_mixer.rs:30:34\n |\n30 | fn get_audio_frame_with_info(&self, target_sample_rate: u32) -> Option;\n | ^^^^^ the lifetime is elided here ^^^^^^^^^^ the same lifetime is hidden here\n |\n = help: the same lifetime is referred to in inconsistent ways, making the signature confusing\n = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default\nhelp: use `'_` for type paths\n |\n30 | fn get_audio_frame_with_info(&self, target_sample_rate: u32) -> Option>;\n | ++++\n\nwarning: `libwebrtc` (lib) generated 3 warnings (run `cargo fix --lib -p libwebrtc` to apply 2 suggestions)\nwarning: struct `DmabufFrameDesc` is never constructed\n --> src/texture_source.rs:14:12\n |\n14 | pub struct DmabufFrameDesc {\n | ^^^^^^^^^^^^^^^\n |\n = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default\n\nwarning: variants `InvalidDimensions`, `UnsupportedFormat`, `InvalidPlanes`, and `SdkNativeTextureUnsupported` are never constructed\n --> src/texture_source.rs:29:5\n |\n27 | pub enum TextureEncodeError {\n | ------------------ variants in this enum\n28 | NoTexture,\n29 | InvalidDimensions,\n | ^^^^^^^^^^^^^^^^^\n30 | UnsupportedFormat,\n | ^^^^^^^^^^^^^^^^^\n31 | InvalidPlanes,\n | ^^^^^^^^^^^^^\n...\n34 | SdkNativeTextureUnsupported,\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n |\n = note: `TextureEncodeError` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis\n\nwarning: function `fourcc` is never used\n --> src/texture_source.rs:75:10\n |\n75 | const fn fourcc(bytes: [u8; 4]) -> u32 {\n | ^^^^^^\n\nwarning: constant `DRM_FORMAT_XRGB8888` is never used\n --> src/texture_source.rs:79:7\n |\n79 | const DRM_FORMAT_XRGB8888: u32 = fourcc(*b\"XR24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ARGB8888` is never used\n --> src/texture_source.rs:80:7\n |\n80 | const DRM_FORMAT_ARGB8888: u32 = fourcc(*b\"AR24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XBGR8888` is never used\n --> src/texture_source.rs:81:7\n |\n81 | const DRM_FORMAT_XBGR8888: u32 = fourcc(*b\"XB24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ABGR8888` is never used\n --> src/texture_source.rs:82:7\n |\n82 | const DRM_FORMAT_ABGR8888: u32 = fourcc(*b\"AB24\");\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XRGB2101010` is never used\n --> src/texture_source.rs:83:7\n |\n83 | const DRM_FORMAT_XRGB2101010: u32 = fourcc(*b\"XR30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ARGB2101010` is never used\n --> src/texture_source.rs:84:7\n |\n84 | const DRM_FORMAT_ARGB2101010: u32 = fourcc(*b\"AR30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_XBGR2101010` is never used\n --> src/texture_source.rs:85:7\n |\n85 | const DRM_FORMAT_XBGR2101010: u32 = fourcc(*b\"XB30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_ABGR2101010` is never used\n --> src/texture_source.rs:86:7\n |\n86 | const DRM_FORMAT_ABGR2101010: u32 = fourcc(*b\"AB30\");\n | ^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `DRM_FORMAT_NV12` is never used\n --> src/texture_source.rs:87:7\n |\n87 | const DRM_FORMAT_NV12: u32 = fourcc(*b\"NV12\");\n | ^^^^^^^^^^^^^^^\n\nwarning: function `drm_format_supported` is never used\n --> src/texture_source.rs:89:8\n |\n89 | pub fn drm_format_supported(drm_format: u32) -> bool {\n | ^^^^^^^^^^^^^^^^^^^^\n\nwarning: constant `MAX_TEXTURE_EDGE` is never used\n --> src/texture_source.rs:104:7\n |\n104 | const MAX_TEXTURE_EDGE: u32 = 8192;\n | ^^^^^^^^^^^^^^^^\n\nwarning: function `validate_dimensions` is never used\n --> src/texture_source.rs:106:4\n |\n106 | fn validate_dimensions(width: u32, height: u32) -> Result<(), TextureEncodeError> {\n | ^^^^^^^^^^^^^^^^^^^\n\nwarning: function `validate_dmabuf_desc` is never used\n --> src/texture_source.rs:131:8\n |\n131 | pub fn validate_dmabuf_desc(desc: &DmabufFrameDesc) -> Result<(), TextureEncodeError> {\n | ^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `sdk_accepts_dmabuf_texture_buffers` is never used\n --> src/texture_source.rs:244:4\n |\n244 | fn sdk_accepts_dmabuf_texture_buffers() -> bool {\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `should_attempt_dmabuf_encode` is never used\n --> src/texture_source.rs:262:8\n |\n262 | pub fn should_attempt_dmabuf_encode(\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `try_publish_dmabuf` is never used\n --> src/texture_source.rs:335:12\n |\n335 | pub fn try_publish_dmabuf(\n | ^^^^^^^^^^^^^^^^^^\n\nwarning: function `publish_native_buffer` is never used\n --> src/texture_source.rs:362:8\n |\n362 | fn publish_native_buffer(source: &NativeVideoSource, buffer: NativeBuffer, timestamp_us: i64) {\n | ^^^^^^^^^^^^^^^^^^^^^\n\nwarning: variants `Bgra` and `Nv12` are never constructed\n --> src/engine.rs:256:5\n |\n255 | enum PendingVideoFrame {\n | ----------------- variants in this enum\n256 | Bgra {\n | ^^^^\n...\n264 | Nv12 {\n | ^^^^\n\nwarning: variant `Failed` is never constructed\n --> src/config.rs:62:5\n |\n57 | pub enum PublisherState {\n | -------------- variant in this enum\n...\n62 | Failed,\n | ^^^^^^\n |\n = note: `PublisherState` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis\n = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default\n\nwarning: static `PREWARMED_LIVEKIT_RUNTIME` is never used\n --> src/engine.rs:102:8\n |\n102 | static PREWARMED_LIVEKIT_RUNTIME: LazyLock>>> =\n | ^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `prewarm_voice_engine` is never used\n --> src/engine.rs:203:8\n |\n203 | pub fn prewarm_voice_engine() -> napi::Result<()> {\n | ^^^^^^^^^^^^^^^^^^^^\n\nwarning: function `prewarm_voice_engine_inner` is never used\n --> src/engine.rs:212:4\n |\n212 | fn prewarm_voice_engine_inner() -> napi::Result<()> {\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nwarning: variant `Nv12` is never constructed\n --> src/engine.rs:264:5\n |\n255 | enum PendingVideoFrame {\n | ----------------- variant in this enum\n...\n264 | Nv12 {\n | ^^^^\n\nwarning: `fluxer_webrtc_sender` (lib test) generated 9 warnings (4 duplicates)\nwarning: `fluxer_webrtc_sender` (lib) generated 21 warnings\n Finished `test` profile [unoptimized + debuginfo] target(s) in 58.51s\n Running unittests src/lib.rs (target/debug/deps/fluxer_webrtc_sender-986568c9de5e7b47)\n Running tests/event_contract.rs (target/debug/deps/event_contract-ed4cabbef0fb9f7c)\n Doc-tests fluxer_webrtc_sender\n" }, { "name": "webrtc-sender-livekit-harness", "command": "pnpm --dir native/webrtc-sender test:livekit", "category": "livekit", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:09:48.093Z", "endedAt": "2026-06-09T04:09:50.341Z", "durationMs": 2248, "stdoutTail": "\n> @fluxer/webrtc-sender@0.0.0 test:livekit /Users/hampus/Development/fluxer/fluxer_desktop/native/webrtc-sender\n> node scripts/livekit-harness.mjs\n\n[livekit-harness] connecting to ws://localhost:7880 room=fluxer-webrtc-harness-39291-5ee61a43-3009-4112-bca3-ae4b4667a371\n[livekit-harness] PASS: 19 checks, inboundAudioFrames=72, inboundVideoFrames=5, videoCallbacks=5, receivedFps=0, producedFps=0, maxVideoFrameGapMs=0, maxAudioFrameGapMs=0, maxObservedPacketLoss=0, maxObservedPacketLossDelta=0, resolutionMismatches=0, droppedVideoFrameCallbacks=0\n", "stderrTail": "" }, { "name": "mac-screen-capture-build", "command": "pnpm --dir native/mac-screen-capture build", "category": "platform-native", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:09:50.341Z", "endedAt": "2026-06-09T04:09:55.416Z", "durationMs": 5075, "stdoutTail": "\n> @fluxer/mac-screen-capture@0.0.0 build /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture\n> cargo run --locked --quiet --manifest-path ../../../tools/ci/Cargo.toml -- build-desktop-native-addon\n\n[buildRustNodeAddon] cwd=/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture\n+ /Users/hampus/.rustup/toolchains/1.93.0-aarch64-apple-darwin/bin/cargo build --release --target aarch64-apple-darwin --manifest-path Cargo.toml\n+ codesign --force --sign - /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture/mac-screen-capture.darwin-arm64.node\n", "stderrTail": " Finished `release` profile [optimized] target(s) in 0.33s\n/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture/mac-screen-capture.darwin-arm64.node: replacing existing signature\n" }, { "name": "mac-screen-capture-tests", "command": "pnpm --dir native/mac-screen-capture test", "category": "platform-native", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:09:55.416Z", "endedAt": "2026-06-09T04:09:59.295Z", "durationMs": 3879, "stdoutTail": "\n> @fluxer/mac-screen-capture@0.0.0 test /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture\n> pnpm test:cargo && node --test index.test.mjs\n\n\n> @fluxer/mac-screen-capture@0.0.0 test:cargo /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture\n> cargo test --manifest-path Cargo.toml\n\n\nrunning 78 tests\ntest audio_pool::tests::append_concatenates_planar_to_interleaved_like_payload ... ok\ntest audio_pool::tests::as_mut_ptr_returns_slot_base_address ... ok\ntest audio_pool::tests::append_rejects_overflow ... ok\ntest audio_pool::tests::acquire_release_cycle_increments_counters ... ok\ntest audio_pool::tests::capacity_one_pool_round_trips ... ok\ntest audio_pool::tests::default_pool_dimensions_match_constants ... ok\ntest audio_pool::tests::drop_returns_slot_to_free_list ... ok\ntest audio_pool::tests::into_external_parts_drop_returns_slot_to_pool ... ok\ntest audio_pool::tests::into_external_parts_exposes_filled_pointer_and_length ... ok\ntest audio_pool::tests::new_rejects_bytes_per_slot_above_max ... ok\ntest audio_pool::tests::new_rejects_zero_bytes_per_slot ... ok\ntest audio_pool::tests::new_rejects_zero_capacity ... ok\ntest audio_pool::tests::into_external_parts_holds_slot_across_send ... ok\ntest audio_pool::tests::pool_exhausts_at_cap_seventeenth_acquire_returns_none ... ok\ntest audio_pool::tests::recycled_slot_persists_buffer_storage_until_overwritten ... ok\ntest audio_pool::tests::stats_in_flight_matches_simultaneous_holders ... ok\ntest audio_pool::tests::write_rejects_payload_larger_than_slot ... ok\ntest audio_pool::tests::write_then_data_slice_matches_payload ... ok\ntest config::tests::audio_sample_format_strings_and_widths ... ok\ntest config::tests::builder_accepts_48khz_stereo_audio ... ok\ntest config::tests::builder_accepts_fps_120 ... ok\ntest config::tests::builder_accepts_hdr_with_displayp3 ... ok\ntest config::tests::builder_captures_audio_toggle_preserves_frame_interval ... ok\ntest config::tests::builder_defaults_produce_valid_config ... ok\ntest config::tests::builder_rejects_audio_channel_count_zero ... ok\ntest config::tests::builder_rejects_fps_above_max ... ok\ntest config::tests::builder_rejects_audio_sample_rate_zero ... ok\ntest config::tests::builder_rejects_fps_zero ... ok\ntest config::tests::builder_rejects_hdr_without_displayp3 ... ok\ntest config::tests::builder_rejects_queue_depth_above_max ... ok\ntest config::tests::builder_rejects_queue_depth_zero ... ok\ntest config::tests::captures_audio_defaults_to_false ... ok\ntest config::tests::default_config_validates ... ok\ntest config::tests::color_space_names_present ... ok\ntest config::tests::failure_reason_strings_non_empty ... ok\ntest config::tests::mac_screen_share_audio_frame_constructs_valid ... ok\ntest config::tests::mac_screen_share_audio_frame_rejects_invalid_sample_rate ... ok\ntest config::tests::mac_screen_share_audio_frame_rejects_too_many_channels ... ok\ntest config::tests::mac_screen_share_audio_frame_with_bytes_rejects_bad_sample_rate ... ok\ntest config::tests::mac_screen_share_audio_frame_with_bytes_round_trip ... ok\ntest config::tests::minimum_frame_interval_120_fps_under_8_3ms ... ok\ntest config::tests::minimum_frame_interval_30_fps_factor_applied ... ok\ntest config::tests::minimum_frame_interval_60_fps_is_15_ms ... ok\ntest config::tests::pixel_format_fourcc_matches_obs_constants ... ok\ntest iosurface_pair::tests::new_pair_is_empty ... ok\ntest iosurface_pair::tests::take_current_on_empty_returns_none ... ok\ntest napi_surface_macos::audio_extract_tests::ablstorage_layout_matches_apple_abl ... ok\ntest napi_surface_macos::audio_extract_tests::ablstorage_size_is_large_enough_for_audio_buffer_list ... ok\ntest napi_surface_macos::audio_extract_tests::extract_audio_bytes_rejects_metadata_sample_buffer_gracefully ... ok\ntest napi_surface_macos::dispatch_queue_tests::audio_frame_payload_into_input_carries_slot_and_metadata ... ok\ntest napi_surface_macos::dispatch_queue_tests::build_capture_config_carries_audio_settings ... ok\ntest napi_surface_macos::dispatch_queue_tests::build_capture_config_preserves_frame_interval_when_audio_enabled ... ok\ntest napi_surface_macos::dispatch_queue_tests::classify_pcm_flags_detects_f32_interleaved_as_f32_planar ... ok\ntest napi_surface_macos::dispatch_queue_tests::classify_pcm_flags_detects_f32_planar ... ok\ntest napi_surface_macos::dispatch_queue_tests::classify_pcm_flags_detects_i16_interleaved ... ok\ntest napi_surface_macos::dispatch_queue_tests::classify_pcm_flags_rejects_unknown ... ok\ntest napi_surface_macos::dispatch_queue_tests::sample_queue_construction_does_not_trap_libdispatch ... ok\ntest napi_surface_macos::external_buffer_tests::allocator_counter_self_test_reports_nonzero_when_allocating ... ok\ntest napi_surface_macos::external_buffer_tests::audio_buffer_external_pointer_round_trip ... ok\ntest audio_pool::tests::multi_thread_acquire_release_stress_8_threads_1000_ops_no_deadlock ... ok\ntest napi_surface_macos::external_buffer_tests::external_buffer_finalize_runs_exactly_once_per_frame ... ok\ntest napi_surface_macos::external_buffer_tests::buffer_external_drop_fn_runs_on_pool_thread_or_napi_thread ... ok\ntest napi_surface_macos::external_buffer_tests::multi_frame_external_buffer_lifecycle ... ok\ntest napi_surface_macos::external_buffer_tests::pool_exhaustion_with_external_buffers_holds_diagnostic ... ok\ntest os_version::tests::classify_macos_11_is_unsupported ... ok\ntest os_version::tests::classify_macos_12_3_is_supported ... ok\ntest os_version::tests::classify_unknown_version_is_unsupported ... ok\ntest os_version::tests::format_version_trims_zero_patch ... ok\ntest os_version::tests::meets_floor_exact_match ... ok\ntest os_version::tests::meets_floor_higher_major ... ok\ntest os_version::tests::rejects_below_floor ... ok\ntest napi_surface_macos::external_buffer_tests::zero_allocation_in_steady_state_acquire_write_external_release ... ok\ntest napi_surface_macos::dispatch_queue_tests::parallel_sample_queue_construction_is_safe ... ok\ntest napi_surface_macos::dispatch_queue_tests::sample_queue_dispatches_blocks_without_crashing ... ok\ntest iosurface_pair::macos_tests::push_increments_use_count_and_take_current_does_not_release ... ok\ntest iosurface_pair::macos_tests::push_rotates_and_drop_releases_both_slots ... ok\ntest iosurface_pair::macos_tests::clear_releases_both_slots ... ok\ntest iosurface_pair::macos_tests::third_push_evicts_oldest_and_releases_it ... ok\n\ntest result: ok. 78 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n▶ mac-screen-capture loader wrapper\n ✔ forwards source id, kind, and dimensions to native binding (1.445ms)\n ✔ defaults sourceKind to screen and frameRate to 30 (0.117166ms)\n ✔ forwards display and window sources from native binding without rewriting ids (0.12875ms)\n ✔ reports ScreenCaptureKit support and permission from native binding (0.612667ms)\n ✔ installs a native frame sink handle once before start (0.174542ms)\n ✔ fails before native start when a native frame sink is required but missing (0.416709ms)\n ✔ emits closed once when native lifecycle closes and stop is called later (0.153417ms)\n ✔ lifecycle error emits Error event (0.120416ms)\n✔ mac-screen-capture loader wrapper (3.986375ms)\nℹ tests 8\nℹ suites 1\nℹ pass 8\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 371.859541\n", "stderrTail": " Compiling fluxer_gpu_rebuild v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/gpu-rebuild)\n Compiling fluxer_screen_frame_bus v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/screen-frame-bus)\n Compiling fluxer_mac_screen_capture v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-screen-capture)\n Finished `test` profile [unoptimized + debuginfo] target(s) in 2.23s\n Running unittests src/lib.rs (target/debug/deps/fluxer_mac_screen_capture-7d8f5a432df33d79)\n Doc-tests fluxer_mac_screen_capture\n" }, { "name": "mac-app-audio-build", "command": "pnpm --dir native/mac-app-audio build", "category": "platform-native", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:09:59.295Z", "endedAt": "2026-06-09T04:10:03.149Z", "durationMs": 3854, "stdoutTail": "\n> @fluxer/mac-app-audio@0.0.0 build /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio\n> cargo run --locked --quiet --manifest-path ../../../tools/ci/Cargo.toml -- build-desktop-native-addon\n\n[buildRustNodeAddon] cwd=/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio\n+ /Users/hampus/.rustup/toolchains/1.93.0-aarch64-apple-darwin/bin/cargo build --release --target aarch64-apple-darwin --manifest-path Cargo.toml\n+ codesign --force --sign - /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio/mac-app-audio.darwin-arm64.node\n", "stderrTail": " Finished `release` profile [optimized] target(s) in 0.27s\n/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio/mac-app-audio.darwin-arm64.node: replacing existing signature\n" }, { "name": "mac-app-audio-rust-tests", "command": "pnpm --dir native/mac-app-audio test:cargo", "category": "platform-native", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:10:03.149Z", "endedAt": "2026-06-09T04:10:05.465Z", "durationMs": 2316, "stdoutTail": "\n> @fluxer/mac-app-audio@0.0.0 test:cargo /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio\n> cargo test --manifest-path Cargo.toml\n\n\nrunning 49 tests\ntest audio_converter::tests::build_input_interleaved ... ok\ntest audio_converter::tests::build_output_mono_44_1k ... ok\ntest audio_converter::tests::build_input_non_interleaved ... ok\ntest audio_converter::tests::build_output_stereo_48k ... ok\ntest audio_converter::tests::converted_frame_count_exact ... ok\ntest audio_converter::tests::handle_float64_input ... ok\ntest audio_converter::tests::duplicate_mono_to_stereo ... ok\ntest audio_converter::tests::input_frame_count_interleaved_and_planar ... ok\ntest audio_converter::tests::interleave_planar_stereo ... ok\ntest audio_converter::tests::linear_resample_to_target_rate ... ok\ntest audio_converter::tests::lpcm_fourcc ... ok\ntest audio_converter::tests::normalize_signed_int16 ... ok\ntest audio_converter::tests::output_frame_capacity_rounds_up ... ok\ntest foundation::tests::nsstring_to_string_handles_none ... ok\ntest foundation::tests::mutable_array_initial_count_is_zero ... ok\ntest foundation::tests::mutable_dictionary_initial_count_is_zero ... ok\ntest os_version::tests::classify_macos_10_15_is_unsupported_and_mentions_min_version ... ok\ntest foundation::tests::nsstring_round_trip ... ok\ntest os_version::tests::classify_macos_12_3_is_sck_only ... ok\ntest os_version::tests::classify_macos_14_2_has_both_backends ... ok\ntest os_version::tests::classify_macos_15_is_supported ... ok\ntest os_version::tests::classify_unknown_version_is_unsupported ... ok\ntest os_version::tests::coreaudio_floor_14_2 ... ok\ntest os_version::tests::format_version_trims_zero_patch ... ok\ntest os_version::tests::meets_floor_exact_match ... ok\ntest os_version::tests::meets_floor_higher_major ... ok\ntest os_version::tests::meets_floor_higher_minor ... ok\ntest os_version::tests::rejects_below_floor_major ... ok\ntest os_version::tests::rejects_below_floor_minor ... ok\ntest os_version::tests::rejects_macos_10_15_for_sck ... ok\ntest process_tree::tests::collect_related_returns_tree ... ok\ntest process_tree::tests::same_launch_tree_excludes_unrelated ... ok\ntest process_tree::tests::same_launch_tree_includes_direct_child ... ok\ntest process_tree::tests::same_launch_tree_includes_pgrp_peer ... ok\ntest related_app::tests::helper_bundle_strips_suffix ... ok\ntest related_app::tests::helper_name_strips_helper_suffix ... ok\ntest related_app::tests::related_by_dot_prefix ... ok\ntest related_app::tests::related_via_bundle_helper_base ... ok\ntest related_app::tests::related_via_name_helper_base ... ok\ntest related_app::tests::unrelated_returns_false ... ok\ntest sck::tests::cgrect_intersection_handles_negative_and_disjoint ... ok\ntest source_state::tests::double_start_rejected ... ok\ntest source_state::tests::happy_path ... ok\ntest source_state::tests::cancel_idle_short_circuits ... ok\ntest source_state::tests::is_allowed_exhaustive ... ok\ntest source_state::tests::mark_fatal_forces_stopped ... ok\ntest source_state::tests::mark_fatal_idempotent ... ok\ntest source_state::tests::start_while_stopping_rejected ... ok\ntest source_state::tests::stop_before_start_rejected ... ok\n\ntest result: ok. 49 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n", "stderrTail": " Compiling fluxer_mac_app_audio v0.0.0 (/Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio)\n Finished `test` profile [unoptimized + debuginfo] target(s) in 1.54s\n Running unittests src/lib.rs (target/debug/deps/fluxer_mac_app_audio-b86bec7aea37ec64)\n Doc-tests fluxer_mac_app_audio\n" }, { "name": "mac-app-audio-js-tests", "command": "'/Users/hampus/Development/fluxer/node_modules/.pnpm/node_modules/.bin/vitest' run", "category": "platform-native", "status": "pass", "code": 0, "signal": null, "startedAt": "2026-06-09T04:10:05.465Z", "endedAt": "2026-06-09T04:10:06.715Z", "durationMs": 1250, "stdoutTail": "\n RUN v4.0.18 /Users/hampus/Development/fluxer/fluxer_desktop/native/mac-app-audio\n\n ✓ index.test.mjs (6 tests) 2ms\n\n Test Files 1 passed (1)\n Tests 6 passed (6)\n Start at 06:10:06\n Duration 489ms (transform 29ms, setup 0ms, import 298ms, tests 2ms, environment 0ms)\n\n", "stderrTail": "" } ] }