open-standards/wai/pack-conformance/packs/video-base-01/package/package.receipt.json
Transaction Science 6012a7c3cf wai: a package is bound to the policy its receipt signs; malformed packages are refused, never panicked on; floor key frames and members checked against the package; receipt JSON read strictly; MoQ dependencies never dangle
Review round 2, items 1-10:
- 1: §11.3 rewritten in order. The verifier (Rust and Python) requires the receipt's
  components to be the policy's by id, order and media (policy-component-mismatch,
  so a zero-component receipt is refused); runs pack-id and §3.6's capability rules
  under the effective policy; holds each index's timebase, media, string table,
  class records, every entry's role/capability/layer, and every piece's rules,
  moments and class plan to the policy (index-policy-mismatch). Seal and verify
  refuse a receipt with no component (receipt-index-count).
- 2: verify reads objects by get(), skips the floor and catalogs once anything has
  failed; the catalog renderers return Result (a start past 2^53 - 1 is
  catalog-mismatch); the fragment time uses checked_mul; Python maps encoding,
  overflow and value errors to refusals. New index rule window-start: an index with
  no previous window starts at piece 0, entry 0 and time 0 (§4.5), in both.
- 3: each floor piece opens on a shown key frame, and holds no other unless
  extra_keyframes; every sequence header is the first's bytes (both, §11.3).
- 4: both readers refuse a member named twice before reading the version; the
  package's receipt file must be its canonical bytes; Python refuses -0.
- 5: a refinement track depends on the tracks carrying what its entries refine
  (MSF's depends is all-of); never a track the catalog lacks. catalogs/ corpus.
- 6: Rust binds a supplied floor's renderer, settings, framing header and target
  (floor-object-mismatch); SPEC §7.1 says a profile may fix those members.
- 7: verify reads the directory strictly (dot-names, *.sha256 included).
- 8: Python's manifest parse is the typed one; the object differential is 0.
- 9: Python refuses two components of one id (receipt-component).
- 10: v2 writes every member, energy_provenance null when unmetered, evidence
  exactly as its class carries; v1 keeps reading an absent class.
Regression tests: tests/review.rs (the review's probes, re-sealed with the key, and a
seeded run of random alterations that never panics); mutation corpus receipt cases.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 07:42:47 -04:00

1 line
No EOL
1.1 KiB
JSON

{"asset_id":"video-base-01","components":[{"id":"v","index":"index-v.wsix","index_digest":"5ffc2be3f21af79078a1158e3d669e4268a35b0ca61a6e73ff252fdf38f346d0","media_class":"video","stage_root":"bd0c7799633b108cf9ccb0c7a4cedbdf6173a83470d3d96b94d075c03e0db7b6"}],"energy_provenance":null,"grant":{"capability":"wai.video.package","funds_ceiling":null,"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","joule_ceiling_micro":null},"joules_micro":0,"kind":"package","packager":"builtin:[email protected]","parent_kind":"none","parent_receipt_hash":null,"policy_digest":"e1c131d56798eb840e22736076d74908bca2b7585aeae7e4bb1698218c01a35e","receipt_hash":"22c6f558063499040127d58b062f08f9ec2a6cee54b51c97d42e8741d76ad728","sig":"4554bd1c09aaa4af8799e37e2379cde9d341c7982a6d31a050162ee075c07f93c507abfda9c8223e70b9c56a4dbf9cee626ddaa680bd807fb4eda1fd2f885b06","signer_id":"did:key:z6MkfMo6gxqdBhaHMNnmfhgZFBjpCDTkmJMJLoypsBZS9PwD","signer_pubkey":"0d7550754e0800a5d237eef5826035766b9b3e5a15868a940ab289958788e3b0","stored_bytes":119779,"total_bytes":130963,"total_entries":10,"unique_objects":8,"version":2,"work_units":10}