### The contribution link record has its own magic, `WLK1`

- **Wire change.** The contribution link record ([extensions/live-contribution.md](extensions/live-contribution.md)
  §6.2) begins `WLK1`, no longer `WCL1`. The clip record of live-recording §5.1 had `WCL1` first; the link record,
  added later, took the same four bytes, so a reader that tells records apart by their magic could not tell a link
  record from a clip record, and the registry listed `WCL1` for the clip record alone. `WCL1` stays the clip
  record's. A link record written before this change is `malformed` to a reader of this revision (§6.5 step 2), as a
  new one is to a reader of the earlier revision; the signature's domain, `wai:contrib-link` 0x01, and every other
  field are unchanged.
- **The registry** lists `WLK1` as a magic of live-contribution §6.2 (REGISTRY.md and `codecs/registry.rs`).
- **The corpus** [`live-conformance/links/`](live-conformance/links/) is regenerated with the new magic, each vector
  file now `.wlk1`, and gains `clip_record_magic`: a part that bears the clip record's magic, refused `malformed`.
  `live_contribution_verify.py` reads `WLK1`, and requires that a copy of each accepted part given the clip record's
  magic is refused. `joule-moq-ingest` writes and reads `WLK1` (`linkrec::MAGIC`).
- **The reverse:** a record with the link record's magic is not a clip record. The live-recording corpus
  [`live-conformance/recordings/`](live-conformance/recordings/) gains the clip `link_record_magic`: chunk 4's clip
  record beginning `WLK1` and signed under it, refused `malformed` at the clip (live-recording §5.2, which now names
  `WLK1` among the other magics). `live_record_verify.py` requires the same refusal of a copy of each accepted clip
  given `WLK1`.
- **Breaking:** the corpus's index names the new files, and the files under the old magic are gone:
  `record:corpus:wai/live-conformance/links/vectors.json`,
  `record:corpus:wai/live-conformance/links/altered_count.wcl1`,
  `record:corpus:wai/live-conformance/links/bad_key.wcl1`,
  `record:corpus:wai/live-conformance/links/bad_magic.wcl1`,
  `record:corpus:wai/live-conformance/links/bad_signature.wcl1`,
  `record:corpus:wai/live-conformance/links/bytes_without_delivery.wcl1`,
  `record:corpus:wai/live-conformance/links/count_mismatch.wcl1`,
  `record:corpus:wai/live-conformance/links/empty_span.wcl1`,
  `record:corpus:wai/live-conformance/links/first_part_with_parent.wcl1`,
  `record:corpus:wai/live-conformance/links/first_try_over_delivered.wcl1`,
  `record:corpus:wai/live-conformance/links/last_byte_two.wcl1`,
  `record:corpus:wai/live-conformance/links/last_without_reason.wcl1`,
  `record:corpus:wai/live-conformance/links/later_part_without_parent.wcl1`,
  `record:corpus:wai/live-conformance/links/margin_past_window.wcl1`,
  `record:corpus:wai/live-conformance/links/margin_without_recovery.wcl1`,
  `record:corpus:wai/live-conformance/links/mode_unknown.wcl1`,
  `record:corpus:wai/live-conformance/links/no_window.wcl1`,
  `record:corpus:wai/live-conformance/links/outstanding_not_last.wcl1`,
  `record:corpus:wai/live-conformance/links/protocol_unknown.wcl1`,
  `record:corpus:wai/live-conformance/links/reason_unknown.wcl1`,
  `record:corpus:wai/live-conformance/links/reason_without_last.wcl1`,
  `record:corpus:wai/live-conformance/links/recovery_disordered.wcl1`,
  `record:corpus:wai/live-conformance/links/recovery_empty_with_figures.wcl1`,
  `record:corpus:wai/live-conformance/links/recovery_samples.wcl1`,
  `record:corpus:wai/live-conformance/links/requested_below_requests.wcl1`,
  `record:corpus:wai/live-conformance/links/rist_main_aes192.wcl1`,
  `record:corpus:wai/live-conformance/links/rist_main_psk256.wcl1`,
  `record:corpus:wai/live-conformance/links/rist_simple.wcl1`,
  `record:corpus:wai/live-conformance/links/rist_simple_encrypted.wcl1`,
  `record:corpus:wai/live-conformance/links/rtt_disordered.wcl1`,
  `record:corpus:wai/live-conformance/links/rtt_empty_with_figures.wcl1`,
  `record:corpus:wai/live-conformance/links/run_empty.wcl1`,
  `record:corpus:wai/live-conformance/links/run_outside.wcl1`,
  `record:corpus:wai/live-conformance/links/run_overfull.wcl1`,
  `record:corpus:wai/live-conformance/links/run_overfull_alone.wcl1`,
  `record:corpus:wai/live-conformance/links/runs_overlap.wcl1`,
  `record:corpus:wai/live-conformance/links/runs_past_bound.wcl1`,
  `record:corpus:wai/live-conformance/links/runs_short.wcl1`,
  `record:corpus:wai/live-conformance/links/runs_truncated.wcl1`,
  `record:corpus:wai/live-conformance/links/series_head_moved_without_groups.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_head_moved_without_groups.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_cipher.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_cipher.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_grant.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_grant.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_hop.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_hop.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_mode.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_mode.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_principal.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_principal.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_protocol.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_protocol.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_room.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_room.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_session.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_session.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_window.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_other_window.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_part_after_last.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_part_after_last.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_sequence_gap.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_sequence_gap.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_skips_a_part.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_skips_a_part.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_skips_a_part.2.wcl1`,
  `record:corpus:wai/live-conformance/links/series_starts_late.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_starts_late.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_three_parts.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_three_parts.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_three_parts.2.wcl1`,
  `record:corpus:wai/live-conformance/links/series_time_gap.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_time_gap.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_added.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_added.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_added.2.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_alias_changed.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_alias_changed.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_dropped.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_track_dropped.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_wrong_parent.0.wcl1`,
  `record:corpus:wai/live-conformance/links/series_wrong_parent.1.wcl1`,
  `record:corpus:wai/live-conformance/links/series_wrong_parent.2.wcl1`,
  `record:corpus:wai/live-conformance/links/small_order_r.wcl1`,
  `record:corpus:wai/live-conformance/links/srt_caller_aes192.wcl1`,
  `record:corpus:wai/live-conformance/links/srt_cipher_100.wcl1`,
  `record:corpus:wai/live-conformance/links/srt_last_outstanding.wcl1`,
  `record:corpus:wai/live-conformance/links/srt_listener_clean.wcl1`,
  `record:corpus:wai/live-conformance/links/srt_recovered.wcl1`,
  `record:corpus:wai/live-conformance/links/too_large.wcl1`,
  `record:corpus:wai/live-conformance/links/track_head_without_groups.wcl1`,
  `record:corpus:wai/live-conformance/links/track_zero_digest.wcl1`,
  `record:corpus:wai/live-conformance/links/tracks_not_begun.wcl1`,
  `record:corpus:wai/live-conformance/links/tracks_past_bound.wcl1`,
  `record:corpus:wai/live-conformance/links/tracks_unsorted.wcl1`,
  `record:corpus:wai/live-conformance/links/trailing_byte.wcl1`,
  `record:corpus:wai/live-conformance/links/truncated.wcl1`,
  `record:corpus:wai/live-conformance/links/truncated_byte_two.wcl1`,
  `record:corpus:wai/live-conformance/links/truncated_not_full.wcl1`,
  `record:corpus:wai/live-conformance/links/two_dropped.wcl1`,
  `record:corpus:wai/live-conformance/links/unknown_version.wcl1`.

