open-standards/wai/live-conformance/links/vectors.json
Transaction Science 3b8dadc058 live-contribution: the extension text, its independent verifier, and the reference tools' interop
wai/extensions/live-contribution.md profiles SRT and RIST onto a room's tracks
through the ingest gateway: the one-time session resource, the listener's
checks and codes, the gateway calling, RIST's port, CNAME and PSK; the
transports as the gateway runs them; the transport stream onto the tracks;
and the link record WCL1, its account, parts and chain, how a part and a
series are verified, the size bound, the refusals, and the RIST texts' patent
notices.

live-conformance/live_contribution_verify.py is written from that text alone,
standard library only, with mutation runs and dropped-check runs. The corpus
gains vectors that isolate each check the verifier found uncovered.

Interop with the reference tools, run locally as test peers (ignored unless
named by environment variables): their SRT caller and listener and RIST sender
and receiver of both profiles against joule-contrib, and their SRT caller and
RIST sender into the gateway with an encoder's H.264, HEVC and AAC, through
lossy paths. Two fixes they found: an SRT recovery margin is held to the
window, and no part is cut before the first sequence number resolves.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 23:12:45 -04:00

1104 lines
26 KiB
JSON

{
"format": "wai-live-contribution-links/1",
"hop": "ed6a47a39da869b5446155e40b2d93f1e3f0167be26732bae7a3ef9d8e3a3fd3",
"hop_seed": "5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c",
"reasons": [
"record_too_large",
"truncated",
"malformed",
"unknown_version",
"bad_key",
"bad_signature",
"link_invalid",
"account_invalid",
"runs_invalid",
"chain_broken",
"sequence_gap"
],
"vectors": [
{
"digest": "5cc1535476d42709b31643409dd1078484963cc6e38c973bad37e6413ee3278c",
"files": [
"srt_listener_clean.wcl1"
],
"kind": "part",
"name": "srt_listener_clean",
"note": "SRT, the gateway listening, AES-128: every packet at the first try",
"outcome": "accept",
"summary": {
"bytes": 52640,
"cipher": 128,
"delivered": 40,
"dropped": 0,
"ended": 0,
"first_try": 40,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 0,
"runs": 0,
"seq_count": 40,
"seq_first": 42,
"size": 575
}
},
{
"digest": "ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e",
"files": [
"srt_recovered.wcl1"
],
"kind": "part",
"name": "srt_recovered",
"note": "SRT: losses found and recovered within the window, one dropped",
"outcome": "accept",
"summary": {
"bytes": 40796,
"cipher": 128,
"delivered": 31,
"dropped": 1,
"ended": 0,
"first_try": 25,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 6,
"runs": 4,
"seq_count": 32,
"seq_first": 1000000,
"size": 655
}
},
{
"digest": "ea851e5651b0b68723d22e0996618eeb8166f2b1bc45815767cbfbdba6ad5829",
"files": [
"srt_last_outstanding.wcl1"
],
"kind": "part",
"name": "srt_last_outstanding",
"note": "a session of one part, its last: three sequence numbers outstanding when the caller shut down",
"outcome": "accept",
"summary": {
"bytes": 9212,
"cipher": 0,
"delivered": 7,
"dropped": 0,
"ended": 1,
"first_try": 6,
"last": true,
"mode": 1,
"outstanding": 3,
"part": 0,
"protocol": 1,
"recovered": 1,
"runs": 3,
"seq_count": 10,
"seq_first": 7,
"size": 635
}
},
{
"digest": "21ed51a4b79ec2d86233683b9ff9c19ad61e4b449c0910a2e2e02d2efe55c34d",
"files": [
"rist_simple.wcl1"
],
"kind": "part",
"name": "rist_simple",
"note": "RIST Simple Profile, in the clear (the profile has no encryption)",
"outcome": "accept",
"summary": {
"bytes": 19740,
"cipher": 0,
"delivered": 15,
"dropped": 1,
"ended": 0,
"first_try": 11,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 2,
"recovered": 4,
"runs": 2,
"seq_count": 16,
"seq_first": 65536,
"size": 615
}
},
{
"digest": "92d3a4fda607d02fae34a9222e923e981e83b823df8d8de6ae7eb5c07c37bed1",
"files": [
"rist_main_psk256.wcl1"
],
"kind": "part",
"name": "rist_main_psk256",
"note": "RIST Main Profile under PSK with a 256-bit key",
"outcome": "accept",
"summary": {
"bytes": 13160,
"cipher": 256,
"delivered": 10,
"dropped": 0,
"ended": 0,
"first_try": 8,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 3,
"recovered": 2,
"runs": 2,
"seq_count": 10,
"seq_first": 70000,
"size": 615
}
},
{
"digest": "3f96e8549fc72865290e5b1f7e2b96b1a7224619a338336b7da76636c4935fea",
"files": [
"srt_caller_aes192.wcl1"
],
"kind": "part",
"name": "srt_caller_aes192",
"note": "SRT, the gateway calling the publisher's listener, AES-192",
"outcome": "accept",
"summary": {
"bytes": 13160,
"cipher": 192,
"delivered": 10,
"dropped": 0,
"ended": 0,
"first_try": 9,
"last": false,
"mode": 2,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 1,
"runs": 1,
"seq_count": 10,
"seq_first": 9,
"size": 595
}
},
{
"digest": "5083887d3d099fc55b55d4a2744837ecc7ca1b4a5f522df341e74a63ce3d5f30",
"files": [
"tracks_not_begun.wcl1"
],
"kind": "part",
"name": "tracks_not_begun",
"note": "no group signed yet on either track: each head zero",
"outcome": "accept",
"summary": {
"bytes": 3948,
"cipher": 128,
"delivered": 3,
"dropped": 0,
"ended": 0,
"first_try": 3,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 0,
"runs": 0,
"seq_count": 3,
"seq_first": 5,
"size": 575
}
},
{
"digest": "a8a01e673ce99aefddcef7aa8602b5e0e7ba6e6b113c490d59650c0dd3089a71",
"files": [
"runs_truncated.wcl1"
],
"kind": "part",
"name": "runs_truncated",
"note": "more loss runs than a part lists: the first 512, marked truncated, the sums at most the part's",
"outcome": "accept",
"summary": {
"bytes": 1452864,
"cipher": 128,
"delivered": 1104,
"dropped": 0,
"ended": 0,
"first_try": 552,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 552,
"runs": 512,
"seq_count": 1104,
"seq_first": 100,
"size": 10815
}
},
{
"files": [
"too_large.wcl1"
],
"kind": "part",
"name": "too_large",
"note": "one byte past the largest record",
"outcome": "refuse",
"reason": "record_too_large"
},
{
"files": [
"truncated.wcl1"
],
"kind": "part",
"name": "truncated",
"note": "the signature's last byte missing",
"outcome": "refuse",
"reason": "truncated"
},
{
"files": [
"bad_magic.wcl1"
],
"kind": "part",
"name": "bad_magic",
"note": "not WCL1",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"trailing_byte.wcl1"
],
"kind": "part",
"name": "trailing_byte",
"note": "a byte after the signature",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"unknown_version.wcl1"
],
"kind": "part",
"name": "unknown_version",
"note": "version 2",
"outcome": "refuse",
"reason": "unknown_version"
},
{
"files": [
"bad_key.wcl1"
],
"kind": "part",
"name": "bad_key",
"note": "the hop's key is the identity point, of small order",
"outcome": "refuse",
"reason": "bad_key"
},
{
"files": [
"bad_signature.wcl1"
],
"kind": "part",
"name": "bad_signature",
"note": "a bit of the signature flipped",
"outcome": "refuse",
"reason": "bad_signature"
},
{
"files": [
"altered_count.wcl1"
],
"kind": "part",
"name": "altered_count",
"note": "a count changed after signing",
"outcome": "refuse",
"reason": "bad_signature"
},
{
"files": [
"protocol_unknown.wcl1"
],
"kind": "part",
"name": "protocol_unknown",
"note": "protocol 4",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"mode_unknown.wcl1"
],
"kind": "part",
"name": "mode_unknown",
"note": "mode 3",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"rist_simple_encrypted.wcl1"
],
"kind": "part",
"name": "rist_simple_encrypted",
"note": "the Simple Profile has no encryption, yet the cipher is 128",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"rist_main_aes192.wcl1"
],
"kind": "part",
"name": "rist_main_aes192",
"note": "PSK keys are 128 or 256 bits",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"srt_cipher_100.wcl1"
],
"kind": "part",
"name": "srt_cipher_100",
"note": "no such key length",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"last_without_reason.wcl1"
],
"kind": "part",
"name": "last_without_reason",
"note": "the last part names no reason the session ended",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"reason_without_last.wcl1"
],
"kind": "part",
"name": "reason_without_last",
"note": "a reason on a part that is not the last",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"reason_unknown.wcl1"
],
"kind": "part",
"name": "reason_unknown",
"note": "reason 9",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"empty_span.wcl1"
],
"kind": "part",
"name": "empty_span",
"note": "start equals end",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"no_window.wcl1"
],
"kind": "part",
"name": "no_window",
"note": "a window of 0 µs",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"first_part_with_parent.wcl1"
],
"kind": "part",
"name": "first_part_with_parent",
"note": "part 0 names a parent",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"later_part_without_parent.wcl1"
],
"kind": "part",
"name": "later_part_without_parent",
"note": "part 3 names none",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"tracks_unsorted.wcl1"
],
"kind": "part",
"name": "tracks_unsorted",
"note": "the tracks out of order",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"track_head_without_groups.wcl1"
],
"kind": "part",
"name": "track_head_without_groups",
"note": "a head with no group signed",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"track_zero_digest.wcl1"
],
"kind": "part",
"name": "track_zero_digest",
"note": "a track digest of zero",
"outcome": "refuse",
"reason": "link_invalid"
},
{
"files": [
"count_mismatch.wcl1"
],
"kind": "part",
"name": "count_mismatch",
"note": "delivered + dropped + outstanding is one short of the count",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"first_try_over_delivered.wcl1"
],
"kind": "part",
"name": "first_try_over_delivered",
"note": "more at the first try than delivered",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"outstanding_not_last.wcl1"
],
"kind": "part",
"name": "outstanding_not_last",
"note": "outstanding in a part that is not the last",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"recovery_samples.wcl1"
],
"kind": "part",
"name": "recovery_samples",
"note": "one recovery sample more than recovered",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"rtt_disordered.wcl1"
],
"kind": "part",
"name": "rtt_disordered",
"note": "the RTT's minimum above its median",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"rtt_empty_with_figures.wcl1"
],
"kind": "part",
"name": "rtt_empty_with_figures",
"note": "no RTT sample, yet figures",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"margin_past_window.wcl1"
],
"kind": "part",
"name": "margin_past_window",
"note": "a recovered packet's margin larger than the window",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"requested_below_requests.wcl1"
],
"kind": "part",
"name": "requested_below_requests",
"note": "requests naming fewer sequence numbers than there are requests",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"runs_overlap.wcl1"
],
"kind": "part",
"name": "runs_overlap",
"note": "two runs with no first-try packet between",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"run_outside.wcl1"
],
"kind": "part",
"name": "run_outside",
"note": "a run past the part's sequence numbers",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"run_empty.wcl1"
],
"kind": "part",
"name": "run_empty",
"note": "a run of no sequence number",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"run_overfull.wcl1"
],
"kind": "part",
"name": "run_overfull",
"note": "recovered and dropped more than the run holds",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"runs_short.wcl1"
],
"kind": "part",
"name": "runs_short",
"note": "the runs do not sum to the part's losses",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"truncated_not_full.wcl1"
],
"kind": "part",
"name": "truncated_not_full",
"note": "marked truncated with fewer runs than a part lists",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"run_overfull_alone.wcl1"
],
"kind": "part",
"name": "run_overfull_alone",
"note": "a run's recovered and dropped past its count, every sum still right",
"outcome": "refuse",
"reason": "runs_invalid"
},
{
"files": [
"recovery_disordered.wcl1"
],
"kind": "part",
"name": "recovery_disordered",
"note": "the recoveries' minimum above their median",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"recovery_empty_with_figures.wcl1"
],
"kind": "part",
"name": "recovery_empty_with_figures",
"note": "no recovery sample, yet a maximum",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"files": [
"tracks_past_bound.wcl1"
],
"kind": "part",
"name": "tracks_past_bound",
"note": "more track heads than a record holds",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"runs_past_bound.wcl1"
],
"kind": "part",
"name": "runs_past_bound",
"note": "513 runs listed",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"last_byte_two.wcl1"
],
"kind": "part",
"name": "last_byte_two",
"note": "a last flag of 2",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"truncated_byte_two.wcl1"
],
"kind": "part",
"name": "truncated_byte_two",
"note": "a truncated flag of 2",
"outcome": "refuse",
"reason": "malformed"
},
{
"files": [
"small_order_r.wcl1"
],
"kind": "part",
"name": "small_order_r",
"note": "the signature's R is the identity point, of small order",
"outcome": "refuse",
"reason": "bad_signature"
},
{
"files": [
"margin_without_recovery.wcl1"
],
"kind": "part",
"name": "margin_without_recovery",
"note": "a recovery margin with nothing recovered",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"digest": "a446a02d0a5566f3967dc8137005a1403eebabb29a6a378998bb35bfc6420c7d",
"files": [
"two_dropped.wcl1"
],
"kind": "part",
"name": "two_dropped",
"note": "two of four dropped, none recovered",
"outcome": "accept",
"summary": {
"bytes": 2632,
"cipher": 128,
"delivered": 2,
"dropped": 2,
"ended": 0,
"first_try": 2,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 0,
"runs": 1,
"seq_count": 4,
"seq_first": 42,
"size": 595
}
},
{
"files": [
"bytes_without_delivery.wcl1"
],
"kind": "part",
"name": "bytes_without_delivery",
"note": "bytes delivered with nothing delivered",
"outcome": "refuse",
"reason": "account_invalid"
},
{
"digests": [
"ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e",
"c46bca400aa3c9c103a62994eed84d938c6e51082f6898aecee8f272350d32ce",
"b281373cbf176c52ec7ab873b9da8bdb6cd58c1167fb1f4e72218b7a6273cbdc"
],
"files": [
"series_three_parts.0.wcl1",
"series_three_parts.1.wcl1",
"series_three_parts.2.wcl1"
],
"kind": "series",
"name": "series_three_parts",
"note": "a session of three parts, each chained to the one before, the last ended by DELETE",
"outcome": "accept",
"summaries": [
{
"bytes": 40796,
"cipher": 128,
"delivered": 31,
"dropped": 1,
"ended": 0,
"first_try": 25,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 6,
"runs": 4,
"seq_count": 32,
"seq_first": 1000000,
"size": 655
},
{
"bytes": 21056,
"cipher": 128,
"delivered": 16,
"dropped": 0,
"ended": 0,
"first_try": 15,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 1,
"protocol": 1,
"recovered": 1,
"runs": 1,
"seq_count": 16,
"seq_first": 1000032,
"size": 595
},
{
"bytes": 11844,
"cipher": 128,
"delivered": 9,
"dropped": 0,
"ended": 3,
"first_try": 9,
"last": true,
"mode": 1,
"outstanding": 1,
"part": 2,
"protocol": 1,
"recovered": 0,
"runs": 1,
"seq_count": 10,
"seq_first": 1000048,
"size": 595
}
]
},
{
"at": 0,
"files": [
"series_starts_late.0.wcl1",
"series_starts_late.1.wcl1"
],
"kind": "series",
"name": "series_starts_late",
"note": "a series whose first part is not part 0",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_wrong_parent.0.wcl1",
"series_wrong_parent.1.wcl1",
"series_wrong_parent.2.wcl1"
],
"kind": "series",
"name": "series_wrong_parent",
"note": "part 1 names another parent",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 2,
"files": [
"series_skips_a_part.0.wcl1",
"series_skips_a_part.1.wcl1",
"series_skips_a_part.2.wcl1"
],
"kind": "series",
"name": "series_skips_a_part",
"note": "part 1 then part 3",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_session.0.wcl1",
"series_other_session.1.wcl1"
],
"kind": "series",
"name": "series_other_session",
"note": "part 1 of another session",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_head_moved_without_groups.0.wcl1",
"series_head_moved_without_groups.1.wcl1"
],
"kind": "series",
"name": "series_head_moved_without_groups",
"note": "a track's head changed with no group signed since",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_track_dropped.0.wcl1",
"series_track_dropped.1.wcl1"
],
"kind": "series",
"name": "series_track_dropped",
"note": "a track of part 0 missing from part 1",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_part_after_last.0.wcl1",
"series_part_after_last.1.wcl1"
],
"kind": "series",
"name": "series_part_after_last",
"note": "a part after the session's last",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_sequence_gap.0.wcl1",
"series_sequence_gap.1.wcl1"
],
"kind": "series",
"name": "series_sequence_gap",
"note": "a sequence number between part 0 and part 1 accounted for by neither",
"outcome": "refuse",
"reason": "sequence_gap"
},
{
"at": 1,
"files": [
"series_time_gap.0.wcl1",
"series_time_gap.1.wcl1"
],
"kind": "series",
"name": "series_time_gap",
"note": "part 1 begins a microsecond after part 0 ended",
"outcome": "refuse",
"reason": "sequence_gap"
},
{
"at": 1,
"files": [
"series_other_hop.0.wcl1",
"series_other_hop.1.wcl1"
],
"kind": "series",
"name": "series_other_hop",
"note": "part 1 signed by another gateway",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_room.0.wcl1",
"series_other_room.1.wcl1"
],
"kind": "series",
"name": "series_other_room",
"note": "part 1 of another room",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_principal.0.wcl1",
"series_other_principal.1.wcl1"
],
"kind": "series",
"name": "series_other_principal",
"note": "part 1 of another owner",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_grant.0.wcl1",
"series_other_grant.1.wcl1"
],
"kind": "series",
"name": "series_other_grant",
"note": "part 1 under another grant",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_protocol.0.wcl1",
"series_other_protocol.1.wcl1"
],
"kind": "series",
"name": "series_other_protocol",
"note": "part 1 of another protocol",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_mode.0.wcl1",
"series_other_mode.1.wcl1"
],
"kind": "series",
"name": "series_other_mode",
"note": "part 1 says the gateway called",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_cipher.0.wcl1",
"series_other_cipher.1.wcl1"
],
"kind": "series",
"name": "series_other_cipher",
"note": "part 1 under another key length",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_other_window.0.wcl1",
"series_other_window.1.wcl1"
],
"kind": "series",
"name": "series_other_window",
"note": "part 1 with another window",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"at": 1,
"files": [
"series_track_alias_changed.0.wcl1",
"series_track_alias_changed.1.wcl1"
],
"kind": "series",
"name": "series_track_alias_changed",
"note": "a track's receipt chain changed",
"outcome": "refuse",
"reason": "chain_broken"
},
{
"digests": [
"ebf32e01c2ad06441e573c0e8506602be52abd222170b09dc44bdcd85aaffa7e",
"74a07b60ada43de0c44f22dfe3e0eab42fcb8167a9f7e1e32479a64235ddfcd1",
"6d142f165bf08fb9710829861ffb971dab0adfa7a18bded95259d604bcc34f37"
],
"files": [
"series_track_added.0.wcl1",
"series_track_added.1.wcl1",
"series_track_added.2.wcl1"
],
"kind": "series",
"name": "series_track_added",
"note": "a track that begins in part 1, named again in part 2",
"outcome": "accept",
"summaries": [
{
"bytes": 40796,
"cipher": 128,
"delivered": 31,
"dropped": 1,
"ended": 0,
"first_try": 25,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 0,
"protocol": 1,
"recovered": 6,
"runs": 4,
"seq_count": 32,
"seq_first": 1000000,
"size": 655
},
{
"bytes": 21056,
"cipher": 128,
"delivered": 16,
"dropped": 0,
"ended": 0,
"first_try": 15,
"last": false,
"mode": 1,
"outstanding": 0,
"part": 1,
"protocol": 1,
"recovered": 1,
"runs": 1,
"seq_count": 16,
"seq_first": 1000032,
"size": 675
},
{
"bytes": 11844,
"cipher": 128,
"delivered": 9,
"dropped": 0,
"ended": 3,
"first_try": 9,
"last": true,
"mode": 1,
"outstanding": 1,
"part": 2,
"protocol": 1,
"recovered": 0,
"runs": 1,
"seq_count": 10,
"seq_first": 1000048,
"size": 675
}
]
}
]
}