- 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]>
13 lines
456 B
Text
13 lines
456 B
Text
#EXTM3U
|
|
#EXT-X-VERSION:9
|
|
#EXT-X-TARGETDURATION:4
|
|
#EXT-X-PART-INF:PART-TARGET=0.320
|
|
#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=0.960
|
|
#EXT-X-MEDIA-SEQUENCE:1200
|
|
#EXT-X-PROGRAM-DATE-TIME:2026-10-01T12:00:00.000Z
|
|
#EXT-X-GAP
|
|
#EXTINF:3.840,
|
|
../objects/9de886a61b983bfcb8118ec313551c5af730a176180151756f8071fbb7d5f716.wai#n=16606
|
|
#EXTINF:3.840,
|
|
../objects/63c08b05659fd758074ff41a1378a391b7d449b0010a4ddd1894efb60026bb17.wai#n=19118
|
|
#EXT-X-ENDLIST
|