Skip to content

docs: remove stale 2.0.0 benchmark snapshot from llms.txt and README - #27

Merged
developerz-ai[bot] merged 1 commit into
mainfrom
dz/remove-stale-hardcoded-benchmark-numbers-from--1e0d885c
Nov 10, 2026
Merged

developerz-ai[bot] merged 1 commit into
mainfrom
dz/remove-stale-hardcoded-benchmark-numbers-from--1e0d885c

Conversation

@developerz-ai

@developerz-ai developerz-ai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

What

The quoted ratios describe the 2.0.0 release (README snapshot dated
2026-10-31, same as CHANGELOG) while version.rb is 2.1.0; AGENTS.md's
docs rule forbids hardcoded benchmark numbers. Replaced the snapshot
tables with pointers to the CI benchmark workflow (.github/workflows/
benchmark.yml) and bundle exec rake bench, kept the code-level
"How it is fast" claims, left CHANGELOG.md's dated release notes alone.

Acceptance

  • llms.txt has no benchmark figures labelled with a release version: the 'Performance at 2.0.0' sentence is gone, replaced by a pointer to CI/README Performance
  • README.md has no 'Snapshot at 2.0.0' section and no 'ruby2html 2.0' table rows; grep for '2.0.0|1.35x|2.4–16x' in README.md finds no benchmark prose
  • Both files name the benchmark workflow / bundle exec rake bench as the source of truth: README keeps its .github/workflows/benchmark.yml link, llms.txt points at CI + README Performance
  • Every path named in the rewritten sections exists: .github/workflows/benchmark.yml, bench/render_bench.rb, bench/escape_bench.rb, spec/benchmarks/requests_spec.rb (all confirmed present in this survey)
  • Remaining factual claims in the touched sections match code: SSE2/NEON escape scan (ext/ruby2html/html_escape.c:28,62), attributes written straight into the buffer with no cache (ext/ruby2html/attributes.c:2,14), pure-Ruby fallback and lazy loading per AGENTS.md code map
  • CHANGELOG.md and version.rb untouched; README.md and llms.txt remain valid markdown/plaintext with the Performance anchor heading intact

Changes

  • llms.txt (edit) — Line 3 intro blockquote: delete the stale 'Performance at 2.0.0: ... 1.35x ... 2.4-16x ... require costs about 0.4 MB' sentence; replace with one pointer sentence: benchmarks run in CI on every push/PR and README "Performance" holds the current numbers; run locally with bundle exec rake bench. Keep all other lines byte-identical (file is 132 lines).
  • README.md (edit) — Line 23 'Why ruby2html' bullet: drop hardcoded ratios (1.35x Erubi, 2.4-16x Phlex, 40-90% allocations); keep 'Fastest Ruby HTML renderer we've measured' and point at #performance. Line 24: drop 'require costs about 0.4 MB and 19 ms' clause. Performance section: keep intro paragraph (line 199, already links .github/workflows/benchmark.yml and rake bench); delete the '### Snapshot at 2.0.0 release (2026-10-31)' subsection (lines 201-238: page-render table, Rails-request table, 5.9x escaping line, footprint table, Phlex footnote) and replace with a short 'What is measured' list naming b [trimmed]

Verification

./bin/check passed (exit 0) in 26s.

