Connection migration
Start the downloads, then switch your phone's network (Wi-Fi → cellular or back). HTTP/3 keeps going. TCP can't — its connection is named by your IP address, and that just changed.
HTTP/3 not detected — test from cellular
(home Wi-Fi hairpin breaks UDP). The HTTP/2 leg still shows the TCP death.
HTTP/3
HTTP/2
Timeline
The HTTP/2 leg restarts from zero because that is what a plain request does when its TCP connection dies. Real apps can resume with HTTP Range requests — application code doing the transport's job. The HTTP/3 leg needs no such help. "True connection migration ✓" appears only when the server's qlog shows the same QUIC connection surviving the address change; otherwise an h3 recovery is labeled a reconnect.