> Stalls, with the whole machine across each (each run's `machine.csv`):
>
> run 4 stall: rtorrent progress 10705 ms at 21:31:33Z; the machine: H: 100% busy, queue 30, 8 MB/s
> run 5 stall: rtorrent progress 5954 ms at 21:33:04Z; the machine: H: 100% busy, queue 10, 54 MB/s

# Race: stock, tracker lag T = 5 s

5 runs; every cell is `median [min-max]` over the runs that produced the number, and every run's own value is in `summary.json`. 1024 MiB private-flag fixture, 2 uploaders, upload slots opened, no stated rate cap, content on H:, every racer added in the same second.

| Client | Configuration | Announce OK (s) | Announce OK after its fetch (ms) | Announces in 1st min | First peer (s) | First bytes (s) | First verified piece (s) | Complete (s) | Upload share @60 s | Upload share @end |
|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| `rbittorrent` | stock | 7.03 [7.03-7.03] | 7023.24 [7021.65-7026.33] | 4 | 7.04 [7.04-7.08] | 7.14 [7.04-7.16] | 7.14 [7.04-7.16] | 14.3 [8.12-15.8] | 100% | 100% |
| `qbittorrent` | stock | - | - | 1 | - | - | - | - | 0% | 0% |
| `deluge` | stock | - | - | 1 | - | - | - | - | 0% | 0% |
| `rtorrent` | stock | 14.5 [14.3-15] | 14458.14 [14254.16-14982.94] | 4 | 14.6 [14.4-15.3] | 14.6 [14.5-15.3] | 14.6 [14.5-15.3] | 20.9 [18-33.9] | 0% | 0% |

`-` is not measured, never zero; `(n/of)` is how many runs produced the number.

Announce OK runs from the race's start, so it carries the order the racers were added in, which changes every run. Announce OK after its fetch starts each client's clock at its own `.torrent` fetch from the harness, so it compares what the clients themselves did; `-` for a client handed the file another way.

First peer, first bytes and first verified piece are read from the client's own poll, every 10 ms until the first verified piece (100 ms after), so they carry up to 10 ms of poll grid. First bytes is the first poll with any downloaded bytes. First verified piece is the first poll at which the client's OWN count of pieces past the hash check was above zero, read from the field named below; never its progress, which counts finished blocks for some clients and verified bytes for others.

- `rbittorrent`: first verified piece read from `pieces_verified`
- `qbittorrent`: first verified piece read from `torrents/properties pieces_have`
- `deluge`: first verified piece read from `pieces`
- `rtorrent`: first verified piece read from `d.completed_chunks`

## The product's add, phase by phase

Milliseconds per add, `median [min-max]` over the runs that produced the line. `Since clock start` is the time from the product's add clock to that mark; `Phase` is the stretch since the mark before it. The clock starts when `whole add` is the clock's total, the product's own time for the add, engine add included.

| Client | Path | Mark | Since clock start (ms) | Phase (ms) |
|---|---|---|---:|---:|
| `rbittorrent` | route | whole add | 0.535 [0.312-0.764] | - |
| `rbittorrent` | route | route_read | 0.03 [0.021-0.033] | 0.03 [0.021-0.033] |
| `rbittorrent` | route | fetch_asked | 0.074 [0.048-0.081] | 0.044 [0.027-0.048] |
| `rbittorrent` | route | refused_before_fetching | 0.496 [0.286-0.726] | 0.415 [0.238-0.654] |
| `rbittorrent` | route | answered_pending | 0.496 [0.286-0.727] | 0 [0-0.001] |
| `rbittorrent` | applier | whole add | 3.514 [2.983-4.799] | - |
| `rbittorrent` | applier | queued | 0.504 [0.313-1.132] | 0.504 [0.313-1.132] |
| `rbittorrent` | applier | finishing | 0.504 [0.313-1.133] | 0 [0-0.001] |
| `rbittorrent` | applier | preflight | 0.559 [0.357-1.52] | 0.068 [0.044-0.729] |
| `rbittorrent` | applier | source_read | 0.611 [0.418-1.577] | 0.053 [0.047-0.061] |
| `rbittorrent` | applier | located | 0.69 [0.498-1.723] | 0.079 [0.06-0.146] |
| `rbittorrent` | applier | room_nothing_there | 0.741 [0.597-1.822] | 0.099 [0.051-0.099] |
| `rbittorrent` | applier | room_needed | 0.741 [0.597-1.822] | 0 [0-0] |
| `rbittorrent` | applier | room_cached_look | 0.741 [0.598-1.822] | 0 [0-0.001] |
| `rbittorrent` | applier | room_probe_locked | 0.741 [0.598-1.822] | 0 [0-0.001] |
| `rbittorrent` | applier | room_probe_read | 0.771 [0.665-1.887] | 0.067 [0.03-0.087] |
| `rbittorrent` | applier | room_probed | 0.773 [0.669-1.898] | 0.004 [0.002-0.011] |
| `rbittorrent` | applier | room_checked | 0.774 [0.671-1.9] | 0.002 [0.001-0.002] |
| `rbittorrent` | applier | engine_added | 2.494 [2.05-3.91] | 1.629 [1.379-2.405] |
| `rbittorrent` | applier | started | 2.5 [2.055-3.916] | 0.006 [0.005-0.007] |
| `rbittorrent` | applier | marker | 2.504 [2.059-3.92] | 0.004 [0.004-0.004] |
| `rbittorrent` | applier | rows_written | 3.001 [2.434-4.347] | 0.427 [0.375-0.497] |
| `rbittorrent` | applier | buckets_filed | 3.119 [2.499-4.412] | 0.071 [0.065-0.118] |
| `rbittorrent` | applier | announced | 3.148 [2.543-4.456] | 0.044 [0.029-0.052] |
| `rbittorrent` | applier | published | 3.511 [2.979-4.796] | 0.363 [0.34-0.436] |


## The upload ledger, both witnesses

The tracker's last `uploaded=` per passkey against that client's own polls either side of that announce, per run (a `stopped` announce's later side is the closing poll taken just before the client is stopped, plus what the client's own reported upload rate allows since its API last changed, at most 2 s: an API that publishes a snapshot reads behind the live counter the announce carries). Agreement is the announced value inside the bracket; a disagreement is printed with its distance outside it.

| Client | Runs where they disagreed | Worst disagreement (bytes) |
|---|---:|---:|
| `rbittorrent` | 0 | 0 |
| `qbittorrent` | 0 | 0 |
| `deluge` | 0 | 0 |
| `rtorrent` | 0 | 0 |

