You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Per-scenario tables, version-trajectory shape. Headline cells fingerprinted
to linux-x86_64 (Intel Core i7-6700HQ 4-core / 15 GB / ext4 / rustc 1.97.0) —
see METHODOLOGY.md for the hardware contract and why
cross-machine comparisons need like-for-like.
How to read this file
Each scenario gets its own section with:
A one-paragraph overview of what dispatch shape the scenario stresses
and which class of regression it catches.
A table per mode (full and changed) with rows = version (newest
first), columns = size (1k / 10k / 100k / 1M). Cells are
mean ± stddev, formatted in ms below 1 s and seconds above.
— means the version was not measured at that size.
n/a means the scenario didn't exist at the tag.
Significant deltas (anything > 20 % across a release) get an investigation
write-up under investigations/<YYYY-MM-topic>/ that
captures the diagnostic data (traces, flamegraphs, bisect notes).
Source of truth. This file is generated by
xtask/scripts/render-history.py after every release. The bench-record.yml
workflow's PR includes the per-cell numbers for the maintainer to verify
before merging — see ../../RELEASING.md.
Cross-version headline trajectory
1M cells across the most-stressed scenarios. S3 is the realistic-monorepo
anchor; S7 is the cross-file-relational cliff that v0.9.5's path-index fix
didn't fully cover (and v0.9.8 targets directly); S9 is the nested-polyglot
scenario the v0.9.6 scope_filter: primitive exists for.
Version
Date
1M S3 full
1M S6 full
1M S7 full
1M S9 full
Headline change
v0.13.0
2026-06-17
17.46 s ± 0.16
16.65 s ± 0.03
16.09 s ± 0.10
11.39 s ± 0.05
This release turns the documented surface into generated, drift-proof contracts.
v0.12.0
2026-06-07
17.59 s ± 0.04
16.74 s ± 0.04
16.09 s ± 0.11
11.43 s ± 0.04
The case-study-driven rule-kind expansion, paired with a security cycle that hardens path handling into a real boundary.
v0.11.0
2026-05-28
17.52 s ± 0.13
16.66 s ± 0.06
16.26 s ± 0.20
11.44 s ± 0.03
The LSP + editor-integration release.
v0.10.2
2026-05-21
17.34 s ± 0.13
16.59 s ± 0.03
16.02 s ± 0.12
11.37 s ± 0.07
Targeted follow-up to v0.10.1.
v0.10.1
2026-05-20
17.43 s ± 0.13
16.59 s ± 0.02
16.05 s ± 0.13
11.41 s ± 0.05
Small post-release follow-up to v0.10.0.
v0.10.0
2026-05-20
17.65 s ± 0.06
16.70 s ± 0.02
16.19 s ± 0.09
11.46 s ± 0.04
The "case-study coverage push" minor.
Earlier history (v0.7.x, v0.8.x): no measured perf change beyond v0.5.7;
see CHANGELOG.md for the contemporaneous notes.
S1 — Filename hygiene
Eight filename-only rules (filename_case, filename_regex). Pure walker plus glob match — no content read. Narrowest scope alint shares with ls-lint, used as the competitive-comparison anchor. Catches walker and scope-match regressions.
S1 — full
Version
1k
10k
100k
1M
v0.13.0
8 ms ± 1
28 ms ± 2
229 ms ± 7
2.40 s ± 0.00
v0.12.0
7 ms ± 1
26 ms ± 1
224 ms ± 1
2.45 s ± 0.04
v0.11.0
7 ms ± 0
26 ms ± 1
223 ms ± 1
2.37 s ± 0.00
v0.10.2
8 ms ± 1
26 ms ± 1
223 ms ± 1
2.40 s ± 0.00
v0.10.1
7 ms ± 1
27 ms ± 1
223 ms ± 1
2.40 s ± 0.01
v0.10.0
8 ms ± 1
26 ms ± 0
224 ms ± 1
2.41 s ± 0.01
S1 — changed
Version
1k
10k
100k
1M
v0.13.0
19 ms ± 2
46 ms ± 2
397 ms ± 6
4.15 s ± 0.01
v0.12.0
19 ms ± 1
46 ms ± 1
390 ms ± 2
4.17 s ± 0.01
v0.11.0
19 ms ± 1
46 ms ± 1
390 ms ± 2
4.15 s ± 0.00
v0.10.2
19 ms ± 1
46 ms ± 1
391 ms ± 1
4.16 s ± 0.01
v0.10.1
19 ms ± 1
46 ms ± 1
391 ms ± 2
4.18 s ± 0.02
v0.10.0
19 ms ± 1
46 ms ± 1
393 ms ± 2
4.18 s ± 0.01
S2 — Existence + content
Eight existence + content rules (file_exists, file_absent, file_content_forbidden, file_max_size). Walker plus per-file content scan over narrow scopes. Repolinter-comparable shape. Catches content-rule regressions on common shapes.
S2 — full
Version
1k
10k
100k
1M
v0.13.0
10 ms ± 1
37 ms ± 1
326 ms ± 3
3.65 s ± 0.01
v0.12.0
10 ms ± 1
38 ms ± 1
325 ms ± 4
3.64 s ± 0.01
v0.11.0
9 ms ± 1
37 ms ± 1
323 ms ± 2
3.64 s ± 0.02
v0.10.2
10 ms ± 1
37 ms ± 1
324 ms ± 4
3.64 s ± 0.01
v0.10.1
10 ms ± 1
37 ms ± 1
323 ms ± 3
3.65 s ± 0.00
v0.10.0
9 ms ± 1
37 ms ± 1
326 ms ± 3
3.66 s ± 0.01
S2 — changed
Version
1k
10k
100k
1M
v0.13.0
20 ms ± 1
49 ms ± 2
411 ms ± 10
4.24 s ± 0.02
v0.12.0
20 ms ± 1
48 ms ± 1
401 ms ± 3
4.22 s ± 0.00
v0.11.0
20 ms ± 1
48 ms ± 1
400 ms ± 3
4.22 s ± 0.00
v0.10.2
20 ms ± 1
47 ms ± 1
401 ms ± 2
4.23 s ± 0.01
v0.10.1
20 ms ± 1
48 ms ± 1
401 ms ± 2
4.25 s ± 0.01
v0.10.0
19 ms ± 1
48 ms ± 1
402 ms ± 2
4.28 s ± 0.01
S3 — Workspace bundle
extends: oss-baseline + rust + monorepo + cargo-workspace (~34 rules). Heavy mix — content rules over **/*.rs, cross-file for_each_dir over crates/*, toml_path_matches per crate. Realistic monorepo workload; the v0.9.5 cliff (investigations/2026-05-cross-file-rules/) lived here.
S3 — full
Version
1k
10k
100k
1M
v0.13.0
31 ms ± 1
178 ms ± 4
1.67 s ± 0.04
17.46 s ± 0.16
v0.12.0
30 ms ± 1
171 ms ± 1
1.64 s ± 0.00
17.59 s ± 0.04
v0.11.0
31 ms ± 1
173 ms ± 1
1.65 s ± 0.01
17.52 s ± 0.13
v0.10.2
30 ms ± 1
172 ms ± 2
1.63 s ± 0.00
17.34 s ± 0.13
v0.10.1
31 ms ± 2
170 ms ± 1
1.63 s ± 0.01
17.43 s ± 0.13
v0.10.0
30 ms ± 1
171 ms ± 1
1.64 s ± 0.01
17.65 s ± 0.06
S3 — changed
Version
1k
10k
100k
1M
v0.13.0
34 ms ± 1
96 ms ± 1
727 ms ± 7
7.54 s ± 0.01
v0.12.0
33 ms ± 1
95 ms ± 1
723 ms ± 4
7.53 s ± 0.02
v0.11.0
33 ms ± 2
95 ms ± 2
726 ms ± 4
7.51 s ± 0.03
v0.10.2
32 ms ± 2
95 ms ± 2
729 ms ± 3
7.57 s ± 0.06
v0.10.1
33 ms ± 1
96 ms ± 2
727 ms ± 4
7.58 s ± 0.01
v0.10.0
33 ms ± 1
95 ms ± 1
726 ms ± 3
7.58 s ± 0.04
S4 — Agent-era hygiene
Five rules from the v0.6 agent-hygiene bundled ruleset (file_absent, file_content_forbidden). Filename plus content fan-out over agent-shaped trees. Catches agent-era rule shapes.
S4 — full
Version
1k
10k
100k
1M
v0.13.0
9 ms ± 1
28 ms ± 1
233 ms ± 6
2.41 s ± 0.00
v0.12.0
9 ms ± 1
28 ms ± 1
229 ms ± 5
2.40 s ± 0.01
v0.11.0
9 ms ± 1
28 ms ± 1
226 ms ± 3
2.39 s ± 0.00
v0.10.2
9 ms ± 1
28 ms ± 1
229 ms ± 4
2.42 s ± 0.01
v0.10.1
9 ms ± 1
29 ms ± 1
229 ms ± 4
2.42 s ± 0.02
v0.10.0
9 ms ± 0
28 ms ± 1
231 ms ± 5
2.43 s ± 0.01
S4 — changed
Version
1k
10k
100k
1M
v0.13.0
20 ms ± 1
48 ms ± 1
400 ms ± 7
4.16 s ± 0.01
v0.12.0
21 ms ± 1
47 ms ± 1
392 ms ± 2
4.17 s ± 0.03
v0.11.0
19 ms ± 1
46 ms ± 1
392 ms ± 2
4.15 s ± 0.01
v0.10.2
20 ms ± 1
47 ms ± 1
393 ms ± 2
4.17 s ± 0.02
v0.10.1
20 ms ± 1
47 ms ± 1
394 ms ± 2
4.16 s ± 0.01
v0.10.0
20 ms ± 1
47 ms ± 1
394 ms ± 2
4.17 s ± 0.01
S5 — Fix-pass content edits
Four content-edit rules under --fix (final_newline, no_trailing_whitespace, line_endings, no_bom). Read, transform, atomic-rename. The only --fix-mode bench. Catches fix-pipeline regressions.
S5 — full
Version
1k
10k
100k
1M
v0.13.0
15 ms ± 1
114 ms ± 3
1.17 s ± 0.02
12.39 s ± 0.01
v0.12.0
15 ms ± 1
113 ms ± 1
1.17 s ± 0.01
12.45 s ± 0.04
v0.11.0
15 ms ± 1
113 ms ± 1
1.17 s ± 0.01
12.42 s ± 0.01
v0.10.2
16 ms ± 1
112 ms ± 1
1.16 s ± 0.00
12.34 s ± 0.01
v0.10.1
15 ms ± 1
112 ms ± 1
1.16 s ± 0.00
12.38 s ± 0.02
v0.10.0
15 ms ± 1
113 ms ± 1
1.17 s ± 0.00
12.48 s ± 0.02
S5 — changed
Version
1k
10k
100k
1M
v0.13.0
19 ms ± 1
51 ms ± 2
433 ms ± 6
4.58 s ± 0.02
v0.12.0
19 ms ± 1
50 ms ± 1
429 ms ± 2
4.59 s ± 0.02
v0.11.0
19 ms ± 1
50 ms ± 1
429 ms ± 2
4.58 s ± 0.03
v0.10.2
19 ms ± 1
50 ms ± 1
430 ms ± 2
4.59 s ± 0.02
v0.10.1
19 ms ± 1
49 ms ± 1
432 ms ± 3
4.59 s ± 0.01
v0.10.0
19 ms ± 1
49 ms ± 1
431 ms ± 2
4.62 s ± 0.03
S6 — Per-file content fan-out
Thirteen content rules over **/*.rs. Per-file dispatch path width — every .rs file hit by every rule on a single read. Stresses the v0.9.3 dispatch-flip read-coalescing path. Catches per-file inner-loop regressions S3 doesn't surface.
S6 — full
Version
1k
10k
100k
1M
v0.13.0
18 ms ± 1
153 ms ± 5
1.58 s ± 0.03
16.65 s ± 0.03
v0.12.0
19 ms ± 1
150 ms ± 2
1.57 s ± 0.01
16.74 s ± 0.04
v0.11.0
18 ms ± 1
150 ms ± 1
1.56 s ± 0.01
16.66 s ± 0.06
v0.10.2
19 ms ± 1
149 ms ± 1
1.55 s ± 0.00
16.59 s ± 0.03
v0.10.1
19 ms ± 1
148 ms ± 1
1.55 s ± 0.00
16.59 s ± 0.02
v0.10.0
18 ms ± 1
149 ms ± 1
1.56 s ± 0.00
16.70 s ± 0.02
S6 — changed
Version
1k
10k
100k
1M
v0.13.0
20 ms ± 2
54 ms ± 2
484 ms ± 8
5.03 s ± 0.00
v0.12.0
20 ms ± 1
53 ms ± 1
471 ms ± 2
5.03 s ± 0.03
v0.11.0
19 ms ± 1
54 ms ± 1
472 ms ± 2
4.99 s ± 0.01
v0.10.2
20 ms ± 1
53 ms ± 1
472 ms ± 1
5.09 s ± 0.09
v0.10.1
20 ms ± 1
53 ms ± 1
474 ms ± 2
5.02 s ± 0.00
v0.10.0
19 ms ± 1
54 ms ± 1
475 ms ± 2
5.03 s ± 0.02
S7 — Cross-file relational
Six cross-file relational kinds (pair, unique_by, for_each_dir, for_each_file, dir_only_contains, every_matching_has). Various fan-out shapes over the synthetic monorepo. Catches the next O(D × N) cliff after the v0.9.5 path-index fix; the v0.9.7 → v0.9.8 transition's headline cell.
S7 — full
Version
1k
10k
100k
1M
v0.13.0
12 ms ± 1
45 ms ± 2
529 ms ± 14
16.09 s ± 0.10
v0.12.0
12 ms ± 1
45 ms ± 2
512 ms ± 5
16.09 s ± 0.11
v0.11.0
12 ms ± 1
43 ms ± 2
512 ms ± 7
16.26 s ± 0.20
v0.10.2
12 ms ± 1
45 ms ± 2
516 ms ± 4
16.02 s ± 0.12
v0.10.1
12 ms ± 1
43 ms ± 2
512 ms ± 7
16.05 s ± 0.13
v0.10.0
12 ms ± 1
42 ms ± 2
517 ms ± 7
16.19 s ± 0.09
S7 — changed
Version
1k
10k
100k
1M
v0.13.0
23 ms ± 1
66 ms ± 4
707 ms ± 18
18.12 s ± 0.13
v0.12.0
23 ms ± 1
65 ms ± 2
694 ms ± 5
18.11 s ± 0.19
v0.11.0
23 ms ± 1
64 ms ± 2
691 ms ± 5
17.98 s ± 0.09
v0.10.2
24 ms ± 1
66 ms ± 2
694 ms ± 6
18.18 s ± 0.06
v0.10.1
24 ms ± 1
66 ms ± 2
697 ms ± 5
18.07 s ± 0.10
v0.10.0
23 ms ± 1
66 ms ± 2
697 ms ± 5
18.11 s ± 0.08
S8 — Git overlay
S3 reshape plus git_no_denied_paths and git_tracked_only over a real git repo. Same as S3 but with Engine::collect_git_tracked_if_needed and BlameCache active. Catches git-aware dispatch regressions at scale.
S8 — full
Version
1k
10k
100k
1M
v0.13.0
27 ms ± 1
163 ms ± 3
1.55 s ± 0.04
16.79 s ± 0.03
v0.12.0
26 ms ± 1
159 ms ± 2
1.53 s ± 0.02
16.83 s ± 0.04
v0.11.0
27 ms ± 1
160 ms ± 2
1.53 s ± 0.01
16.83 s ± 0.03
v0.10.2
27 ms ± 1
159 ms ± 2
1.51 s ± 0.01
16.76 s ± 0.03
v0.10.1
26 ms ± 0
157 ms ± 2
1.51 s ± 0.01
16.67 s ± 0.30
v0.10.0
26 ms ± 1
159 ms ± 2
1.52 s ± 0.01
16.85 s ± 0.03
S8 — changed
Version
1k
10k
100k
1M
v0.13.0
29 ms ± 2
85 ms ± 3
618 ms ± 10
6.58 s ± 0.01
v0.12.0
29 ms ± 2
83 ms ± 2
605 ms ± 4
6.59 s ± 0.05
v0.11.0
29 ms ± 1
83 ms ± 2
605 ms ± 4
6.52 s ± 0.04
v0.10.2
28 ms ± 1
83 ms ± 1
607 ms ± 5
6.55 s ± 0.02
v0.10.1
29 ms ± 1
83 ms ± 2
610 ms ± 8
6.56 s ± 0.03
v0.10.0
29 ms ± 1
82 ms ± 2
605 ms ± 6
6.60 s ± 0.03
S9 — Nested polyglot
Three competing ecosystem rulesets: extends: rust + node + python (~26 rules) over a polyglot tree (Rust under crates/, Node under packages/, Python under apps/). Per-rule scope_filter: { has_ancestor: <manifest> } ancestor walks. The dispatch shape the v0.9.6 scope_filter: primitive was designed for — without it, every **/*.py rule from python@v1 fires on every .py file in the tree. New in v0.9.6.
S9 — full
Version
1k
10k
100k
1M
v0.13.0
17 ms ± 2
108 ms ± 2
1.08 s ± 0.03
11.39 s ± 0.05
v0.12.0
18 ms ± 1
106 ms ± 1
1.06 s ± 0.00
11.43 s ± 0.04
v0.11.0
17 ms ± 1
106 ms ± 1
1.07 s ± 0.01
11.44 s ± 0.03
v0.10.2
18 ms ± 1
105 ms ± 1
1.05 s ± 0.01
11.37 s ± 0.07
v0.10.1
17 ms ± 1
105 ms ± 1
1.05 s ± 0.01
11.41 s ± 0.05
v0.10.0
17 ms ± 1
106 ms ± 1
1.06 s ± 0.01
11.46 s ± 0.04
S9 — changed
Version
1k
10k
100k
1M
v0.13.0
14 ms ± 1
54 ms ± 1
454 ms ± 8
4.70 s ± 0.02
v0.12.0
14 ms ± 1
53 ms ± 1
443 ms ± 2
4.68 s ± 0.01
v0.11.0
22 ms ± 1
53 ms ± 1
442 ms ± 2
4.69 s ± 0.02
v0.10.2
22 ms ± 1
53 ms ± 1
442 ms ± 2
4.72 s ± 0.01
v0.10.1
22 ms ± 1
54 ms ± 1
442 ms ± 2
4.70 s ± 0.01
v0.10.0
21 ms ± 1
53 ms ± 1
444 ms ± 2
4.71 s ± 0.02
S10 — scope_filter outside per-file dispatch
Five rules from outside the PerFileRule dispatch path (file_max_size, no_empty_files, no_symlinks, filename_case, filename_regex) each with scope_filter: { has_ancestor: <manifest> } over the polyglot tree. Per-rule evaluate() iterating ctx.index.files() with both path-glob AND scope_filter narrowing — the dispatch shape v0.9.9 wired through (v0.9.8 silently dropped scope_filter: on these 17 rule kinds). New in v0.9.9.
S10 — full
Version
1k
10k
100k
1M
v0.13.0
10 ms ± 1
50 ms ± 3
462 ms ± 11
5.06 s ± 0.11
v0.12.0
10 ms ± 1
51 ms ± 4
454 ms ± 13
5.05 s ± 0.11
v0.11.0
10 ms ± 1
52 ms ± 4
456 ms ± 13
5.05 s ± 0.09
v0.10.2
10 ms ± 1
50 ms ± 4
451 ms ± 9
5.08 s ± 0.08
v0.10.1
10 ms ± 1
52 ms ± 4
453 ms ± 11
5.14 s ± 0.08
v0.10.0
10 ms ± 1
51 ms ± 4
452 ms ± 9
5.06 s ± 0.10
S10 — changed
Version
1k
10k
100k
1M
v0.13.0
11 ms ± 1
50 ms ± 2
435 ms ± 11
4.54 s ± 0.01
v0.12.0
11 ms ± 1
49 ms ± 0
431 ms ± 3
4.54 s ± 0.02
v0.11.0
19 ms ± 1
49 ms ± 1
426 ms ± 4
4.56 s ± 0.02
v0.10.2
19 ms ± 1
49 ms ± 1
428 ms ± 5
4.58 s ± 0.02
v0.10.1
20 ms ± 1
49 ms ± 1
429 ms ± 4
4.56 s ± 0.03
v0.10.0
19 ms ± 1
50 ms ± 1
432 ms ± 6
4.57 s ± 0.03
S11 — v0.10 cross-file dispatch class
Three v0.10 cross-file kinds (registry_paths_resolve, cross_file_value_equals, pair_hash) over the regular synthetic monorepo with a manifest.sha256 overlay. Exercises the whole-repo entry points the v0.10 cross-file engine uses, plus the new crate::extract / crate::io::read_capped helpers. Adds to S7 (the v0.2-era cross-file family: pair / unique_by / for_each_* / dir_only_contains / every_matching_has) by covering the v0.10 additions. New in v0.10.0.
S11 — full
Version
1k
10k
100k
1M
v0.13.0
9 ms ± 2
30 ms ± 1
237 ms ± 7
2.37 s ± 0.01
v0.12.0
8 ms ± 1
29 ms ± 1
230 ms ± 3
2.36 s ± 0.00
v0.11.0
8 ms ± 1
30 ms ± 1
229 ms ± 3
2.34 s ± 0.00
v0.10.2
9 ms ± 1
30 ms ± 1
230 ms ± 3
2.36 s ± 0.00
v0.10.1
9 ms ± 1
30 ms ± 1
231 ms ± 4
2.37 s ± 0.01
v0.10.0
9 ms ± 1
30 ms ± 1
232 ms ± 4
2.38 s ± 0.01
S11 — changed
Version
1k
10k
100k
1M
v0.13.0
20 ms ± 1
53 ms ± 2
424 ms ± 8
4.37 s ± 0.02
v0.12.0
21 ms ± 1
51 ms ± 1
418 ms ± 4
4.38 s ± 0.03
v0.11.0
20 ms ± 1
50 ms ± 1
417 ms ± 5
4.36 s ± 0.03
v0.10.2
20 ms ± 1
50 ms ± 1
418 ms ± 4
4.37 s ± 0.03
v0.10.1
20 ms ± 1
51 ms ± 1
416 ms ± 2
4.40 s ± 0.02
v0.10.0
20 ms ± 1
50 ms ± 1
417 ms ± 1
4.39 s ± 0.03
S12 — v0.10 per-file dispatch class
Three v0.10 per-file kinds (ordered_block, import_gate, xml_path_equals + xml_path_matches) over **/*.rs plus a single root-level .csproj overlay (per-package fan-out skipped to keep cross-version file counts stable). Exercises the per-file dispatch path made fast by v0.9.3, with the v0.10-new extraction / regex / XML structured-query paths. Adds to S6 (dense content fan-out on **/*.rs) by covering the v0.10 additions independently of S6's pure-content baseline. New in v0.10.0.
S12 — full
Version
1k
10k
100k
1M
v0.13.0
11 ms ± 1
45 ms ± 1
400 ms ± 7
4.11 s ± 0.01
v0.12.0
10 ms ± 1
45 ms ± 1
393 ms ± 2
4.11 s ± 0.02
v0.11.0
10 ms ± 1
43 ms ± 1
386 ms ± 2
4.02 s ± 0.02
v0.10.2
11 ms ± 1
43 ms ± 1
371 ms ± 1
3.91 s ± 0.02
v0.10.1
10 ms ± 1
42 ms ± 1
372 ms ± 1
3.90 s ± 0.02
v0.10.0
10 ms ± 1
42 ms ± 1
372 ms ± 2
3.94 s ± 0.00
S12 — changed
Version
1k
10k
100k
1M
v0.13.0
21 ms ± 2
49 ms ± 1
426 ms ± 8
4.40 s ± 0.01
v0.12.0
20 ms ± 1
49 ms ± 1
410 ms ± 2
4.40 s ± 0.01
v0.11.0
20 ms ± 1
49 ms ± 1
409 ms ± 1
4.39 s ± 0.02
v0.10.2
20 ms ± 1
48 ms ± 1
410 ms ± 2
4.41 s ± 0.02
v0.10.1
21 ms ± 1
49 ms ± 1
409 ms ± 1
4.40 s ± 0.01
v0.10.0
20 ms ± 1
48 ms ± 1
409 ms ± 1
4.41 s ± 0.01
S13 — v0.10 single-shot dispatch class
Two v0.10 single-shot kinds (generated_file_fresh, command_idempotent) declared with command: ["true"] so the row measures crate::spawn::run_capturing (fork / exec / concurrent pipe-drain / wait / stdout-parse), not the user's tool. Single-shot rules add a fixed cost per run; tree walk dominates the row. Signal of interest is cross-version stability of the spawn path — regressions in crate::spawn or the engine's single-shot dispatch surface here in isolation. New in v0.10.0.
S13 — full
Version
1k
10k
100k
1M
v0.13.0
18 ms ± 1
35 ms ± 1
216 ms ± 5
2.20 s ± 0.01
v0.12.0
18 ms ± 1
35 ms ± 1
213 ms ± 1
2.20 s ± 0.00
v0.11.0
18 ms ± 1
34 ms ± 1
212 ms ± 1
2.19 s ± 0.01
v0.10.2
18 ms ± 1
35 ms ± 1
213 ms ± 1
2.20 s ± 0.00
v0.10.1
18 ms ± 1
35 ms ± 1
213 ms ± 2
2.20 s ± 0.00
v0.10.0
18 ms ± 1
35 ms ± 1
215 ms ± 1
2.22 s ± 0.00
S13 — changed
Version
1k
10k
100k
1M
v0.13.0
30 ms ± 2
57 ms ± 2
409 ms ± 8
4.22 s ± 0.01
v0.12.0
29 ms ± 1
56 ms ± 1
398 ms ± 1
4.23 s ± 0.04
v0.11.0
30 ms ± 1
56 ms ± 1
399 ms ± 2
4.20 s ± 0.02
v0.10.2
29 ms ± 1
56 ms ± 1
401 ms ± 2
4.20 s ± 0.00
v0.10.1
30 ms ± 1
56 ms ± 1
402 ms ± 2
4.22 s ± 0.01
v0.10.0
29 ms ± 1
56 ms ± 1
401 ms ± 2
4.25 s ± 0.01
How to add a row
When a release tag lands, the bench-record.yml workflow (introduced in
v0.9.7) auto-runs the publish-grade matrix on the self-hosted Linux runner
and opens a PR with the new per-version dir. The maintainer re-renders this
file from the merged data:
v0.9.5 → v0.9.8 cliff (S7 1M): investigations/2026-05-cross-file-rules-v2/
— surfaced the residual O(D × N) shape in dir_only_contains /
dir_contains after the v0.9.5 fix; v0.9.8 closes it via
FileIndex::children_of. (Investigation written alongside v0.9.8.)