- Past WALK_BOUND, a revision ahead of the head (its media sequence after its last complete segment greater) re-anchors the chain (reanchored): it becomes the head, the chain keeps its bindings, the revisions between are not signed. One not ahead is refused (playlist_receipt_walk_exceeded), so a stale or older revision never moves it back; the head fetched again is unchanged, however often. (§8.6) - Bindings key a line by its URI resolved against the playlist's URL and normalized (RFC 3986 §5.2, §6.2.2; http_binding::uri, and an independent rfc3986_resolve in http_verify.py), so ./720/1201.0.wai is 720/1201.0.wai. (§11.5) - A gap at a sequence number bound to an object is playlist_listing_rebound. - A binding is kept while one of the last 256 revisions lists it (RETENTION); a rebinding older than that is not detected, as §11.5 states. - Corpus: live_edge_reanchored*, live_edge_reanchor_not_backwards, live_edge_parent_substituted, live_edge_parent_invalid, live_relisted_dot_alias, live_dot_alias_same_object, live_gap_withdraws_a_segment, and uri_resolve cases (RFC 3986 §5.4 and alias spellings) with a fuzz family. Co-Authored-By: Claude Opus 5.5 <[email protected]>
1 line
1.7 KiB
JSON
1 line
1.7 KiB
JSON
{"kind":"wai.video.manifest","manifest_hash":"9738e08a98c5867a031789c26269d72cbfabd153483128811d4feb0e33e4e136","session_class_hash":"2d9add4fe530faab9a90f8195095117234c8d10472bac66237a1c2e771671759","class":{"content_id":"live/720","entitlement":"public","geo":"","blackouts":[],"ad_pod_id":"","window":1200},"segments":[{"index":0,"kind":"content","uri":"../objects/9de886a61b983bfcb8118ec313551c5af730a176180151756f8071fbb7d5f716.wai#n=16606","duration_ms":3840,"ad_id":null},{"index":1,"kind":"content","uri":"../objects/63c08b05659fd758074ff41a1378a391b7d449b0010a4ddd1894efb60026bb17.wai#n=19118","duration_ms":3840,"ad_id":null}],"merkle_root":"40add72be1d163ade96031789b4d36ca59dfa6100305a6ad2769fd17b096d07d","work_compose_ops":2,"viewers_served":1,"joules_micro":0,"grant":{"grant_hash":"0000000000000000000000000000000000000000000000000000000000000000","capability":"video.manifest","joule_ceiling_micro":null,"funds_ceiling":null},"parent_receipt_hash":"4ed29942f6a294bf03d422a1b76b93b7c0b84ff123b99ee2c26505649c68bdf6","signer_pubkey":"c84069fa2216c6edc1d52ca83aa11c267dd5440afa526090ca43ebd0ca86a9cf","signer_id":"did:example:http-vectors","sig":"3bf9989633f662d7084a06d5698c98bf112c81041b2060627a10d2da4a141e20e58cda96925718090d6bb4800b52dab8745f8ce2a368ce279bb9b88578ff7a0e","render":{"version":9,"media_sequence":1200,"discontinuity_sequence":0,"target_duration_s":4,"part_target_ms":320,"part_hold_back_ms":960,"can_block_reload":true,"end_list":true,"playlist_type":null,"independent_segments":false,"map_uri":null},"extras":[{"discontinuity":false,"gap":true,"program_date_time":"2026-10-01T12:00:00.000Z","parts":[],"layers":[],"preload_hint":null},{"discontinuity":false,"gap":false,"program_date_time":null,"parts":[],"layers":[],"preload_hint":null}]}
|