b58b2d8f95
A folder upload with several large files could appear frozen for ~2 min: a few concurrent uploads stalled and the old 120s per-file timeout neither aborted the request (leaving zombie XHRs that exhaust the browser's per-host connection pool) nor recovered quickly. - uploadFileWithProgress now self-aborts on a stalled connection: the deadline resets on every upload-progress tick (a slow but *moving* transfer is fine), and once the body is sent the server gets a fixed window to respond; on a stall xhr.abort() frees the connection immediately — no zombie, no cascade. - Lower upload concurrency 4 -> 3 to reduce server contention from large concurrent uploads. - The outer per-file timeout is now just a generous backstop for a wedged delta worker / by-hash request. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>