k6 engine-fit result
- Date: 2026-09-21
- Engine: k6 v2.2.0, Linux amd64
- Archive SHA-256:
b5a8003c86f35f5cd5ceef1490312c48e587696c94d998cefc6d7b3b4cb1597d
LiteTraffic ran the checkout, inventory, and reporting scenarios through the official k6 binary using native JSON metric output and --console-output. The controller parsed only versioned LT_EVENT records, assigned collector-side sequence numbers, and independently reconciled delivered iterations with the manifest plan.
Measured conformance
| Target | Planned / delivered journeys | HTTP requests | Intended assertion | Verdict |
|---|---|---|---|---|
| Correct idempotent payment server | 12 / 12 | 36 | one_effect_per_payment passed 12/12 |
pass |
| Broken duplicate-on-retry server | 12 / 12 | 36 | one_effect_per_payment failed |
fail |
| Correct atomic inventory server | 8 / 8 | 40 | Four inventory assertions passed 8/8 | pass |
| Broken overselling inventory server | 8 / 8 | 40 | Negative inventory and excess acceptance detected | fail |
| Correct sales report server | 6 / 6 | 6 | Totals, rows, regions, and response assertions passed 6/6 | pass |
| Fast but partial sales report server | 6 / 6 | 6 | Incorrect total, missing row, and missing region detected despite HTTP 200 | fail |
| Sustained-burst sales report server | 19 / 19 | 19 | Ramp, plateau, and recovery schedule preserved complete evidence | pass |
| Three-seed reporting series | 18 / 18 total | 18 | Seeds 42–44 produced three consistent complete passes | pass, consistent |
| Controlled latency comparison | 200 / 200 per run | 200 per run | p95 increased 5.675 ms → 20.693 ms; 20% gate detected +264.634% | fail, regression |
| Correct final ledger observation | 6 / 6 | 6 + 1 observer | Journey assertions and final fixture assertion passed | pass |
| Wrong final ledger observation | 6 / 6 | 6 + 1 observer | Journey assertions passed; final fixture assertion detected wrong persisted total | fail |
| Run-owned reporting fixture | 6 / 6 | 6 + 1 observer + 2 lifecycle | Fixture created, scoped through journey/observer, then deleted | pass |
| Run-owned fixture with wrong ledger | 6 / 6 | 6 + 1 observer + 2 lifecycle | Final assertion failed; fixture still deleted | fail |
| E2B external target | 4 / 4 | 4 | Seeded spiky profile reached a short-lived sandbox through its exposed HTTPS port | pass |
| Correct cached search | 12 / 12 | 84 + 1 observer + 2 lifecycle | Hot/cold reads and all post-update reads passed | pass |
| Permanently stale cache | 12 / 12 | 84 + 1 observer + 2 lifecycle | Journey and final observer detected the stale hot key | fail |
| Correct tenant isolation | 10 / 10 | 30 + 1 observer + 2 lifecycle | Both identities read their own overlapping local ID; cross-tenant read blocked | pass |
| Cross-tenant leak | 10 / 10 | 30 + 1 observer + 2 lifecycle | Tenant A read tenant B’s local record ID | fail |
| Deny-all tenant API | 10 / 10 | 30 + 1 observer + 2 lifecycle | Isolation check passed but both required positive reads failed | fail |
| Real k6 timeout probe | 1 planned / incomplete | 0 | One pre-timeout event preserved | inconclusive, timed_out |
The negative targets still returned valid HTTP responses. Their failures came from observed business state rather than an HTTP error shortcut.
Scheduling finding
Separate back-to-back constant-arrival-rate scenarios produced 14 iterations for a 12-journey plan because admissions occurred at phase boundaries. A single ramping-arrival-rate scenario produced 11 when the total integral ended exactly on the final boundary. k6 admits journey n when the arrival integral reaches n, so the last planned journey lands exactly on the final boundary and races the executor stop. An earlier fix added one millisecond per stage, which over-admitted at high rates (2,001 journeys for a 1-second, 2,000/s plan). The bundled runtime now keeps each phase at its exact duration and appends one 500 ms tail at 1 journey/s: that adds half a journey to the integral, so the final planned admission gets 500 ms of headroom and no extra journey is ever reached. tests/test_k6_schedule.py checks exact admission under real k6 for single- and multi-phase schedules at 1, 7, 100 and 2,000 journeys/s, including zero-rate phases. LiteTraffic treats any future delivered/planned mismatch as inconclusive.
Proven boundary
This validates stock-k6 subprocess execution, process-group timeout termination, direct-SIGINT cancellation with shell status 130, partial-evidence finalization, structured console framing, JSONL metrics, complete assertion capture, schedule reconciliation, seeded spiky and random-burst profiles, ramp/plateau/recovery sustained bursts, repeated-seed summaries, compatible-run checks, latency regression gates, stateful idempotency, finite-resource contention, report completeness, read-only final observation, run-owned HTTP fixture creation and cleanup, E2B external-target execution, and self-contained HTML reports. Engine-crash, timeout, and cancellation cleanup behavior is covered by executable tests. It does not yet validate long-duration event loss, memory ceilings, E2B sandbox provisioning, host-crash cleanup, or an observer plugin interface.
The release archive came from the official grafana/k6 v2.2.0 release. The binary remains an external prerequisite and is not redistributed by LiteTraffic.
Rendered from the core repository. View this page on GitHub