04bbb4e3e9
Two coupled bugs in our endpoint that the runner just surfaced: 1. The runner mounts \$CLIENT_DOWNLOADS to /downloads as a Docker volume (per quic-interop-runner's docker-compose.yml `client.volumes`). There is no DOWNLOADS env var. Our endpoint was reading \$DOWNLOADS, getting null, and (for handshake/chacha20) skipping any download path. Hard-code /downloads. 2. The handshake / chacha20 / handshakeloss testcases don't just verify the handshake completes — they also require the requested file at /downloads/<basename>. The runner's _check_files validator reported "Missing files: ['intense-tremendous-firefighter']" while our client side reported `handshake ok`. Route handshake-flavor testcases through runTransferTest so the full H3 GET pipeline runs. `chacha20` keeps the cipher-suite override (ChaCha20-only ClientHello); `handshakeloss` reuses the same H3 flow against a lossy sim. Also drops the now-dead runHandshakeTest + parseFirstTarget helpers. https://claude.ai/code/session_01HcvfQq1ttPV9PkRoJb4nyT