- 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":"b6e2d55ea619bd811d877d9098ad02edf6d70de7823de8c1c876b41e202d133e","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":"532a6470fd1df4eb9eca528cb34215932108c4da3fde179d6cbaa3b91c296b1c","signer_pubkey":"c84069fa2216c6edc1d52ca83aa11c267dd5440afa526090ca43ebd0ca86a9cf","signer_id":"did:example:http-vectors","sig":"f4e778d20184fa490c5e0d89da546a9131dbbf9c9f16edc5b0f845f80687103ca6fff7ea16c5d847bb667a26c1fe8adf44b10dcc1b9d54849939ff9f22fd890d","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":false,"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}]}
|