What the editors ran to see the change working, and what they saw:

  • grep README.md for '2\.0\.0|1\.35x|2\.4.16x|0\.4 MB|Snapshot|19 ms|2026-10-31' (docs): 0 hits — no stale figures or snapshot section remain in README.md
  • grep llms.txt for '2\.0\.0|1\.35x|0\.4 MB' (docs): 0 hits; line 3 now reads "Performance: benchmarks run in CI on every push and pull request, and README "Performance" holds the current numbers; run them locally with bundle exec rake bench"
  • code_read README.md:20-29 and 196-211 after the edits (docs): Why bullet keeps 'Fastest Ruby HTML renderer we've measured' + Performance link, require-cost clause gone; Performance section = intro (benchmark.yml link) + '### What is measured' list of bench/render_bench.rb, bench/tag_bench.rb, bench/escape_bench.rb, spec/benchmarks/requests_spec.rb + 'How it is fast' list intact; single blank lines
  • code_glob bench/*.rb and code_read of each script's header + spec/benchmarks/requests_spec.rb (docs): all four cited benchmark paths exist and each bullet's description matches the script's own header comments

🤖 Opened by developerz.ai for task tsk_1e0d885c9b903cf9f46031138834403b on sebyx07/ruby2html.

Raised automatically by the raw_task_triage lane.

🤖 developerz.ai, an automated agent, not a human — this PR is one slice of a stacked plan.
Dispatched automatically by a developerz.ai maintainer lane
Part 1/1

The quoted ratios describe the 2.0.0 release (README snapshot dated
2026-10-31, same as CHANGELOG) while version.rb is 2.1.0; AGENTS.md's
docs rule forbids hardcoded benchmark numbers. Replaced the snapshot
tables with pointers to the CI benchmark workflow (.github/workflows/
benchmark.yml) and `bundle exec rake bench`, kept the code-level
"How it is fast" claims, left CHANGELOG.md's dated release notes alone.

Dz-Task-Id: tsk_1e0d885c9b903cf9f46031138834403b
@developerz-ai developerz-ai Bot added dz/fleet-pr Opened by developerz.ai, an automated agent, from a fleet run. dz/model:glm-5.3-flash developerz.ai: model that wrote this bot PR. dz/provider:router.ai.developerz.ai developerz.ai: provider that served this bot PR. labels Nov 10, 2026
@github-actions

Copy link
Copy Markdown

Benchmarks: aarch64 (linux)

ruby 4.0.9 (2026-10-23 revision 3e93b23afc) +PRISM [aarch64-linux] · commit 6e8b67ee6c · 2.0s per report
Δ is against main b69cba8f67 (same runner type; expect a few % noise).

escape_bench (C ext) · peak RSS 120 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
escape_html short clean (10B) 617,829 ± 0.2% 0.0016 0.00 fastest -0.1%
escape_html medium clean (200B) 336,366 ± 0.2% 0.0030 0.00 1.84x slower -0.9%
append short clean (10B) 208,939 ± 0.2% 0.0048 0.02 2.96x slower +0.8%
append short dirty (10B) 161,433 ± 0.2% 0.0062 0.00 3.83x slower +0.9%
append medium clean (200B) 147,781 ± 0.2% 0.0068 0.00 4.18x slower +0.3%
escape_html short dirty (10B) 108,721 ± 3.4% 0.0092 100 5.68x slower -2.1%
append medium dirty (200B) 73,534 ± 0.2% 0.0136 0.00 8.40x slower -0.3%
escape_html medium dirty (200B) 58,717 ± 0.4% 0.0170 100 10.52x slower +0.3%
escape_html long clean (10KB) 11,478 ± 0.2% 0.0871 0.00 53.83x slower -0.2%
append long clean (10KB) 9,087 ± 0.5% 0.1101 0.00 67.99x slower +0.1%
append long dirty (10KB) 1,205 ± 0.3% 0.8296 0.00 512.54x slower +0.3%
escape_html long dirty (10KB) 1,133 ± 3.2% 0.8829 100 545.47x slower +0.0%

escape_bench (pure Ruby) · peak RSS 150 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
escape_html short clean (10B) 164,643 ± 0.2% 0.0061 0.00 fastest +0.0%
append short clean (10B) 104,622 ± 0.2% 0.0096 0.02 1.57x slower +0.2%
escape_html short dirty (10B) 69,162 ± 0.4% 0.0145 100 2.38x slower -0.2%
append short dirty (10B) 57,421 ± 0.4% 0.0174 100 2.87x slower -0.6%
escape_html medium clean (200B) 56,877 ± 0.2% 0.0176 0.00 2.89x slower +0.0%
append medium clean (200B) 45,560 ± 0.2% 0.0219 0.00 3.61x slower +0.1%
escape_html medium dirty (200B) 24,769 ± 1.0% 0.0404 200 6.65x slower -0.9%
append medium dirty (200B) 22,102 ± 0.8% 0.0452 200 7.45x slower -0.5%
escape_html long clean (10KB) 1,632 ± 0.3% 0.6126 0.00 100.86x slower +0.1%
append long clean (10KB) 1,557 ± 0.3% 0.6421 0.00 105.71x slower +0.1%
escape_html long dirty (10KB) 1,086 ± 0.6% 0.9205 200 151.55x slower +1.3%
append long dirty (10KB) 948 ± 4.2% 1.0544 200 173.59x slower -0.2%

render_bench (C ext) · peak RSS 131 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
erubi 7,446 ± 1.0% 0.1343 713 fastest -2.1%
ruby2html 5,750 ± 0.7% 0.1739 419 1.29x slower -0.6%
phlex 555 ± 0.9% 1.8015 6,374 13.41x slower -1.3%

render_bench (pure Ruby) · peak RSS 131 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
erubi 7,468 ± 0.8% 0.1339 713 fastest -1.1%
ruby2html 2,310 ± 0.5% 0.4330 1,029 3.23x slower -0.7%
phlex 562 ± 1.1% 1.7779 6,374 13.28x slower -0.6%

tag_bench (C ext) · peak RSS 39 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
br 214,582 ± 1.6% 0.0047 7.00 fastest -1.7%
li(text) 158,192 ± 0.6% 0.0063 7.02 1.36x slower -0.4%
li(dirty text) 125,323 ± 0.6% 0.0080 7.00 1.71x slower +0.8%
div { block } 98,495 ± 0.6% 0.0102 7.00 2.18x slower -0.1%
span(text, class:) 30,927 ± 1.7% 0.0323 207 6.94x slower -0.3%
div(class:) { block } 29,298 ± 0.4% 0.0341 207 7.32x slower -0.3%
a(text, href:, class:) 23,513 ± 1.1% 0.0425 207 9.13x slower -1.0%

tag_bench (pure Ruby) · peak RSS 26 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
br 81,100 ± 2.3% 0.0123 107 fastest -1.0%
div { block } 63,753 ± 0.4% 0.0157 107 1.27x slower +1.0%
li(text) 54,809 ± 0.4% 0.0182 107 1.48x slower +1.3%
li(dirty text) 41,810 ± 0.3% 0.0239 207 1.94x slower +0.9%
div(class:) { block } 15,746 ± 0.4% 0.0635 207 5.15x slower +0.6%
span(text, class:) 15,458 ± 0.5% 0.0647 207 5.25x slower +0.0%
a(text, href:, class:) 9,801 ± 0.7% 0.1020 207 8.27x slower +0.5%

Rails request (C ext) · peak RSS 243 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
Ruby2html::Component 493 ± 2.6% 2.0276 4,452 fastest +4.3%
ruby2html .html.rb templates 487 ± 2.3% 2.0526 4,588 1.01x slower +3.2%
Slim 483 ± 5.8% 2.0696 4,126 1.02x slower +4.0%
ViewComponent + ruby2html 461 ± 3.0% 2.1676 4,309 1.07x slower +3.7%
ERB 422 ± 16.8% 2.3675 2,946 1.17x slower -5.7%
Phlex 420 ± 1.2% 2.3786 5,807 1.17x slower +1.6%

@github-actions

Copy link
Copy Markdown

Benchmarks: x86_64 (linux)

ruby 4.0.9 (2026-10-23 revision 3e93b23afc) +PRISM [x86_64-linux] · commit 6e8b67ee6c · 2.0s per report
Δ is against main b69cba8f67 (same runner type; expect a few % noise).

escape_bench (C ext) · peak RSS 120 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
escape_html short clean (10B) 874,444 ± 2.9% 0.0011 0.00 fastest +24.0%
escape_html medium clean (200B) 533,690 ± 0.2% 0.0019 0.00 1.64x slower +27.4%
append short clean (10B) 335,227 ± 0.5% 0.0030 0.02 2.61x slower +32.6%
append short dirty (10B) 248,897 ± 0.7% 0.0040 0.00 3.51x slower +34.8%
append medium clean (200B) 236,110 ± 0.2% 0.0042 0.00 3.70x slower +36.9%
escape_html short dirty (10B) 173,911 ± 0.7% 0.0058 100 5.03x slower +35.6%
append medium dirty (200B) 117,233 ± 0.6% 0.0085 0.00 7.46x slower +28.1%
escape_html medium dirty (200B) 89,987 ± 1.0% 0.0111 100 9.72x slower +22.3%
escape_html long clean (10KB) 18,486 ± 0.8% 0.0541 0.00 47.30x slower +13.9%
append long clean (10KB) 14,303 ± 2.8% 0.0699 0.00 61.14x slower +25.2%
append long dirty (10KB) 1,901 ± 0.7% 0.5259 0.00 459.91x slower +25.4%
escape_html long dirty (10KB) 1,822 ± 3.1% 0.5490 100 480.06x slower +30.4%

escape_bench (pure Ruby) · peak RSS 146 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
escape_html short clean (10B) 262,464 ± 1.9% 0.0038 0.00 fastest +30.6%
append short clean (10B) 193,858 ± 5.4% 0.0052 0.02 1.35x slower +27.0%
escape_html short dirty (10B) 113,563 ± 3.3% 0.0088 100 2.31x slower +28.8%
append short dirty (10B) 96,403 ± 1.9% 0.0104 100 2.72x slower +44.2%
escape_html medium clean (200B) 69,688 ± 2.2% 0.0143 0.00 3.77x slower +21.3%
append medium clean (200B) 61,180 ± 1.1% 0.0163 0.00 4.29x slower +22.9%
escape_html medium dirty (200B) 36,381 ± 2.2% 0.0275 200 7.21x slower +42.9%
append medium dirty (200B) 32,540 ± 2.2% 0.0307 200 8.07x slower +41.7%
escape_html long clean (10KB) 1,766 ± 0.5% 0.5662 0.00 148.60x slower +14.1%
append long clean (10KB) 1,706 ± 0.3% 0.5862 0.00 153.85x slower +14.4%
escape_html long dirty (10KB) 1,181 ± 0.3% 0.8469 200 222.27x slower +15.2%
append long dirty (10KB) 1,011 ± 8.4% 0.9893 200 259.66x slower +10.4%

render_bench (C ext) · peak RSS 132 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
erubi 10,351 ± 4.2% 0.0966 713 fastest +28.5%
ruby2html 7,794 ± 0.8% 0.1283 419 1.33x slower +44.9%
phlex 654 ± 3.8% 1.5292 6,374 15.83x slower +32.4%

render_bench (pure Ruby) · peak RSS 132 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
erubi 10,385 ± 1.2% 0.0963 713 fastest +28.2%
ruby2html 3,012 ± 0.9% 0.3320 1,029 3.45x slower +39.0%
phlex 660 ± 4.2% 1.5149 6,374 15.73x slower +33.5%

tag_bench (C ext) · peak RSS 39 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
br 312,416 ± 1.9% 0.0032 7.00 fastest +21.3%
li(text) 211,501 ± 1.9% 0.0047 7.02 1.48x slower +24.3%
li(dirty text) 179,557 ± 5.8% 0.0056 7.00 1.74x slower +23.7%
div { block } 148,308 ± 1.1% 0.0067 7.00 2.11x slower +33.0%
span(text, class:) 47,671 ± 1.5% 0.0210 207 6.55x slower +46.6%
div(class:) { block } 42,167 ± 5.0% 0.0237 207 7.41x slower +52.1%
a(text, href:, class:) 34,030 ± 0.7% 0.0294 207 9.18x slower +45.4%

tag_bench (pure Ruby) · peak RSS 27 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
br 133,714 ± 1.3% 0.0075 107 fastest +34.7%
div { block } 106,891 ± 2.8% 0.0094 107 1.25x slower +36.6%
li(text) 94,238 ± 0.7% 0.0106 107 1.42x slower +30.6%
li(dirty text) 65,716 ± 5.3% 0.0152 207 2.03x slower +30.5%
span(text, class:) 20,989 ± 0.6% 0.0476 207 6.37x slower +45.0%
div(class:) { block } 19,534 ± 0.9% 0.0512 207 6.85x slower +47.7%
a(text, href:, class:) 13,995 ± 0.6% 0.0715 207 9.55x slower +46.8%

Rails request (C ext) · peak RSS 232 MB

Benchmark i/s ms / call allocs / call vs fastest Δ vs main
Slim 724 ± 8.8% 1.3821 3,996 fastest +34.4%
Ruby2html::Component 692 ± 1.3% 1.4458 4,312 1.05x slower +31.3%
ruby2html .html.rb templates 679 ± 2.2% 1.4719 4,443 1.06x slower +33.3%
ViewComponent + ruby2html 653 ± 0.8% 1.5309 4,169 1.11x slower +34.2%
ERB 650 ± 11.4% 1.5391 2,858 1.11x slower +36.9%
Phlex 575 ± 2.6% 1.7384 5,609 1.26x slower +26.0%

@developerz-ai

developerz-ai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor Author

✅ Reviewed — nothing blocking

0 actionable comment(s) · grounded on your code

⚠️ 1 config note(s): test files were not shown to the reviewer — this diff touched no path recognised as a test, so no assertion was available to read the change against

⏱ 27s wall clock · glm-5.3-flash via router · 1 model call(s) · 119 output token(s)

🤖 developerz.ai — automated review, running on your model and your box.

@developerz-ai developerz-ai Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review summary — 2 file(s), 0 finding(s).

Docs-only edit removing stale 2.0.0 benchmark figures from README and llms.txt, replaced by pointers to CI benchmarks and rake bench; the shown files match the acceptance criteria and no contradictions remain.

  • test files were not shown to the reviewer — this diff touched no path recognised as a test, so no assertion was available to read the change against

🤖 developerz.ai review — automated, running on your model and your box. What is this? · Reviewed by router/glm-5.3-flash — 16.3k in / 119 out over 1 call, on your flat-rate plan: no per-token charge (~<$0.01 at list price).

@developerz-ai
developerz-ai Bot merged commit c566c6e into main Nov 10, 2026
30 checks passed
@developerz-ai
developerz-ai Bot deleted the dz/remove-stale-hardcoded-benchmark-numbers-from--1e0d885c branch November 10, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dz/fleet-pr Opened by developerz.ai, an automated agent, from a fleet run. dz/model:glm-5.3-flash developerz.ai: model that wrote this bot PR. dz/provider:router.ai.developerz.ai developerz.ai: provider that served this bot PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants