- Use miette's NamedSource and SourceSpan for precise error locations
- Implement field-level validation (mode, payload, iters, concurrency)
- Show exact line and field causing validation errors in CLI output
- Add tokio::Semaphore for bounded parallelism
- Split benchmark into sequential warmup and parallel measured phases
- Refactor to spawn_benchmark_tasks() and spawn_single_iteration()
- Add write_results() to aggregate and output records
- Use u32 for CLI arguments (iters, warmup, concurrency, payload_bytes)
- Update server and runner to use X25519MLKEM768 kx group from aws_lc_rs
- Both --mode x25519 and --mode x25519mlkem768 now work
- Integration tested end-to-end with both modes