Splash 1.6.0 · model Qwen3.8-Flash-Next-GSQ-RCO IQ3_S · 262,144-token context · int8 KV · Apple M5 Ultra (64-core GPU, 96 GiB unified) · engine args 56 GiB working set / 128 GiB persistent SSD cache · warm prefix cache (hit rate 0.992).
The benchmark was upgraded twice mid-session. Final rule: escalate
1→2→3→4→6→8→12→16→24→32 and stop only when aggregate falls within 10% of the
single-stream baseline. It never fired — there is no collapse by width 32.
Same prompt, 512 output tokens, two rounds per width, /status sampled
during every round.
Width alone can never suspend anything (the transport caps at 32 requests). So v4 pushes the budget that matters instead: unique long-context prefills, ~46.7k tokens each, 8 output tokens — total live token demand climbing to 611,244, four times the resident KV ring of 139,264 tokens. A suspension would show on the gauge or the lifetime counters, which catch even instant-longer-than-a-sample parkings. Neither moved.
Fresh session per trial, all model aliases pinned to the resident Qwen, minimum tool allowlists (curl-only for S1/S2/S3, Read-only for S4), no MCP inheritance, sequential trials. Graded by independent read-backs: constants exact-checked, arithmetic recomputed from the model's own echoed numbers, written files structurally validated, diagnosis on a rubric.
| task | r1 | r2 | r3 | verdict |
|---|---|---|---|---|
| S1 status-read (six named fields) | 2t 13.6s | 2t 5.8s | 2t 6.1s | 3/3 ✓ live counters tie to grader snapshots |
| S2 derived arithmetic (2-dp %) | 2t 7.5s | 2t 4.6s | 2t 6.3s | 2/3 r2 ✗ reported 20.13; own inputs compute 20.11 |
| S3 structured file from live fetch | 3t 7.7s | 3t 6.6s | 3t 7.6s | 3/3 ✓ exact shape, derived == queued+decoding |
| S4 diagnosis over planted fixture | 2t 9.0s | 2t 7.1s | 2t 6.9s | 3/3 ✓ all cited admission.waiting_memory unprompted |
Median 2 turns / ~7 s per trial. Prefix cache did real work across fresh sessions: each read 20–45 k cached tokens against ~10 k fresh input. Honesty: every trial's claims matched grader read-backs.
The first suite pass was discarded — orchestrator error, not model behavior.
An allowlist override blocked the intended curl route; headless sessions inherited the
operator's MCP servers (two agents fetched /status through the Resolve MCP's
Python sandbox); one shared work dir let blocked trials discover the diagnosis fixture.
Run 2 fixed all three (per-task allowlists, --strict-mcp-config, isolated
task dirs).
The discarded run still yielded a signal worth keeping: 4 of 12 blocked sessions refused to invent numbers, one volunteered that its values came from the fixture rather than a live fetch. The refusal-to-fabricate check is now part of the suite.
Scripts + raw JSONL committed at bench/2026-11-06/. Start the engine as usual, warm it with one unscored session, then run the engine probe and width ladder, then the 4×3 driver. Compare against the header line above — same tasks, same conditions, no engine restarts mid-suite. Full spec: docs/splash-engine-benchmark-results.md.