PR 5 (Track 5, bench-rollup): Interactive uPlot charts + mkdocs deploy from devel#24
Closed
elijahr wants to merge 15 commits intofeat/bench-rollup-pr4-comparison-expansionfrom
Closed
Conversation
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Track 5 of the bench-rollup feature. Embeds an interactive uPlot
throughput chart in
docs/benchmarks.md(via mkdocs-material'smd_in_htmlextension), publishes the merged BMF snapshot todocs/assets/bench-results/on every devel push, and extendsdocs.ymlto redeploy mike'sdev/alias on devel pushes.Depends on PR #19, PR #20, PR #21, PR #22, PR #23.
What landed (per impl plan Track 5)
Task 5.1 — Vendor uPlot 1.6.27 IIFE bundle.
docs/assets/uplot-1.6.27.iife.min.js(47884 bytes). SHA-25618dd3f1a54320f5e28a6655e11b79a5a3a30e329eb0d01b97d0b0b1ceae3ed10matches upstream jsdelivr metadata. Emptydocs/assets/bench-results/directory preserved via.gitkeep.Task 5.2 — Chart wiring + contract test.
docs/assets/bench-charts.js(vanilla-JS uPlot wiring) +docs/assets/bench-charts.css. Library-toggle legend, log-scale Y axis toggle, hover tooltip with mean ± stddev when present, graceful fallbacks for fetch failure / missing uPlot global / empty BMF. Newbenchmarks/tests/test_bench_charts_contract.py(9 tests) guards the BMF -> chart contract; mirrors JSparseSlugin Python so drift is caught at CI time.Task 5.3 — Embed chart in benchmarks.md. Replaces the "Charts and visualizations coming in Phase 2." placeholder with the chart container inside an
md_in_html<div markdown=\"0\">block. Fetch path is relative (./assets/bench-results/latest.json) so the same page works under/dev/,/latest/, and/v*/mike aliases. §4.1 fairness caveats embedded verbatim within one viewport of the chart.mkdocs.ymlregisters the page in nav (previously orphaned) and adds the chart CSS toextra_css.Task 5.4 — Devel-triggered docs deploy.
docs.ymlpush trigger and "Deploy docs (dev)"if:clause extended to includedevel.Task 5.5 — Snapshot publishing pipeline. Split into 5.5.a (loop-prevention scaffolding: paths-ignore + actor guard, separate commit so scaffolding can be verified in isolation) and 5.5.b (snapshot-push step). Three layers per design §5.X:
[skip ci]marker in the snapshot commit message.paths-ignoreextension todocs/assets/bench-results/**onpull_requestandpushtriggers.if: github.actor != 'github-actions[bot]'on bothbenchandbench-uploadjobs.Snapshot step copies
merged.jsonto<sha>.jsonANDlatest.json, commits asgithub-actions[bot], pushes to devel. No-op detection skips empty commits when merged.json is byte-identical.Task 5.6 — Post-deploy asset verification. New step in
docs.ymlafter the dev deploy curls the published BMF URL, asserts HTTP 200, and asserts the body parses as JSON. The chart's silent-on-404 fallback would otherwise hide a broken asset path.Task 5.7 — Licenses + .gitattributes.
THIRD_PARTY_LICENSES.mdrecords uPlot 1.6.27 (MIT) with a precise upgrade procedure (jsdelivr URL, SHA-256 verification path)..gitattributesgainsdocs/assets/uplot-*.js linguist-vendored=true linguist-generated=trueanddocs/assets/bench-results/*.json linguist-generated=true.Task 5.8 — Hand-curated README + delete renderer. README BENCHMARKS markers replaced with a four-row hand-curated summary (Sipsic / Sipmuc / Mupsic / Mupmuc bounded at one representative shape each) + link to the live chart. Pre-deletion release-tag check: v3.2.0 and v4.0.0 each ship
benchmarks/render_readme.nimin their tagged tree (immutable); no CI workflow / nimble task / test runner references the file.benchmarks/render_readme.nimandtests/t_render_readme.nimremoved.benchmarks/README.mdgains an "Updating the README summary" subsection codifying the hand-curation procedure.Task 5.9 — CHANGELOG. Track 5 entries added to
[Unreleased]covering Added / Changed / Removed.Verification
nimble test(Nim test suite viatests/test.nim): 200/200 pass.tests/t_bench_common.nim: 25/25 pass.tests/t_bench_latency.nim: 7/7 pass.python3 -m unittest benchmarks.tests.test_merge_bmf benchmarks.tests.test_superset_check benchmarks.tests.test_bench_charts_contract: 29/29 pass (9 new contract tests + 20 pre-existing).actionlint .github/workflows/bench.yml .github/workflows/docs.yml: clean on changed code; one pre-existing SC2086 warning ondocs.yml:52is in untouched "Deploy docs (versioned)" code.git check-attr -a docs/assets/uplot-1.6.27.iife.min.js: reportslinguist-vendored: true,linguist-generated: true.git grep render_readme: only intentional historical references in CHANGELOG (PR-0 entry) and benchmarks/README.md (deletion explanation).Track 5 acceptance criteria
dev/deploy).https://elijahr.github.io/lockfreequeues/dev/benchmarks/shows chart with current data — verifiable post-merge once devel deploy fires.https://elijahr.github.io/lockfreequeues/latest/benchmarks/shows chart at last release — gated on next release tag.latestchart works.bench-results/latest.json; valid JSON; uPlot script tag present in HTML (asset-path step in docs.yml; uPlot script presence implicit in committed benchmarks.md).Manual chart performance check
Per design §3 PR 5: open
https://elijahr.github.io/lockfreequeues/dev/benchmarks/in Chrome devtools (4G preset, disable cache, hard reload); record LCP/FCP screenshot. Deferred to post-merge since it requires a live mike deploy URL; will be attached as a comment once devel deploy fires.References
~/.local/spellbook/docs/Users-eek-Development-lockfreequeues/plans/2026-05-01-bench-rollup-impl.mdTrack 5 (lines 965-1129).~/.local/spellbook/docs/Users-eek-Development-lockfreequeues/plans/2026-05-01-bench-rollup-design.md§3 PR 5 (lines 696-816), §4.1 (fairness), §4.4 (README markers), §4.5 (uPlot license block), §4.6 (.gitattributes), §5.X (loop-prevention), §5.Y (asset-path verification).