From ce37edc9ab337350f7dd6a3a0ec92f873d0a7d02 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Tue, 12 May 2026 01:12:14 -0300 Subject: [PATCH] install: keep hevc smoke diagnostic on pi --- Cargo.lock | 6 +++--- client/Cargo.toml | 2 +- common/Cargo.toml | 2 +- docs/operational-env.md | 2 +- scripts/install/server.sh | 11 ++++------- server/Cargo.toml | 2 +- .../scripts/install/server_install_script_contract.rs | 7 +++++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb51c12..f428834 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1652,7 +1652,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lesavka_client" -version = "0.22.6" +version = "0.22.7" dependencies = [ "anyhow", "async-stream", @@ -1686,7 +1686,7 @@ dependencies = [ [[package]] name = "lesavka_common" -version = "0.22.6" +version = "0.22.7" dependencies = [ "anyhow", "base64", @@ -1698,7 +1698,7 @@ dependencies = [ [[package]] name = "lesavka_server" -version = "0.22.6" +version = "0.22.7" dependencies = [ "anyhow", "base64", diff --git a/client/Cargo.toml b/client/Cargo.toml index 105345c..e7994b2 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -4,7 +4,7 @@ path = "src/main.rs" [package] name = "lesavka_client" -version = "0.22.6" +version = "0.22.7" edition = "2024" [dependencies] diff --git a/common/Cargo.toml b/common/Cargo.toml index 772df5f..f8a4624 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lesavka_common" -version = "0.22.6" +version = "0.22.7" edition = "2024" build = "build.rs" diff --git a/docs/operational-env.md b/docs/operational-env.md index b70441b..ffe9160 100644 --- a/docs/operational-env.md +++ b/docs/operational-env.md @@ -413,7 +413,7 @@ These entries are intentionally concise because most are manual lab or CI harnes | `LESAVKA_HEVC_REENTRY_SYNC` | manual HEVC re-entry helper toggle; when `1`, rsyncs the local workspace to Theia before optional build/deploy | | `LESAVKA_HEVC_REENTRY_WAIT_INTERVAL_SECONDS` | manual HEVC re-entry helper retry interval while waiting for SSH after a lab host outage, defaults to `15` | | `LESAVKA_HEVC_REENTRY_WAIT_SECONDS` | manual HEVC re-entry helper reachability wait budget; when greater than `0`, polls SSH before status/build/deploy/reconfigure instead of failing immediately | -| `LESAVKA_INSTALL_CAM_CODEC` | server installer camera ingress codec default; persists `LESAVKA_CAM_CODEC` for installed services, defaults to `hevc`; HEVC installs run a real 1280x720 hardware decode smoke and fail before service changes when the decoder is exposed but unusable | +| `LESAVKA_INSTALL_CAM_CODEC` | server installer camera ingress codec default; persists `LESAVKA_CAM_CODEC` for installed services, defaults to `hevc`; HEVC installs probe the hardware decoder and warn with a smoke log when the synthetic probe fails, while runtime still refuses software video fallback in production | | `LESAVKA_INSTALL_SOURCE` | install script source selector; use `ref` to fetch the requested git ref instead of building the existing local checkout | | `LESAVKA_INSTALL_UVC_FRAME_META` | server installer diagnostic toggle; persists `LESAVKA_UVC_FRAME_META`, defaults to `0` so spool metadata is opt-in | | `LESAVKA_INSTALL_UVC_FRAME_META_LOG_PATH` | server installer diagnostic path; persists `LESAVKA_UVC_FRAME_META_LOG_PATH`, defaults to `/tmp/lesavka-uvc-frame-meta.jsonl` for optional client-to-RCT spool-boundary fetches | diff --git a/scripts/install/server.sh b/scripts/install/server.sh index 6633e7a..795fe03 100755 --- a/scripts/install/server.sh +++ b/scripts/install/server.sh @@ -207,15 +207,12 @@ ensure_hevc_decode_support() { >"$hevc_smoke_log" 2>&1; then echo "✅ hardware HEVC decoder passed a real 1280x720 decode smoke: $hevc_decoder" else - echo "❌ hardware HEVC decoder is exposed but failed a real 1280x720 decode smoke: $hevc_decoder" >&2 + echo "⚠️ hardware HEVC decoder is exposed but the synthetic 1280x720 decode smoke failed: $hevc_decoder" >&2 echo " smoke log: $hevc_smoke_log" >&2 sed -n '1,120p' "$hevc_smoke_log" >&2 || true - if [[ "$INSTALL_UVC_CODEC" == "hevc" || "$INSTALL_CAM_CODEC" == "hevc" ]]; then - echo " Refusing HEVC install because production video decode must be hardware-accelerated and proven." >&2 - echo " Use LESAVKA_INSTALL_CAM_CODEC=mjpeg and LESAVKA_INSTALL_UVC_CODEC=mjpeg for a non-HEVC install while the decoder stack is repaired." >&2 - exit 1 - fi - echo "⚠️ continuing because this install is not selecting HEVC camera/UVC mode." >&2 + echo " Continuing because gst-launch synthetic streams can be a false negative on the Pi stateless decoder." >&2 + echo " Runtime still requires a buildable hardware HEVC decoder and will not use software fallback in production." >&2 + echo " Use scripts/manual/run_hardware_media_smoke.sh for artifact-backed follow-up evidence." >&2 fi fi diff --git a/server/Cargo.toml b/server/Cargo.toml index f76a0b9..681cac2 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -10,7 +10,7 @@ bench = false [package] name = "lesavka_server" -version = "0.22.6" +version = "0.22.7" edition = "2024" autobins = false diff --git a/tests/installer/scripts/install/server_install_script_contract.rs b/tests/installer/scripts/install/server_install_script_contract.rs index a1e1994..0a609b4 100644 --- a/tests/installer/scripts/install/server_install_script_contract.rs +++ b/tests/installer/scripts/install/server_install_script_contract.rs @@ -181,8 +181,11 @@ fn server_install_pins_hdmi_camera_and_display_defaults() { "install script should prove HEVC hardware decode with a real frame smoke, not only gst-inspect" ); assert!( - SERVER_INSTALL.contains("Refusing HEVC install because production video decode must be hardware-accelerated and proven"), - "install script should refuse HEVC installs when the hardware decoder is exposed but unusable" + SERVER_INSTALL.contains("synthetic 1280x720 decode smoke failed") + && SERVER_INSTALL.contains("false negative on the Pi stateless decoder") + && SERVER_INSTALL.contains("Runtime still requires a buildable hardware HEVC decoder") + && SERVER_INSTALL.contains("scripts/manual/run_hardware_media_smoke.sh"), + "install script should keep HEVC smoke failures diagnostic instead of blocking known-good Pi runtime paths" ); assert!( !SERVER_INSTALL