Consume oxvif 0.12.0 + health-check features (0.1.5)#1
Merged
Conversation
Consume oxvif 0.12.0's reshaped HealthReport (via a temporary `path = "../oxvif"` dep on this branch — flips to the registry `0.12.0` once oxvif is published): - profiles: tuple `.0`/`.1` reads -> `.verdict` / `.missing` (ProfileState). - Handle the new `Inconclusive` verdict everywhere: verdict_class/label/str, the VerdictTally (new `inconclusive` count), and — the point of the change — reconcile_profiles now maps a declared-but-inconclusive profile to `Unverified` (couldn't verify) instead of `Broken`, consuming oxvif's authoritative signal rather than guessing from connectivity. - `CheckResult::elapsed` is now `Option` -> `unwrap_or_default().as_millis()`. - Bundle schema v3.1 -> v4 (embedded report shape changed). - New i18n key `health_inconclusive` (en/zh_tw/ru). Baselines: existing read_baseline already returns None on a shape mismatch (logs "stale baseline ignored"), so pre-0.12 baselines degrade gracefully to "no baseline" rather than a garbage diff. fmt/clippy/build/test (100, incl. i18n parity + healthtab_smoke vs local 0.12) green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ring re-parse Phase C of the health-check consolidation. oxvif 0.12 now runs the RTSP / snapshot / real-Profile-G liveness probes itself (with_liveness_probes), so oxdm stops re-firing its own probes and reads the results straight from the report. - api::run_health_check enables with_liveness_probes(true). - run_one no longer fires api::search_recordings / get_replay_uri / probe_rtsp_options / fetch_snapshot_data_uri for the probes; new profile_g_probe / profile_s_probe build ProfileGProbe / ProfileSProbe from report.checks (search / replay / get_stream_uri / get_snapshot_uri). - Probe faults now arrive as structured oxvif::health::CheckError (with the ONVIF subcode preserved for cross-brand grouping) and map to ExportError via the new export_error(); the fragile string-parsing classify() is deleted, as is the now-orphaned b64_bytes helper and api::probe_rtsp_options. - Liveness-level failures (RTSP unreachable / snapshot not an image) are oxvif Warns, wrapped as transport-class errors by probe_warn_error. - fingerprint_error is sourced from the report's get_device_info check. - Export schema bumped oxdm-health-batch/v4 -> v5. Probe struct shapes are unchanged, so the batch UI needs no changes. OXVIF_VERSION -> 0.12.0. Known limitation: oxvif's snapshot fetch uses diqwest and lacks oxdm's Hikvision/Uniview digest patches, so snapshot liveness may false-Warn on those brands (a cosmetic Warn — Profile S verdict is unaffected). Tests: classify()/b64_bytes unit tests replaced with export_error / probe-detail-parsing tests; full suite green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Expose oxvif's with_force_unsupported in the batch runner as an opt-in checkbox (default off), next to Redact. When on, run_one passes it through api::run_health_check → HealthCheck::with_force_unsupported, so a device that under-declares a service (Media2 / recording / search / replay) gets it force-probed at conventional URLs and flagged under-declared instead of counted as unsupported. The per-device HealthTab keeps force off (quick single-device check). New i18n keys hbatch_force / hbatch_force_hint across en / zh_tw / ru. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a second export button that writes a JUnit XML document over the whole run: one <testsuite> per device (via oxvif's HealthReport::to_junit_testsuite), timed-out devices as a minimal errored suite. Honours the Redact toggle — suite names use the device pseudonym and redact_ipv4 scrubs the XML. Factors the export result-collection into collect_done(), shared by both exporters. New i18n keys hbatch_export_junit / _hint across en / zh_tw / ru. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
oxvif 0.12.0 is now published, so drop the `path = "../oxvif"` dev dep from both the dependency and dev-dependency lines and pin the registry version. Cargo.lock now resolves oxvif from crates.io with a checksum, so the branch builds on CI (which has no ../oxvif). Update the CLAUDE.md oxvif-version note to match. Gate: cargo build / clippy -D warnings / test all clean against the published crate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump oxdm to 0.1.5 and add user-facing docs for the health-check work that landed with the oxvif 0.12 upgrade: - README Diagnostics bullet now covers active liveness verification (RTSP / snapshot-image / Profile G), the security probe, the force-verify-undeclared toggle, and JUnit XML export. - New top-level CHANGELOG.md, tracking from 0.1.5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Consume the published oxvif 0.12.0 and ship the health-check work built on
top of it. This branch also re-pins oxvif off the local path dep to the registry
crate, so it resolves on CI (a clean runner has no
../oxvif).Changes
oxvif = "0.12.0"from crates.io on both the dependency anddev-dependency lines (dropped
path = "../oxvif");Cargo.locknow carries aregistry checksum.
failure; the fragile client-side result re-parsing was removed.
snapshot as a real image, and exercises Profile G recording search / replay.
JSON bundle).
0.1.5.CHANGELOG.md.Verification
Local gate against the published crate, all green:
cargo buildcargo clippy --all-targets -- -D warningscargo test(79 + 1 + 10 + 10 pass)cargo fmt(no code changes)This PR exists mainly to let CI validate the registry re-pin on a clean runner
before it lands on
main.🤖 Generated with Claude Code