Release v0.1.1 - #2
Merged
Merged
Conversation
Repos + Pages are live, so point the README "User guide" link directly at the rendered mdBook (navistau.github.io/<crate>/) instead of the "...once the repo is public" placeholder. Add git-repository-url to book.toml so the published book links back to the repo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Documentation-only release: README user-guide links now point at the live GitHub Pages mdBook; book gains a repository link. First release via crates.io Trusted Publishing (validates the automated release pipeline). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- rustdoc: qualify intra-doc links in RotatingNonceCache (crate::SoapService, crate::validate_username_token) so `cargo doc` passes under -D warnings. - docs: remove ALL hardcoded version/MSRV literals from install docs — install uses `cargo add`; crate version + MSRV shown via auto-updating crates.io badges. Nothing to grep/bump per release. (MSRV docs had wrongly said 1.88.0; actual rust-version is 1.85.1.) User-guide links point at the live mdBook. - ci: deny rustdoc warnings in docs.yml; clippy --all-features in ci.yml; align CONTRIBUTING to the actual gates. - crossref README: distinguish harness/Docker Rust 1.88 from crate MSRV 1.85.1. - onvif Cargo.toml: clarify the soap-server caret dep + version-agnostic order. - changelog: restore the [0.1.1] header. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The field and accessor rustdoc claimed the discovery UUID, when unset, is a stable UUID-v5 derived from the advertised host. The code uses Uuid::new_v4() (random, generated once at builder creation). Rewrite the docs to state the actual behaviour: random v4, fixed for the process lifetime (stable across discovery cycles, NOT across restarts) unless a fixed UUID is supplied via discovery_uuid(). README already correct. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DESIGN.md was a pre-implementation planning note (onvif-rs/yaserde deps, typed per-operation trait signatures, a .device_info(...) builder) that never matched the shipped crate's handler-trait-over-soap-server API. Rename to docs/historical-design.md and prepend a warning banner pointing readers at README, the mdBook, and docs.rs. Not in the published crate; was misleading in the public repo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The README/intro "Supported" table marked all five services Supported with no nuance — an API teaser. Add a per-operation coverage matrix classifying every routed operation as framework / trait (default-ok or override) / static / absent, with its default behaviour, derived by auditing the service handlers. Add a crate-level Capabilities & Limitations page. Point the README and introduction tables at both, clarifying "Supported" = the Profile S streaming core, not every operation. Key honesty fixes surfaced by the audit: no real event delivery (PullMessages returns empty), Media1 only, static video/encoder/PTZ-node responses, discovery scopes hardcoded and independent of get_scopes, only Set* op is PTZ SetPreset. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The quickstart used `impl DeviceService for MyCamera {}`, which builds but
faults on the first real request (GetDeviceInformation/GetStreamUri have no
working default). Add examples/minimal_device.rs — the smallest device a
client can actually enumerate and stream from — and use it as the quickstart
in the README, book, and crate rustdoc. Add a no-credentials curl smoke test
(GetSystemDateAndTime is auth-exempt). Verified: `cargo run --example
minimal_device` builds; lib.rs doctest compiles.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… #7) services.md was ~40 lines of service names. Rewrite it as a how-to-implement guide: per service, which trait methods to override, their defaults, return types, and the real gotchas surfaced by the source audit (scopes vs discovery scopes, advertised_host vs stream URI, PTZ -1..1 coord space + malformed-coord safety, white-balance MANUAL emission, events being subscribable-but-silent). ws-security.md: add the ONVIF clock-sync handshake (unauthenticated GetSystemDateAndTime -> digest-authed calls), a concrete UsernameToken header example, the real auth-failure fault, and a cross-link to soap-server for the digest/replay mechanics. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
discovery.md: correct the EndpointReference UUID section (it claimed stability across restarts while also saying random-per-build) to match code — random v4, stable within a run, not across restarts unless set. Add a deployment-hazards section: advertised_host must be client-routable, UDP 3702 firewalls, multicast not crossing VLANs/subnets, multi-NIC ambiguity, discovery being optional. clients.md (new): per-client setup for Frigate, Home Assistant, ONVIF Device Manager, python-onvif-zeep, and VLC/RTSP — URL, auth, which ops each calls, and crate-specific caveats (notably: HA event entities won't fire because there is no event delivery; PTZ needs a PTZService impl). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Surface the crossref differential-conformance harness publicly: 29 scenarios, Layer-1 in-process replay + Layer-2 Docker schema oracle (Xerces) and onvif-srvd reference, wired as a release-green gate (29/29 verified). State plainly what a pass means (schema-valid + reference-agreeing for covered ops) and does not (not full Profile S certification). Link the harness README. Resolves the forward-link from capabilities.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0.1.1 now carries the full docs maturation (operation coverage matrix, capabilities, conformance, client guides, usable quickstart, implementable service pages, WS-Security clock-sync) plus the discovery UUID doc fix. Expand the [0.1.1] entry accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…, headline) - minimal_device example: banner/comment said admin/admin while auth is admin/password — fixed to admin/password (matches README/book/rustdoc). (R2-1) - WS-Discovery: coverage.md + capabilities.md claimed the server sends Hello on start; discovery.rs only answers Probe with ProbeMatches. Corrected both. (R2-2) - capabilities.md: advertised_host described as setting stream URIs; it sets XAddrs only — stream/snapshot URIs come from MediaService. Reworded. (R2-3) - Softened "spec-compliant / fully functional / any standard ONVIF client" in README, introduction, and lib.rs to "Profile S streaming-core", letting the coverage matrix carry the exact claims. (R2-4) Verified: fmt, workspace rustdoc -D warnings, examples build, lib doctest, mdbook. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Cargo.toml description dropped "spec-compliant" and reframed to "Profile S streaming-core", matching the README/book/coverage positioning (this is the crates.io search/card text). (R3-3) - server.rs discovery_uuid rustdoc said "Hello/ProbeMatch"; the server does not send unsolicited Hello — reworded to ProbeMatch only so docs.rs matches the book. (R3-4) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The published crate bundles wsdl/** — verbatim official ONVIF spec docs under the ONVIF license, not MIT/Apache. The SPDX license field describes the whole package, so "MIT OR Apache-2.0" alone was misleading. Change to the composite SPDX expression "(MIT OR Apache-2.0) AND LicenseRef-ONVIF": crate code stays MIT-or-Apache, the bundled WSDLs add ONVIF terms (LICENSE-ONVIF, already shipped + documented in the README). Verified cargo parses the expression with no warning. 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.
Release onvif-server 0.1.1 — a documentation + release-tooling release; no runtime behavior changes. (soap-server 0.1.1 is already live on crates.io.)
Merging this PR fires
release.yml: tagv0.1.1, GitHub release, and publish to crates.io via Trusted Publishing.Highlights (see CHANGELOG [0.1.1])
Documentation
MyCamerawith a minimal usable device (examples/minimal_device.rs) + no-credentials curl smoke test.docs/DESIGN.md→docs/historical-design.md+ banner.Metadata
(MIT OR Apache-2.0) AND LicenseRef-ONVIF— the bundledwsdl/**are official ONVIF spec docs under the ONVIF license (LICENSE-ONVIF shipped).Gates (local, green)
fmt · clippy
--all-targets --all-features -D warnings·RUSTDOCFLAGS=-D warnings cargo doc --workspace·cargo test --workspace --all-features· mdbook build · examples build.