### Contribution links: a packet taken after its sequence number's drop point is late, whatever the timer did

- **[live-contribution](extensions/live-contribution.md) §6.1:** a packet *arrives* when the receiver takes it. An
  SRT packet that arrives at or after its own delivery time, before the first packet after it that has arrived is
  due, has not been dropped (§4.1): it is delivered at once and is **recovered**, with a margin of 0. One that
  arrives at or after that point is **late**, whether or not the receiver had dropped its sequence number before
  taking it. **§6.2:** `margin_min` counts such a packet's margin as 0. **§6.3:** an SRT recovery is not bounded by
  `window`. **§5.3 and §6.8:** a recovered packet is on time only with a margin above 0; the record does not count
  the SRT packets recovered after their delivery time, nor say when a packet delivered at the first try was taken.
  The verifier's rules and the corpus are unchanged.
- The reference SRT and RIST receivers resolve what has fallen due before they take each packet. Before, a
  retransmission taken after its drop point with no timer tick between was delivered as recovered with a margin of
  0, and with a tick between it was dropped and counted late. Unit tests now drive each receiver on a clock of their
  own through every case.
- The reference SRT receiver's timer runs an ACK period (10 ms) after it last ran. It was counted from the last
  datagram, so while datagrams came closer together than that it did not run until the first packet held fell due:
  in a link's first window it sent no full ACK and no periodic NAK, and a packet whose first NAK or retransmission was
  lost went unrequested until that window was nearly over.
- A recovered packet still held when a link ends keeps its margin, the time it arrived before its delivery time; it
  was recorded as 0, which read as a recovery after the delivery time.
- `joule-contrib`'s SRT link tests over a lossy path use a window of a second, and no longer bound the recovery time,
  which counts from when a packet was found missing and is not a property of the protocol (§6.3); the receivers' unit
  tests now find each gap away from the clock's origin, so a recovery counted from anywhere else fails them. The tests
  still require a margin above 0, the end-to-end sign that every packet recovered was taken before its own delivery
  time. Their failure in CI (nothing dropped, every payload whole and in order, the recovery or the margin out of
  bounds) fits the ordering defect above, a busy runner's lag (the receiving task hundreds of milliseconds behind its
  socket), or both, with the starved timer lengthening the first window's recoveries; the part was not printed, so
  which cannot be told. The assertions now print it. The caller that receives is held to the same account, and to its
  latency window.

