# step: stream audit · wai-rs and stream_audit_verify.py # order: 430 # features: stream_audit # paths: wai/extensions/stream-audit.md # independent: stream-audit live python3 -I live-conformance/stream_audit_verify.py live-conformance/audit # # wai.delivery.audit (extensions/stream-audit.md): the reference module's unit tests (the # acknowledgement windows, chains and repeats of §4.2, the origin rule, the report's bytes, # channel names) and tests/stream_audit.rs (vectors.json regenerates byte for byte from its # fixed seeds and no other file is there, wai-rs gives every session and report its stated # outcome, §14 lists exactly the reference's codes, each of which the corpus gives, beside # every code it borrows); and, in the step of every independent verifier above, the corpus's # second implementation, stream_audit_verify.py, # written from the extension's text and sharing no code with wai-rs, which reads # acknowledgements with settlement_verify.py, claims with ad_presentation_verify.py and logs # and energy classes with live_metering_verify.py, checks every signature with WAI's strict # Ed25519 rule, recomputes every report, requires every mutated copy of the corpus to fail, # and drops each of its own checks in turn and requires the corpus to catch the weakened # verifier; standard library only, run isolated (-I). The collector and the player # integration run in wai-audit.yml. # # The paths this step brings to the workflow's trigger, and why: # wai/extensions/stream-audit.md: tests/stream_audit.rs requires this extension's §14 to list the # codes the reference reports, stream_audit_verify.py reads that table, and the registry's wire # identifiers test reads its sections. set -euo pipefail (cd wai-rs && cargo test --no-default-features --features "$WAI_FEATURES" --lib stream_audit::) (cd wai-rs && cargo test --no-default-features --features "$WAI_FEATURES" --test stream_audit)