Skip to content

Consume oxvif 0.12.0 + health-check features (0.1.5)#1

Merged
smiti1642 merged 6 commits into
mainfrom
feat/oxvif-0.12
Jul 9, 2026
Merged

Consume oxvif 0.12.0 + health-check features (0.1.5)#1
smiti1642 merged 6 commits into
mainfrom
feat/oxvif-0.12

Conversation

@smiti1642

Copy link
Copy Markdown
Owner

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

  • deps: pin oxvif = "0.12.0" from crates.io on both the dependency and
    dev-dependency lines (dropped path = "../oxvif"); Cargo.lock now carries a
    registry checksum.
  • health check now consumes oxvif's reshaped report directly:
    • "couldn't verify" (auth-blocked) is no longer counted as a conformance
      failure; the fragile client-side result re-parsing was removed.
    • active liveness verification — opens the RTSP stream, fetches + validates the
      snapshot as a real image, and exercises Profile G recording search / replay.
    • security probe — flags a camera that serves data without authentication.
    • "Force-verify undeclared services" toggle in the batch view.
    • "Export JUnit" button in the batch view (JUnit XML alongside the rich
      JSON bundle).
  • release: bump oxdm to 0.1.5.
  • docs: README Diagnostics section updated; new top-level CHANGELOG.md.

Verification

Local gate against the published crate, all green:

  • cargo build
  • cargo clippy --all-targets -- -D warnings
  • cargo 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

smiti1642 and others added 6 commits July 3, 2026 12:14
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>
@smiti1642
smiti1642 merged commit 63fdb96 into main Jul 9, 2026
1 check passed
@smiti1642
smiti1642 deleted the feat/oxvif-0.12 branch July 9, 2026 09:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant