L5 hardening: receipt chains, receipts in WAI's binary form, room track names, proof of possession of a grant's key (stacked on #324) #327
Closed
dcharlot
wants to merge 0 commits from
joule-moq/harden into main
pull from: joule-moq/harden
merge into: Transaction-Science:main
Transaction-Science:main
Transaction-Science:wai/quantum-parse-depth
Transaction-Science:wai/quantum-cli-energy-estimate
Transaction-Science:wai/quantum-planner-contract
Transaction-Science:wai/quantum-landscape-capacity
Transaction-Science:wai/quantum-wasmq
Transaction-Science:wai/quantum-synth-rz-reference
Transaction-Science:wai/quantum-estimate-reaction-clock
Transaction-Science:wai/quantum-landscape-fpga
Transaction-Science:wai/quantum-reader-scaling
Transaction-Science:jouleclaw/north-decode-speed
Transaction-Science:wai/quantum-landscape-gpu
Transaction-Science:wai/quantum-cross-simulator-corpus
Transaction-Science:wai/quantum-writer
Transaction-Science:wai/quantum-check-exercise
Transaction-Science:wai/quantum-landscape-emulator
Transaction-Science:ci/quantum-archive-mtime
Transaction-Science:ci/gate-pool
Transaction-Science:wai/quantum-published-architecture-check
Transaction-Science:wai/quantum-receipt-fields
Transaction-Science:wai/quantum-cloud-tasks
Transaction-Science:ci/quantum-emulator-in-job
Transaction-Science:wai/quantum-service-write
Transaction-Science:fix/fake-stack-reverse-lookup
Transaction-Science:ci/energy-hardware-fetch-by-sha
Transaction-Science:wai/quantum-namespace
Transaction-Science:wai/conform-output
Transaction-Science:wai/neural-corpus-licence
Transaction-Science:wai/compact-return-profile
Transaction-Science:wai/det-module-profile
Transaction-Science:wai/carousel-monotone-inband
Transaction-Science:wai/toolchain-keys
Transaction-Science:fix/fake-stack-no-reverse-lookup
Transaction-Science:fix/origin-503-reset
Transaction-Science:wai/timeliness-ladder-scheduler
Transaction-Science:wai/marks
Transaction-Science:test/relay-loop-port-race
Transaction-Science:sandbox/proof-tee-msr
Transaction-Science:meters/clippy-clean
Transaction-Science:wai/det-module-checkers
Transaction-Science:ci/neural-pin-and-windows-byte-equality
Transaction-Science:mesh-meter/smc
Transaction-Science:wai/ad-consent-supply-chain
Transaction-Science:wai/toolchain-fixes
Transaction-Science:wai/hls-cues-delivery-decision
Transaction-Science:wai/prior-carriage-spec
Transaction-Science:wai/det-source-fixes
Transaction-Science:wai/one-way-delivery
Transaction-Science:chore/shared-append-points-files
Transaction-Science:mesh-meter/min-window
Transaction-Science:jcp-energy/rapl-msr
Transaction-Science:jouleclaw-energy/rapl-msr
Transaction-Science:mesh/ingest-reconcile-2
Transaction-Science:eoc-meter/rapl-msr
Transaction-Science:proof-cascade/rapl-msr
Transaction-Science:sandbox-meter/rapl-msr
Transaction-Science:jouleclaw-energy/smc-consumers
Transaction-Science:wai/quantum-llms-names
Transaction-Science:jouleclaw-energy/smc-system
Transaction-Science:wai/quantum-contract-baselines-0.8.1
Transaction-Science:wai/wave-a
Transaction-Science:wai/co-floor-schedule-change
Transaction-Science:wai/quantum-release-0.8.1
Transaction-Science:mesh/ingest-reconcile
Transaction-Science:wai/quantum-service-tasks
Transaction-Science:wai/quantum-service-rerun
Transaction-Science:mesh/decision-training-provenance
Transaction-Science:test/timing-under-load
Transaction-Science:wai/inspect-carousel-holdings-b
Transaction-Science:wai/quantum-optimize-resume-2
Transaction-Science:chore/rust-latest-stable
Transaction-Science:energy-compare/prereg
Transaction-Science:test/relay-door-race
Transaction-Science:wai/quantum-cli-provider-tasks
Transaction-Science:wai/quantum-service-idempotency-2
Transaction-Science:wai/contribution-link-magic
Transaction-Science:wai/inspect-carousel-holdings
Transaction-Science:wai/carousel-schedule
Transaction-Science:ci/gates-off-arm64-r2
Transaction-Science:ci/proof-shards-to-96
Transaction-Science:ci/drop-msrv-floor
Transaction-Science:ci/proof-gate-sigpipe
Transaction-Science:wai/quantum-studio-service-retry
Transaction-Science:wai/holdings
Transaction-Science:wai/media-inspect
Transaction-Science:ci/gates-off-arm64
Transaction-Science:wai/quantum-optimize-resume
Transaction-Science:wai/quantum-service-idempotency
Transaction-Science:wai/quantum-desktop-0.1.2
Transaction-Science:chore/rust-1.99.1-now
Transaction-Science:wai/tariff-v6-b
Transaction-Science:wai/quantum-provider-jobs-2
Transaction-Science:jcp/replay-class
Transaction-Science:wai/quantum-provider-jobs
Transaction-Science:relay/fanout-shards
Transaction-Science:wai/avs3-probe-panic
Transaction-Science:sense/injected-observation
Transaction-Science:room/draw-on-new-frame
Transaction-Science:sandbox/transcript-continuation
Transaction-Science:relay/fanout-load
Transaction-Science:wai/quantum-desktop-0.1.1-b
Transaction-Science:chore/rust-1.99.1-on-main
Transaction-Science:wai/upscale-tonemap-door
Transaction-Science:wai/tariff-v6
Transaction-Science:wai/quantum-desktop-0.1.1
Transaction-Science:wai/third-party-hop
Transaction-Science:chore/rust-1.99.1-current
Transaction-Science:sec/zip-extract-abort
Transaction-Science:wai/quantum-desktop-read-only-volume
Transaction-Science:joulespec/applied
Transaction-Science:wai/quantum-desktop-update-key
Transaction-Science:wai/quantum-contract-baselines-0.8.0
Transaction-Science:joulespec/e4-bridge
Transaction-Science:wai/route-outputs
Transaction-Science:wai/quantum-release-0.8.0
Transaction-Science:joulespec/self-conformance
Transaction-Science:sec/crypto-bigint-unyanked
Transaction-Science:joulespec/research-pass
Transaction-Science:joulespec/standard-v0.1
Transaction-Science:wai/quantum-registration
Transaction-Science:wai/quantum-gpu-resident
Transaction-Science:wai/quantum-scale-out
Transaction-Science:wai/ledger-physics
Transaction-Science:wai/quantum-variational
Transaction-Science:wai/quantum-interchange
Transaction-Science:wai/route-physics
Transaction-Science:wai/ledger-work-priced
Transaction-Science:ci/arm64-no-debuginfo
Transaction-Science:wai/quantum-pulse
Transaction-Science:wai/quantum-desktop-release
Transaction-Science:test/srt-burst-mid-stream
Transaction-Science:sec/wasmtime-49.0.5
Transaction-Science:wai/routed-jobs-ledger
Transaction-Science:wai/routed-jobs
Transaction-Science:wai/fast-channel-guide
Transaction-Science:ci/quantum-set-path-skip-linux
Transaction-Science:scripts/public-text-checks-cover-oer
Transaction-Science:wai/fast-statement-check
Transaction-Science:proof/ioreport-same-subscription
Transaction-Science:wai/fast-revenue-share
Transaction-Science:wai/relay-ws-close-drain-2
Transaction-Science:wai/quantum-members-on-the-studio
Transaction-Science:ci/macos-x86_64-on-intel
Transaction-Science:wai/relay-ws-close-drain
Transaction-Science:wai/quantum-py-on-index
Transaction-Science:wai/quantum-npm-package
Transaction-Science:wai/flake-fixes-relay-energy
Transaction-Science:wai/installer-version-test
Transaction-Science:wai/quantum-cli-0.2.2
Transaction-Science:hotfix/room-empty-on-91cfa9d0
Transaction-Science:room/viewer-of-an-empty-room
Transaction-Science:wai/quantum-mcp-registry
Transaction-Science:wai/install-0.4.0
Transaction-Science:wai/quantum-baselines-0.7.0
Transaction-Science:wai/release-0.4.0
Transaction-Science:wai/quantum-wave5b
Transaction-Science:wai/ops-catalogue
Transaction-Science:wai/quantum-wave5
Transaction-Science:wai/studio-web
Transaction-Science:wai/breaking-conform
Transaction-Science:wai/quantum-ecosystem
Transaction-Science:wai/quantum-qsynth
Transaction-Science:wai/quantum-qasm3
Transaction-Science:wai/quantum-qlsp
Transaction-Science:wai/quantum-qbyoq
Transaction-Science:wai/fleet
Transaction-Science:wai/quantum-qpy
Transaction-Science:wai/quantum-qdoor
Transaction-Science:wai/relay-ws-ping
Transaction-Science:wai/dvr-windows-positional
Transaction-Science:wai/quantum-study-2
Transaction-Science:fix/srt-tests-first-send-losses
Transaction-Science:wai/quantum-study
Transaction-Science:wai/create-2
Transaction-Science:wai/dx-agent-mcp-2
Transaction-Science:wai/dx-a-examples-2
Transaction-Science:fix/srt-close-after-drain
Transaction-Science:wai/dx-a-examples
Transaction-Science:wai/create
Transaction-Science:train/wai-e
Transaction-Science:wai/dx-agent-mcp
Transaction-Science:wai/quantum-converge
Transaction-Science:wai/quantum-taste-r2
Transaction-Science:wai/sdk-native-apple
Transaction-Science:wai/quantum-taste
Transaction-Science:wai/quantum-novelty
Transaction-Science:wai/quantum-locks-r2
Transaction-Science:wai/messaging-calls
Transaction-Science:sec/zstd-avx2-2026-10-26
Transaction-Science:sec/zstd-2026-10-26
Transaction-Science:wai/remote-input-seal
Transaction-Science:wai/quantum-locks
Transaction-Science:wai/room-remote
Transaction-Science:wai/sdk-native-android
Transaction-Science:sec/allow-reasons-verified
Transaction-Science:wai/quantum-studio-origin-words
Transaction-Science:ci/compile-once
Transaction-Science:wai/ingest-srt-rist
Transaction-Science:wai/encode-avc-hevc
Transaction-Science:wai/world-on-moq
Transaction-Science:wai/remote-desktop
Transaction-Science:train/pack-stack
Transaction-Science:wai/ingest-ertmp-scte104
Transaction-Science:wai/quantum-0.6.15-history
Transaction-Science:wai/quantum-studio-workbench
Transaction-Science:wai/quantum-attributed-history
Transaction-Science:ci/energy-step-retry
Transaction-Science:wai/quantum-0.6.15
Transaction-Science:wai/relay-cascade
Transaction-Science:wai/audit-kit
Transaction-Science:wai/receipt-ledger
Transaction-Science:chore/rust-1.99.1
Transaction-Science:wai/ssai-stitched
Transaction-Science:wai/key-release
Transaction-Science:wai/quantum-discover
Transaction-Science:wai/quantum-qasm-generators
Transaction-Science:wai/int-decode-fast
Transaction-Science:train/wai-c
Transaction-Science:wai/quantum-service-client-identity
Transaction-Science:wai/energy-honesty
Transaction-Science:fix/floor-input-chain-order
Transaction-Science:wai/energy-sink-metering
Transaction-Science:wai/energy-truth
Transaction-Science:train/live-room-d
Transaction-Science:sec/unsound-bumps-2026-10
Transaction-Science:wai/delivery-bindings
Transaction-Science:fix/quick-xml-normalized-value
Transaction-Science:sec/after-443-b
Transaction-Science:wai/energy-waste
Transaction-Science:sec/ci-python-pins
Transaction-Science:wai/determinism-cost
Transaction-Science:wai/gpu-int-tier
Transaction-Science:sec/after-443-2026-10-22
Transaction-Science:sec/advisory-sweep-2026-10
Transaction-Science:sec/rust-advisories-2026-10
Transaction-Science:wai/avatar-telepresence
Transaction-Science:wai/ops-npu
Transaction-Science:wai/registrations-b3r
Transaction-Science:wai/scene-priors
Transaction-Science:sec/rustsec-2026-10
Transaction-Science:fix/x402-refuse-unimplemented-scheme
Transaction-Science:fix/passport-no-espr
Transaction-Science:train/wai-2026-10-22
Transaction-Science:wai/cross-fabric
Transaction-Science:fix/eoc-route-cheapest
Transaction-Science:fix/backend-apple-lints
Transaction-Science:feat/tdx-hardware-check
Transaction-Science:wai/pq-receipts
Transaction-Science:wai/dred-exact
Transaction-Science:train/live-room
Transaction-Science:wai/soft-binding-evidence
Transaction-Science:wai/co-watch
Transaction-Science:wai/gain-maps
Transaction-Science:wai/splat-exact
Transaction-Science:wai/telemetry-aggregate
Transaction-Science:wai/exact-upscale
Transaction-Science:wai/quantum-0.6.14
Transaction-Science:wai/pack-efficiency
Transaction-Science:wai/synthesis-mark
Transaction-Science:wai/exploration
Transaction-Science:wai/ad-presentation
Transaction-Science:wai/mark-sync
Transaction-Science:fix/loader-gguf-lints
Transaction-Science:wai/access-services
Transaction-Science:wai/co-performance-live
Transaction-Science:fix/sandbox-vector-drift
Transaction-Science:fix/e2e-window-wait
Transaction-Science:wai/influence
Transaction-Science:wai/pp-admission
Transaction-Science:wai/takedown
Transaction-Science:fix/routing-plan-carries-its-class
Transaction-Science:wai/quantum-codesign-lens
Transaction-Science:wai/shared-lists
Transaction-Science:feat/tdx-pck-chain
Transaction-Science:wai/settlement
Transaction-Science:joule-moq/multi-draft
Transaction-Science:wai/browser-binding
Transaction-Science:wai/bearers
Transaction-Science:feat/sandbox-hardware-check
Transaction-Science:wai/direction
Transaction-Science:wai/co-performance
Transaction-Science:wai/age-assurance
Transaction-Science:fix/dash-bounds-interleave
Transaction-Science:wai/quantum-codesign
Transaction-Science:wai/contribution
Transaction-Science:feat/sandbox-tdx-run-path
Transaction-Science:fix/track-kind-name
Transaction-Science:wai/ietf-draft
Transaction-Science:feat/sandbox-run-flow
Transaction-Science:wai/ai-usage
Transaction-Science:feat/jcp-wire-evidence
Transaction-Science:wai/synthesis
Transaction-Science:wai/quantum-branching-threads-pinned
Transaction-Science:feat/sandbox-run-binding
Transaction-Science:fix/wt-close-linger
Transaction-Science:fix/routing-joules-is-an-estimator
Transaction-Science:feat/jcp-window-caveat
Transaction-Science:fix/attest-vendor-offsets
Transaction-Science:wai/deriving-edge
Transaction-Science:wai/c2pa-live
Transaction-Science:fix/mesh-energy-span-scope
Transaction-Science:feat/compliance-product-liability
Transaction-Science:feat/mesh-weights-change-record
Transaction-Science:wai/ops-gpu
Transaction-Science:feat/receipts-bind-the-output
Transaction-Science:wai/quantum-cli-formulae-private
Transaction-Science:wai/quantum-cli-release-static
Transaction-Science:fix/gguf-cast-alignment
Transaction-Science:joule-moq/e2e-service-seek
Transaction-Science:wai/quantum-0612-land
Transaction-Science:joule-moq/e2ee-web
Transaction-Science:fix/kv-cache-attn-layer-count
Transaction-Science:feat/metal-ratchet
Transaction-Science:wai/quantum-tn-restarts
Transaction-Science:wai/quantum-studio-svg
Transaction-Science:wai/quantum-cli-release
Transaction-Science:fix/efficiency-keeps-coverage
Transaction-Science:fix/joule-code-conformance-header
Transaction-Science:wai/quantum-four-surfaces
Transaction-Science:joule-moq/wt-session-close
Transaction-Science:wai/quantum-engine-studio
Transaction-Science:wai/live-ads
Transaction-Science:wai/quantum-studio
Transaction-Science:wai/quantum-engine-browser
Transaction-Science:wai/quantum-engine
Transaction-Science:wai/live-watermark
Transaction-Science:feat/c27-flow-conformance
Transaction-Science:wai/quantum-one-front-end
Transaction-Science:joule-moq/dvr
Transaction-Science:fix/claims-grounded-by-their-own-citations
Transaction-Science:fix/nvml-low-counter-not-a-reading
Transaction-Science:wai/quantum-one-parser
Transaction-Science:fix/jouleclaw-energy-doc-links
Transaction-Science:feat/c25-single-writer-conformance
Transaction-Science:wai/quantum-exact-phase
Transaction-Science:fix/jcp-wire-retry-and-single-writer
Transaction-Science:wai/quantum-0.6.8
Transaction-Science:fix/mesh-journal-single-writer
Transaction-Science:fix/journal-single-writer
Transaction-Science:wai/quantum-sv-thread-floor
Transaction-Science:wai/e2ee
Transaction-Science:debug/branching-determinism
Transaction-Science:fix/cited-item-authority
Transaction-Science:wai/quantum-tn-split-0.6.7
Transaction-Science:wai/quantum-service-cutrank-pr
Transaction-Science:fix/gpu-counter-under-reports
Transaction-Science:wai/quantum-tn-split
Transaction-Science:wai/quantum-service-cutrank
Transaction-Science:wai/quantum-cutrank-0.6.6
Transaction-Science:fix/jcp-gateway-flow-checks-whole-request
Transaction-Science:wai/quantum-dynamic-examples
Transaction-Science:wai/quantum-dynamic-circuits
Transaction-Science:fix/jcp-gateway-gates-tasks-and-mrtr
Transaction-Science:wai/moderation
Transaction-Science:joule-moq/room-live
Transaction-Science:wai/quantum-cutrank
Transaction-Science:wai/quantum-service-energy
Transaction-Science:ci/lean-triggers
Transaction-Science:wai/steering
Transaction-Science:fix/rapl-permission-vs-absent
Transaction-Science:feat/pool-energy-accounted-scheduling
Transaction-Science:joule-moq/ingest
Transaction-Science:wai/live-metering
Transaction-Science:tidy/safe-lints
Transaction-Science:wai/quantum-0.6.4-pr
Transaction-Science:aac/release
Transaction-Science:joule-moq/web
Transaction-Science:wai/d2c-m7b
Transaction-Science:jouleclaw/jcs-ecmascript-numbers
Transaction-Science:wai/quantum-service
Transaction-Science:fix/efficiency-outcome-anchor-prior-art
Transaction-Science:fix/joulehook-budget-survives-the-process
Transaction-Science:joule-moq/relay
Transaction-Science:fix/jouleclaw-nvml-sampling-floor
Transaction-Science:tidy/clippy-sweep
Transaction-Science:wai/quantum-0.6.4
Transaction-Science:wai/quantum-noisy-clifford
Transaction-Science:fix/sandbox-s7-audit-trail-survives-restart
Transaction-Science:wai/d2c-m8
Transaction-Science:wai/timed-text
Transaction-Science:wai/live-record
Transaction-Science:wai/d2c-m7a
Transaction-Science:fix/joule-code-joulecontract-no-fabricated-discharge
Transaction-Science:fix/jcp-gateway-replays-its-own-receipts
Transaction-Science:wai/tensor-engine-device-compile
Transaction-Science:wai/live-compose
Transaction-Science:fix/openpay-audit-log-survives-restart
Transaction-Science:fix/jcp-efficiency-undefined-ratio-is-not-zero
Transaction-Science:fix/jcp-trace-undefined-ratio-is-not-zero
Transaction-Science:fix/joulehook-unrecognised-payload-fails-closed
Transaction-Science:wai/capture-take
Transaction-Science:fix/jwp-zstd-decompression-cap
Transaction-Science:fix/openpay-sca-exemption-eur-caps
Transaction-Science:fix/openpay-screening-unrun-is-not-clear
Transaction-Science:wai/live-rooms
Transaction-Science:joule-moq/draft-22
Transaction-Science:wai/quantum-wmma
Transaction-Science:wai/live-events
Transaction-Science:wai/quantum-tensor-cores
Transaction-Science:fix/process-gpu-oracle-pid-time
Transaction-Science:wai/d2c-m6
Transaction-Science:wai/d2c-m5
Transaction-Science:wai/bounds-pass-speed
Transaction-Science:wai/quantum-dataflow-vector
Transaction-Science:wai/o23-loaded-set-cache
Transaction-Science:wai/d2c-m4
Transaction-Science:wai/quantum-npu
Transaction-Science:ci/balance-linux-pools
Transaction-Science:wai/d2c-m3
Transaction-Science:wai/quantum-0.5.0
Transaction-Science:fix/meter-freshness-note
Transaction-Science:wai/d2c-m2-m3
Transaction-Science:wai/extension-duration-limits
Transaction-Science:ci/one-job-for-repo-checks
Transaction-Science:wai/coverage-fuzzing
Transaction-Science:wai/decode-output-limits
Transaction-Science:sandbox/bind-egress-credentials
Transaction-Science:wai/quantum-processors-ci
Transaction-Science:wai/quantum-webgpu-windows
Transaction-Science:wai/quantum-sv-gpu
Transaction-Science:wai/quantum-samplers
Transaction-Science:ci/build-what-changes
Transaction-Science:wai/d7-titles-slice
Transaction-Science:ci/gate-on-pr-diff
Transaction-Science:fix/eoc-meter-gpu-freshness
Transaction-Science:ci/checks-on-arm64
Transaction-Science:mesh/bind-weights-and-precision
Transaction-Science:wai/quantum-every-processor
Transaction-Science:wai/d2c-decoders-on-ops
Transaction-Science:fix/clippy-sweep
Transaction-Science:ci/tests-are-run
Transaction-Science:wai/d7-text-and-browser
Transaction-Science:fix/spec-citations-resolve
Transaction-Science:wai/quantum-run-meter
Transaction-Science:wai/quantum-serve-limits
Transaction-Science:fix/tree-energy-reap-under-load
Transaction-Science:wai/security-gaps
Transaction-Science:fix/in-process-self-read-fold
Transaction-Science:fix/rapl-probe-test-in-step
Transaction-Science:ci/lockfiles-current
Transaction-Science:wai/d2b-bounds
Transaction-Science:wai-quantum-fabric-energy
Transaction-Science:fix/grade-labels-and-windows
Transaction-Science:wai-quantum-webgpu-tile
Transaction-Science:fix/model-based-means-calibrated
Transaction-Science:wai/d7-5-stroke-set
Transaction-Science:wai-quantum-webgpu
Transaction-Science:fix/uncalibrated-model-is-estimate
Transaction-Science:wai/d7-4-vector-checker
Transaction-Science:wai/w4-4-staged-packages
Transaction-Science:wai/d1-record-true
Transaction-Science:wai/d7-3-vector-raster
Transaction-Science:wai/d7-2-vector-formats
Transaction-Science:wai/d7-1-graphics-text
Transaction-Science:feat/tree-delegated-energy
Transaction-Science:feat/meter-model-subprocesses
Transaction-Science:feat/meter-solver-subprocesses
Transaction-Science:fix/no-fabricated-readings
Transaction-Science:revive/joule-code-pack-test
Transaction-Science:wai/reach-builds
Transaction-Science:wai/generate-score-cli
Transaction-Science:revive/jcp-receipt-orphan-doc
Transaction-Science:fix/tree-energy-setup-race
Transaction-Science:sandbox/meter-delta-read
Transaction-Science:wai-quantum-circuit2
Transaction-Science:wai/d2a-operators-crate
Transaction-Science:wai/w3-3-http-receipts
Transaction-Science:wai/d2a-operators-text
Transaction-Science:chore/licence-files-match
Transaction-Science:ci/hygiene-comment
Transaction-Science:feat/gateway-upstream-energy
Transaction-Science:feat/mesh-fidelity-provenance
Transaction-Science:energy/gpu-plausibility-magnitude
Transaction-Science:wai-quantum-fabric
Transaction-Science:feat/orchestrate-journal
Transaction-Science:mesh-meter/process-span
Transaction-Science:wai-quantum-nqs-rectangle
Transaction-Science:fix/wai-burst-race-assertion
Transaction-Science:wai-quantum-nqs-pointgroup
Transaction-Science:ci/pr-diff-path-gate
Transaction-Science:feat/revocation-freshness
Transaction-Science:feat/policy-digest
Transaction-Science:feat/checkpoint-energy
Transaction-Science:wai/w5-4-measure-web
Transaction-Science:wai/strict-ed25519
Transaction-Science:fix/gpu-plausibility-magnitude
Transaction-Science:ci/energy-tests-load-independent
Transaction-Science:wai-quantum-nqs-symmetry
Transaction-Science:wai/audio-provenance
Transaction-Science:fix/energy-tick-floor-proof-sandbox
Transaction-Science:wai/w3-4-playlists-abr
Transaction-Science:wai/w1-6-moq-layers
Transaction-Science:wai/w5-3-session-claim
Transaction-Science:wai/w4-3-packages
Transaction-Science:wai/w1-5-stage-receipts
Transaction-Science:wai/w3-http-delivery
Transaction-Science:wai/w5-staged-measurement
Transaction-Science:wai/w4-wai-pack
Transaction-Science:feat/transparency-log
Transaction-Science:energy/load-robust-tests
Transaction-Science:wai/land-18-staged-browser
Transaction-Science:ci/workflow-guard
Transaction-Science:ci/energy-hardware-linux-hw
Transaction-Science:ci/concurrency-groups
Transaction-Science:feat/mcp-extensions
Transaction-Science:jcp-energy/npu-needs-proof
Transaction-Science:jouleclaw-energy/apple-gpu-share
Transaction-Science:fix/ap2-mandate-authority
Transaction-Science:feat/decision-models
Transaction-Science:wai/land-17-staged-delivery
Transaction-Science:efficiency/energy-trace
Transaction-Science:energy/burn-floor-0-1-j
Transaction-Science:wai/land-16-binary-payloads
Transaction-Science:ci/macos-energy-widen
Transaction-Science:wai/land-14-energy-reporting
Transaction-Science:wai/land-15-key-discovery
Transaction-Science:energy/meters-on-real-linux-hardware
Transaction-Science:wai/land-13-parameter-set-identity
Transaction-Science:wai/land-12-registry-and-text
Transaction-Science:eoc-agent/model-span-provenance
Transaction-Science:energy/cost-keys-named-for-what-they-carry
Transaction-Science:energy/liveness-must-specs
Transaction-Science:openpay/token-independence-test
Transaction-Science:sandbox-meter/process-energy
Transaction-Science:sandbox-meter/cpu-rail-liveness
Transaction-Science:eoc-meter/process-energy
Transaction-Science:jcp-energy/process-energy
Transaction-Science:eoc-meter/cpu-rail-liveness
Transaction-Science:jouleclaw-energy/process-energy
Transaction-Science:jouleclaw-energy/cpu-rail-liveness
Transaction-Science:jcp-energy/cpu-rail-liveness
Transaction-Science:proof-cascade/process-energy
Transaction-Science:proof-cascade/cpu-rail-liveness
Transaction-Science:wai/research-taxonomy-wording
Transaction-Science:wai/land-09-int-mlicpp
Transaction-Science:wai/land-10-receipt-classes
Transaction-Science:wai/land-11-research-notes
Transaction-Science:wai/land-08-energy-classes
Transaction-Science:wai/land-07-int-decode-kernels
Transaction-Science:wai/land-06-ci-headline-tests
Transaction-Science:wai/land-05-prior-nnc
Transaction-Science:wai/land-04-codec-registry
Transaction-Science:wai/land-03-jpegai-no-libm
Transaction-Science:wai/land-02-determinism-tiers
Transaction-Science:feat/wai-video-workflow
Transaction-Science:ci/neural-e2e-guard
Transaction-Science:ci/jcp-pack
Transaction-Science:ci/tier2-packs
Transaction-Science:wai-webcodecs-negotiation
Transaction-Science:ci/macos-energy-backend
Transaction-Science:ci/joule-code-pack
Transaction-Science:joulecontract/run-negative-vectors
Transaction-Science:ci/jouleclaw-arm64-debuginfo
Transaction-Science:ci/run-conformance-verifiers
Transaction-Science:mesh/cost-calibration
Transaction-Science:diagnose/grounding-backing
Transaction-Science:wai/energy-operating-point
Transaction-Science:wai/2030-transport-landscape
Transaction-Science:wai/constraints-and-unidirectional
Transaction-Science:wai/determinism-tier-covers-emitted-medium
Transaction-Science:wai/moq-streaming-format
Transaction-Science:wai/mpeg-ai-part6-mapping
Transaction-Science:wai/prior-carriage-and-derivations
Transaction-Science:wai/receipt-classes-and-key-discovery
Transaction-Science:wai/task-fidelity
Transaction-Science:wai/transparency-emission
Transaction-Science:wai/c2pa-emitter
Transaction-Science:compliance/eu-scale-pack
Transaction-Science:compliance/composite-grade-v2
Transaction-Science:jcp/erasure-tombstone-v2
Transaction-Science:jcp/avoided-energy
Transaction-Science:jcp/erasure-tombstone
Transaction-Science:jcp/environment-binding
Transaction-Science:proof/stub-on-the-wire
Transaction-Science:compliance/composite-grade
Transaction-Science:mesh/context-cost-profile
Transaction-Science:ar-1-on-main
Transaction-Science:jcp/mcp-meta-receipt
Transaction-Science:wai/energy-binding
Transaction-Science:jcp/energy-coverage-relanded
Transaction-Science:jcp/energy-coverage
Transaction-Science:wai/video-byte-equality
Transaction-Science:eoc/multi-tenant-allocation
Transaction-Science:compliance/banding-function
Transaction-Science:ci-standards-workspaces
Transaction-Science:sandbox/honest-tier
Transaction-Science:proof/joule-ceiling
Transaction-Science:chore/rust-1.98-and-deps
Transaction-Science:wai-jpegai-full-wasm
Transaction-Science:wai-3d-landscape
Transaction-Science:wai-binding-real-decode
Transaction-Science:wai-determinism-tiers
Transaction-Science:wai-jpegai-wasm-demo
Transaction-Science:wai-jpegai-integrate
Transaction-Science:fix-byte-exact-includes
Transaction-Science:ci-windows-shell
Transaction-Science:jpegai-dequant-derive
Transaction-Science:ci-rust-setup
Transaction-Science:fl2-land
Transaction-Science:ci/cross-workspace-check
Transaction-Science:ci-enable
Transaction-Science:jcp-training-receipt
Transaction-Science:joule-code/repair-grant-literals
Transaction-Science:jcp-gateway-flow-relay
Transaction-Science:jcp-receipt-flow-seal
Transaction-Science:jcp-runtime-flow-gate
Transaction-Science:jcp-flow-witness
Transaction-Science:jcp-flow-lattice
Transaction-Science:rust-toolchain-1.97.1
Transaction-Science:score-binary-on-320fa1e
Transaction-Science:sandbox/cred-injection-2
Transaction-Science:sandbox/credential-injection
Transaction-Science:corpus-embedder-s5
Transaction-Science:jcp/cite
Transaction-Science:receipts-corpus-connector
Transaction-Science:jcp/grant-caveats
Transaction-Science:feat/jpegai-derive-inputs
Transaction-Science:feat/jpegai-weight-tools
Transaction-Science:feat/jpegai-icci-validation
Transaction-Science:jcp/x402-example-settlement
Transaction-Science:jcp/x402-bridge
Transaction-Science:jcp/receipt-payload-hash
Transaction-Science:fix/jpegai-pih-flags
Transaction-Science:feat/jpegai-e2e-chain
Transaction-Science:feat/jpegai-e2e-z
Transaction-Science:feat/jpegai-ton
Transaction-Science:jcp/dual-ceilings
Transaction-Science:feat/jpegai-pih
Transaction-Science:feat/jpegai-bitstream
Transaction-Science:feat/jpegai-icci-net2
Transaction-Science:feat/jpegai-icci-net
Transaction-Science:feat/jpegai-dwt
Transaction-Science:feat/jpegai-color
Transaction-Science:score-binary-rerank
Transaction-Science:feat/jpegai-efl
Transaction-Science:feat/jpegai-lef
Transaction-Science:feat/jpegai-efn
Transaction-Science:feat/jpegai-lsbs
Transaction-Science:feat/jpegai-reconstruct
Transaction-Science:jcp/orchestrate-profile-mapping
Transaction-Science:jpegai-sigma-index
Transaction-Science:hyperscale-floorfix
Transaction-Science:feat/jpegai-pipeline-dequant
Transaction-Science:feat/jpegai-e2e-synthesis
Transaction-Science:recovery/jpegai-decoders
Transaction-Science:wai/jpegai-synthesis-executor
Transaction-Science:jouletag-standard
Transaction-Science:wai/jpegai-gate-fixes
Transaction-Science:wai/int-transformer-executors
Transaction-Science:wai/int-transformer-kernels
Transaction-Science:energy/rapl-nvml-hardware-fixes
Transaction-Science:fix/omni-build-and-gguf-tokenizer
Transaction-Science:jouletable-standard
Transaction-Science:jouleclaw/gguf-decoders
Transaction-Science:wai/confidentiality-freshness
Transaction-Science:joulehook-standard
Transaction-Science:honest-counter-provenance
Transaction-Science:amd-kds-adapter
Transaction-Science:evidence-derived-grounding
Transaction-Science:mapping-physically-rooted-clarify
Transaction-Science:attested-efficiency-demo
Transaction-Science:efficiency-energy-attestation
Transaction-Science:mapping-attested-kernel
Transaction-Science:energy-counter-attestation
Transaction-Science:efficiency-surface
Transaction-Science:efficiency-spec
Transaction-Science:harness-econ
Transaction-Science:federation-quic-on-main
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
Transaction-Science/open-standards!327
Loading…
Reference in a new issue
No description provided.
Delete branch "joule-moq/harden"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
L5 hardening: receipt chains, the receipts' binary form, room track names, proof of possession
Stacked on #324 (
joule-moq/web): this branch starts from #324's head (8c80ef34) withorigin/mainmerged in (and merged again ata8b02f72), and holds #324's commits. Review #324 first; once it lands, thisdiff is the hardening alone. Base: main. Not merged here.
The browser client of #324 found four defects and gaps in what is on main. Each is fixed
here, in the spec text, the reference implementation, the corpora and their independent
verifiers,
joule-moq, the relay and the browser client.1.
ReceiptChains: a join's fill from group 0The defect. A late joiner's live receipts anchor its chain at group N; it then
fetches the track from group 0. Groups 1 to N−1 were held as history and admitted back
from the anchor, but group 0, whose parent is
null, was refusedchain_break("asecond chain head"), although group 1 links to it.
The fix. Below a join's anchor the gap has no lower end, and a
nullparent there isthe chain's true start (WAI
extensions/jwp-receipts.md§3 step 3, Joining): the groupis
parent_not_held, held as history, and admitted when the group above it links back toit. A
nullparent outside such a gap is still a second chain head, and a fork stillchain_break. The same rule injoule-moq'sReceiptChains,wai-rs's andjwp_verify.py; §3 step 3 and §5.9 say so.Tests.
joule-moqreceipt::tests::a_joiners_fill_from_group_0_admits_the_chains_start(the case #324 hit: anchored at 3, 4 linked, then 0 to 5 fetched in ascending order, 3
and 4 again; then a second group 0 and a second child of 0, both still
chain_break).Corpus vectors
chain_join_fetch_from_group_0andchain_join_second_start_after_the_fill.The e2e checks that the late joiner's chains break nowhere. Which of its receipts comes
first varies under load: where the live receipts anchored a chain first, the fetched groups,
group 0 among them, are admitted back from the anchor as history (about 480 groups in such a
run); where the fetch's receipts came first, group 0 starts the chain and the rest link.
Falsified. With the fix committed (
173500ed, vectors57cc57b9), the old rule restoredin all three verifiers and the same commands run:
cargo test -p joule-moq --lib receipt::a_joiners_fill_from_group_0_admits_the_chains_startFAILED at its group 0 assertionwai_jwp_vectors verify ../jwp-conformancechain_breakfor group 0python3 jwp-conformance/jwp_verify.py2. The receipts in WAI's binary form
The gap. The receipts track carried
joule-moq's own JSON (its serde form: hashes andthe signature as arrays of numbers), larger than the audio object it covers, and not a
form WAI defines.
What WAI now defines.
extensions/jwp-receipts.md§2.7 (new), normative:form it was signed in, then its 64-byte signature; a legacy group adds its parent flag
and parent, which its payload does not sign. The signing domain says which form. A
group's link hash is computed over the bytes as received, with nothing re-serialised.
object_id, the content hash,the figure, the origin, the proof's siblings, direction bits and leaf index, then
leaf_version(1 the legacy leaf, 2 the labelled leaf, followed by its class).Standing alone it is prefixed by
track_aliasandgroup_id.WJR1): the magic, the group, a u32 count, each object's body.what does not read is
malformedat its §3 step. The form is canonical: a writerreproduces the bytes it read.
extensions/moq-streaming-format.md§4.1: a receipts-track object carries that form.§5.12 lists the vectors.
Implemented in
wai-rs(jwp_delivery::binary, which reads into the JSON members andthen through
from_json),jwp_verify.py(from the text), andjoule-moq(
GroupReceipt/ObjectReceiptto_binary/from_binary,read_receipts, andReceiptBundle::to_payload/from_payload, whose signatures are unchanged). The relay'sdoor, the browser's
TrackSigner/TrackVerifier, the mock and the QUIC transport all gothrough
ReceiptBundle, so they carry the binary form with no change of their own. TheJWP_OBJECT_RECEIPTproperty carries an object receipt standing alone in it. No JSON pathis kept: a JSON payload does not read.
Vectors (
jwp-conformance, procedurebinary, 20): a live track's group of oneobject, the mixed legacy group (five objects, their proofs, every label tag), the labelled
group (tag 4, coverage Partial, its parent), a group with no object, a legacy group and an
object standing alone, each read and written again byte for byte; and refused
malformedat their step: another magic, an unknown signing domain, a record ending inside its group,
a trailing byte, a count past the objects, parent flags 2 and 0-beside-a-parent, coverage
2, a non-UTF-8
signer_id,leaf_version3, class tag 9, filtering byte 3, a legacy groupwithout its parent; and one that reads and is refused by §3 step 1 (coverage Partial beside
the unmetered marker).
wai_jwp_vectors,jwp_verify.pyandjoule-moq'stests/wai_jwp_corpus.rsgive every one its outcome.Bytes per receipts object, measured in the e2e on every receipts object a page
received: the binary form as received, and the same receipts in the JSON form the receipts
track carried before (
joule-moq's serde form of the same group and object receipts, thepayload
ReceiptBundle::to_payloadwrote on #324's head):Over the six runs of the final e2e, both transports: about 330 to 370 audio and 100 to 110
video receipts objects per subscription.
Every object of a track has the same size in the binary form: every field but the strings
has a fixed width, and the strings (two RFC 3339 times, the publisher's id, the origin) do
not change between groups. Of the 359 bytes, 192 are the signature, the publisher's key,
the root, the parent link and the object's content hash; 56 are the two timestamps; the
rest are the ids, counts, the class and the framing. A participant named with five
characters instead of three adds 4 bytes. The JSON size varies with the digits of the
group id and the parent's presence.
3. live-rooms §6 and §10.2: the catalog and receipts tracks
extensions/live-rooms.md§6.1 names a media track's receipts track (in itsnamespace, its Track Name followed by
_receipts:0_receipts) and a publisher'scatalog track (Track Namespace the room and owner fields alone, Track Name
catalog).Every byte stays in
a–z,0–9and_, so MOQT §8.8's rendering is still the bytesthemselves (
<room>-<principal>-video--0_receipts,<room>-<principal>--catalog). §6.2ties the catalog's
wai_receipts_trackto it. §10.2's scopes add: the publisher's catalog[[2, 6], [R, P, nil], "catalog"], each slot's catalog, and for a subscriber[[4, 7, 8], [R], "catalog"]and[[4, 7, 8], [R], "l_receipts"]per layer (the mediascopes already covered the receipts tracks for publishing).
wai-rs(RECEIPTS_SUFFIX,CATALOG_TRACK,receipts_track_name,catalog_namespace,moqt_scopes) andlive_rooms_verify.pyagree; the rooms corpus'smoqtscopes are regenerated.The browser client publishes and subscribes to exactly those names, and
joule-moq-relay'sreceipts_track_suffixdefaults to_receipts.4. Proof of possession of a grant's key
A room grant is public: every participant holds every grant, to verify the room. So no
binding takes a grant, or a token mapped from it, as a bearer credential:
extensions/live-rooms.md§10.5 (new) requires a proof beside it, one record for MOQTand HTTP.
The record (
WRP1, §10.5.1): magic, version 1, the grant's digest (§4.2), theprincipal's key, the verifier's 32-byte challenge, a context, and an Ed25519 signature by
the key over
wai:live-room-proof0x01 and the rest. The context is a verb and the targetthe client addressed,
//authority/pathwith no scheme, query or fragment:SETUP //relay.example/moqover MOQT,POST //gateway.example/whip/r1over HTTP. The verifiercompares it with what it received (a WebTransport CONNECT's
:authorityand:path, anHTTP request's or a WebSocket upgrade's
Hostand path, native QUIC's AUTHORITY andPATH), so a server the client chose cannot pass the challenge on and present the proof
elsewhere; the scheme is left out because a front that terminates TLS changes it.
The MOQT form, and why (§10.5.2). Of the two directions, the signed challenge in a
dedicated Setup Option is the cleaner against
draft-ietf-moq-transport-22's setup:relay's depends on the client's. So the relay sends its SETUP at once with the
challenge,
GRANT_CHALLENGE(0x3A47, 32 random bytes per session); the client waits forit (an extension that changes the session's authorisation does not pipeline, §9.1) and
sends its SETUP with the grant as the AUTHORIZATION TOKEN (§9.1.4, USE_VALUE, type 0) and
the proof as
GRANT_PROOF(0x3A49, which may appear once per grant). The proof ischecked before any request of the session is served, and a SETUP presenting a grant
without a proof that passes closes the session
UNAUTHORIZED(§12.2, 0x2). That issession-level authorisation, which is what SETUP's token is for.
record is its value, unchanged. A proof inside the token would make the token
session-specific and need a non-standard value under type 0, and CTA-5007-B's
catdpopkeeps the proof outside the token too (beside it, as RFC 9449's header is):the token's
cnfnames the key, the proof shows it is held.WebTransport API exposes no response headers), and native QUIC has none; a TLS exporter
is not available to a page either. In SETUP, the form is the same over native QUIC,
WebTransport and the WebSocket binding.
waits for the challenge in either direction.
The bytes, for a grant G and a relay at
https://relay.example/moq:GRANT_CHALLENGEisthe 32 bytes; the client's AUTHORIZATION TOKEN is
03 00‖ G's record;GRANT_PROOFisWRP1 01‖ digest(G) ‖ principal ‖ challenge ‖19 00‖SETUP //relay.example/moq‖sig = 192 bytes.
The HTTP form (§10.5.3, for WHIP and WHEP, whose RFC 9725 Bearer token is the grant):
Authorization: Bearerand the grant's record,WAI-Room-Proof:and the proof record,both base64url without padding; the challenge in
WAI-Room-Challenge:, sent on a401(with
WWW-Authenticate: Bearer error="invalid_token") to a request whose grant has noproof that passes, and on every accepted response, for the next request (a session's
PATCHandDELETE). Each challenge is good for one request, consumed when a proof overit is accepted and kept unconsumed for a time the server states, as RFC 9449 §9's
server-provided nonce is.
The checks (§10.5.4), in order, each with its reason in §11: a proof present
(
pop_missing), it reads (pop_malformed), it names the grant (pop_wrong_grant), its keyis the principal (
pop_wrong_key), the signature verifies strictly (pop_bad_signature),the challenge is this session's or request's (
pop_replayedfor one consumed before,pop_wrong_challengeotherwise), the context is what the verifier received(
pop_wrong_context). The CAT mapping (§10.1) and §13 say so. The code points and the twoHTTP fields are proposed for their registries and not registered (registry:
WRP1,GRANT_CHALLENGE,GRANT_PROOF,WAI-Room-Proof,WAI-Room-Challenge; new kindssetup-optionandhttp-header).Implemented in:
wai-rs:live_room::{Proof, check_proof, grant_digest_and_principal, base64url},and 17 proofs in the rooms corpus (
proofs): over MOQT, a good one; a grant with noproof; the accepted proof presented again on a later session (
pop_replayed); one overanother session's challenge (
pop_wrong_challenge); one by another participant's key(
pop_wrong_key); one naming the principal's key signed by another (pop_bad_signature);one naming another grant; one for another relay (
pop_wrong_context); three that do notread. Over HTTP, in their header forms: a WHIP
POSTand the session'sDELETEaccepted;the Bearer token alone; the
POST's proof sent again; aPOST's proof on aDELETE; aMOQT proof presented over HTTP.
live_rooms_verify.py: the record, its base64url header form and the seven checks,from the text.
joule-moq(grant_proof):GrantProof(sign,read,to_bytes),check_proof(the grant's digest and principal from the caller, so a verifier with its own grant
reader uses it as it is),
grant_digest_and_principal(for one with none), the SETUPhelpers (
add_challenge,challenge_of,add_grant,proofs_of,proof_for),context, the header names, base64url. The client side:add_grantwith a proof overchallenge_ofthe relay's SETUP.proof = truenames a room grant's record, and the relay checks each such grant in theclient's SETUP before serving any request, closes the session
UNAUTHORIZEDotherwise(the reason in its log), and refuses a request resting on a grant its session never
proved (
REQUEST_ERRORUNAUTHORIZED). The transports carry the target the clientaddressed. Its test client presents grants with proofs (
tests/grant_proof.rs).grant's record; the page waits for the relay's SETUP and signs the proof in wasm
(
clientSetupWithGrant, by the same Ed25519 code the relay's checks areheld to), over the challenge and the URL's
//authority/path. The fixture's relay rulescarry
proof = true. The room's clock, a room key with no grant, keeps a token of itsown (finding 4 of #324: its lifecycle is still authored by a page for the test).
What #325's gateway must change
#325 (
joule-moq/ingest,5f0b7a95) is not edited here. To land on this:POST /whip,POST /whep/<room>/<owner>,and
PATCH,DELETE,GET,HEADon/whip/s/<id>and/whep/s/<id>): afteradmit(its own reader, §4.3, the window, the origins), calljoule_moq::grant_proof::check_proof(&ad.digest, &ad.grant.principal, proof, &challenge, |c| consumed.contains(c), &context)withprooftheWAI-Room-Proofheader throughgrant_proof::from_base64url(a header that does not decode isSome(vec![]), sopop_malformed), andcontext=grant_proof::context(method, host, path)from therequest's
Host(or:authority) and path, its query cut (/whep/<room>/<owner>?layer=1is signed as
/whep/<room>/<owner>).WAI-Room-Challenge(base64url) on the401it already sends (unauthorized, witherror_descriptionthepop_*code) and onevery accepted response (
201,204); kept unconsumed for a stated time(configuration, for example
http.challenge_ttl_s), consumed on acceptance, and theconsumed ones kept as long, bounded, to report
pop_replayed.WAI-Room-ChallengeinAccess-Control-Expose-Headers,WAI-Room-ProofinAccess-Control-Allow-Headers.catalog.rs'sRECEIPTS_SUFFIXis_receipts(live-rooms §6.1), and thetest at
whep.rsthat names0/receipts.tests/room_corpus.rs): run the rooms corpus'sproofswithbinding: "http"through its header parsing andcheck_proof.joule-moquse changes:ReceiptBundle::to_payload/from_payloadkeep their signatures and now write and read the binary form; its relay link's
ClientOptions { tokens, ..ClientOptions::default() }still builds, its link token beinga plain rule (
proof = false).The API L6a (#325) and #317 meet
joule-moq:ReceiptBundle::to_payload,from_payload,encode_stream,decode_streamunchanged in signature, binary on the wire; newReceiptBundle::read(with the link hash over the bytes received),
GroupReceipt::to_binary/from_binary,ObjectReceipt::to_binary/from_binary/body_binary,read_receipts,link_hash_of,Malformed,RECEIPTS_MAGIC;ReceiptChainskeepsits API, the one behaviour change above; module
grant_proof(new); dependencysha20.10 (already locked). The serde derives on the receipt types stay; nothing on the wire
uses them.
joule-moq-relay:Authorizer::allowstakes a fourth argument, the session's provenset;
Authorizer::requires_proof;config::Grant.proof(defaultfalse);SessionCtx.proven;Connection::target()(a default method),WtConnection::with_target,MuxConnection::with_target;ClientOptionsgainsgrants,target,sign_challenge(filled by
Default);session::servesends the relay's SETUP before reading theclient's and declares the receipt extension whatever the client says (on when both do);
receipts_track_suffixdefaults to_receipts.wai/live-metering) edits the relay'ssession.rs(serve),config.rs,README and the registry beside this: its
MeteredGrantnames a grant by the token'sSHA-256, which for a room grant is now the record's SHA-256 with no secret; after merging,
wai registry exportagain (both add wire identifiers; this adds two kinds).Also found under load, and fixed
One of four runs of
e2e/run.sh --runs 4failed ingoaway: a page met a VP9 decodingerror and never decoded that track again. A codec that errs is closed for good, and #324's
page went on handing frames to the closed decoder. Each group rides a stream of its own and
waits for its receipts, so under load a group can be released after a later one, and
decoded then it corrupts the decoder's references. The page now drops a live video group
older than the last it decoded (
late_dropped), and makes a decoder again after an error,waiting for the next key frame (
decoder_restarts).Over WebTransport, a session the relay refuses reaches the page as a lost connection, not as
UNAUTHORIZED: the relay's WebTransport library closes the QUIC connection rather than theWebTransport session. Over the WebSocket binding the page reads the code (2) and the reason
(
live-rooms §10.5: pop_missing). The e2e reads the reason from the relay's log overWebTransport. Closing the WebTransport session itself, with its code, is left to the relay's
transport.
Results, on the build host through
rbEvery command ran through
~/kani-logs/remote/rb <worktree> -- '<command>'on the buildhost, under its memory guard, its output written to a log there; load averages are the
host's own.
cargo test -p joule-moq --lib receipt::(finding 1, with the fix)wai_jwp_vectors genthenverify ../jwp-conformance(featuresreceipt_claims,key_discovery)verify, the old rule restoredpython3 jwp-conformance/jwp_verify.py jwp-conformance/vectors.jsonchain_differential.py <wai_jwp_vectors> --n 3000andchain_gap_differential.py … --n 400, seeds 1 and 2cargo test --no-default-features --features receipt_claims,key_discovery --lib jwp_delivery::wai_live_room_vectors genthenverify ../live-conformance/roomscargo test --no-default-features --features live_room --test live_roomand--lib live_room::python3 -I live-conformance/live_rooms_verify.py live-conformance/roomscapture_take_verify.py takes,live_compose_verify.py compose,live_record_verify.py recordings(they read rooms throughlive_rooms_verify.py)cargo test --no-default-features --features live_room,live_compose,live_record,timed_text,capture_take(wai-rs)cargo test --locked -p joule-moq,-p joule-moq-relay,-p joule-moq-web(final head)tests/grant_proof.rsand the corpus tests among themcargo clippy --locked -p joule-moq -p joule-moq-relay -p joule-moq-web --all-targetscargo clippy -p joule-moq-web --target wasm32-unknown-unknown;cargo check -p joule-moq --no-default-features;cargo check -p lockstep-quiccargo clippy --no-default-features --features receipt_claims,key_discovery,live_room,live_compose,live_record,timed_text --all-targets(wai-rs)cd wai/wai-live-web && cargo test --locked,cargo clippy --locked --all-targetscargo run --no-default-features --bin wai -- registry export, then--check;--lib codecs::registry::cargo update --workspaceandcargo check --lockedinexamples/transport-moqt;scripts/check-lockfiles.shscripts/check-tests-in-ci.py,scripts/check-orphan-sources.pycheck-comparative-prose.sh,check-no-vanity-metrics.sh,check-workflow-concurrency.sh,check-spec-refs.py,check-wai-section-refs.pye2e/run.sh --runs 1(first run, every scenario)e2e/run.sh --runs 4, load average 77 to 136e2e/run.sh --runs 6, load average 35 to 92chain_break), then made order-independente2e/run.sh --runs 6ona70edf76, the head before the last merge of main (which touches nothing the e2e builds), load average 38 to 63, 78% of memory freecompose,webtransport,websocket(with the page that falls back to the binding by itself),goaway(every page moved and closed its old session itself, 0 closed at the timeout)scripts/check-lockfiles.sh,wai registry export --check,wai_jwp_vectors verify,wai_live_room_vectors verify,cd wai/wai-live-web && cargo test --lockedText and registry
WAI and joule-code CHANGELOGs; jwp-receipts §1, §2.4, §2.7 (new), §3 step 3, §5.9, §5.12
(new); moq-streaming-format §4.1; live-rooms §1, §6.1, §6.2, §6.3, §10, §10.1, §10.2,
§10.4, §10.5 (new), §11, §12, §13; the corpora's READMEs; the relay README's Receipts and
Tokens and room grants;
joule-moq's andjoule-moq-web's READMEs; the registry (sixwire identifiers, two kinds) and
wai registry export. SPEC §5 registers no newcapability or record, so it is unchanged.
🤖 Generated with Claude Code
Closed: landed in main through #325 (joule-moq/ingest), which contains this branch's head
46dbd1a6unchanged. #325's relevant CI was green but two failures outside this work: a wai-quantum nondeterminism test and a jouleclaw GPU-energy test on the macOS runner.dcharlot referenced this pull request2026-10-19 06:16:02 -04:00
Pull request closed