Four test shapes replacing single/multi:
- Streamer: many parallel 100GB streams, origin-pooled
- Video: single-connection 100GB pull
- Burst: many concurrent small 8MB requests
- Download: segmented ranged download across connections
Gauge now shows a ~1s EMA of throughput; raw samples still feed
steady-state detection and final stats.
fix: working stop button, staged submit flow with upload test
Stop crashed on an undeclared stopRequested variable before doing
anything. Split the single Start/Stop toggle into separate Submit and
Stop buttons, add a Download > Upload > Results stage machine, an
/upload discard endpoint, upload workers, and partial-result finalization
on stop.
feat: single/multi modes, 100GB steady-state test with origin pooling
- Replace auto/manual modes with Single (one stream) and Multi
(streams pooled across loopback origins via CORS)
- BYOB 1MiB reads, time-gated stall re-arm, 50ms progress posts
- Steady detection over 2s windows, 30s floor run
- no-cache static assets + cache-busted worker URLs
feat: single-phase sweep with UUIDv7 cache-busting
- download-worker.js: RFC 9562 UUIDv7 generator; every /download
request carries ?uuid= so no cache layer can serve a repeat;
plain GET mode for auto-tune, ranged mode kept for Manual
- tune-worker.js: warmup and confirmation phases removed - the
stream-count sweep is the whole test, and the winning step's
steady median is the headline number
- guard against all-zero signals passing as steady (dead worker
starts now mark STALLED and cannot anchor the sweep)
- manual run duration fixed to use per-stream results
feat: worker-based ranged downloads with connection auto-tune
- /download serves any byte range of a 1 TB virtual file (sendfile,
repeated binary); new /hold endpoint for browser cap detection
- download-worker.js: per-stream worker pulling endless ranges with
stall watchdog and graceful stop
- tune-worker.js: auto-tune off the UI thread - warmup, stream-count
sweep, confirmation; steps end on steady-state detection (median
window within 2%) with max-time fallback; one 100 GB range per
stream so request overhead stays out of the measurement
- app.js: Auto-tune/Manual modes, wave-based connection cap probe,
gauge integration, verdict + per-step results
feat: download speed meter with parallel chunk testing