feat(bench): publication — first pinned-host run + canonical docs (sub-phase 9.6)#107
Merged
Conversation
…LR-16, sub-phase 9.6)
Closes out the benchmark suite. Three deliverables:
1. scripts/compare.py — pure-stdlib Python diff renderer.
Reads two JSON envelopes, matches samples by (workload,
driver), prints a Markdown table with deltas + ratios.
Same-version-only per Q8; cross-host pairs flagged.
2. First "official" pinned-host run committed under
benchmarks/results/ — 35 samples across all 12 workloads
× {SQLRite, SQLite-WAL+NORMAL, DuckDB on Group B}. M1 Pro,
macOS 23.5.0, criterion defaults (3 s warm-up + 5 s
measurement, 100 samples on light workloads / 10 on heavy
ones). The header `dirty=true` flag reflects 9.6's working-
tree state at run time (this PR's docs uncommitted); the
measurements only depend on the bench binary built from
the committed bench-9.5-duckdb tip.
3. docs/benchmarks.md — canonical user-facing reference.
Mirrors how docs/fts.md is the canonical FTS reference
for Phase 8: TOC, quick-start, what-the-suite-measures
summary, reading-the-numbers methodology (Q3 SQLite
tuning, parser tax, DuckDB OLTP weakness), the headline
table, the engineering debts surfaced (SQLR-18 / 19 /
20 / 21), reproducing-a-run + comparing-two-runs sections,
and a "what's NOT measured" section.
Top-level README.md gains a "Benchmarks" section pointing
at docs/benchmarks.md. docs/_index.md promotes benchmarks.md
into a top-level reference (alongside fts.md), and demotes
benchmarks-plan.md to a "design rationale, historical" pointer.
Plan-doc status banner updated to "all six sub-phases shipped."
The benchmarks/results/.gitignore is rewritten — instead of
the strict "ignore everything until 9.6" rule, it now
documents the convention ("only pinned-host runs get
committed; PR review enforces it") and allows *.json files
to be added explicitly. Local runs still show up as
untracked in `git status`, which is the prompt to either
commit them as official or leave them out.
Verification:
- cargo fmt --all -- --check clean
- cargo clippy -p sqlrite-benchmarks --all-targets clean
- Full CI-equivalent build / test / doc green
(--exclude desktop / python / nodejs / benchmarks)
- cargo test -p sqlrite-benchmarks passes (5 tests)
- compare.py syntax-checked; round-trips a synthetic
envelope pair into a Markdown diff
- Official run completed: 35 samples, see
benchmarks/results/2026-05-07-apple-9ffd55a5.json
Refs: SQLR-16 (parent execution).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
Summary
Sub-phase 9.6 of
docs/benchmarks-plan.md— closes out the benchmark suite (SQLR-4 / SQLR-16). Builds on 9.1–9.5 (#102 / #103 / #104 / #105 / #106).Three deliverables:
benchmarks/scripts/compare.py— pure-stdlib Python diff renderer. Reads two JSON envelopes, matches samples by(workload, driver), prints a Markdown table with deltas + ratios. Same-version-only per Q8; cross-host pairs flagged.benchmarks/results/2026-05-07-apple-9ffd55a5.json— 35 samples across all 12 workloads × {SQLRite, SQLite-WAL+NORMAL, DuckDB on Group B}. M1 Pro, macOS 23.5.0, criterion defaults.docs/benchmarks.md— canonical user-facing reference. Mirrors howdocs/fts.mdis the canonical FTS reference for Phase 8.Headline numbers (from the official run)
Note on
dirty=truein the JSON: working-tree state at run time was dirty (this PR's docs were uncommitted). The measurements themselves only depend on the bench binary built from the committed bench-9.5-duckdb tip; future official runs will land withdirty=false.Top-level README + docs/_index.md
docs/benchmarks.md.docs/_index.mdpromotesbenchmarks.mdto a top-level reference (alongsidefts.md), and demotesbenchmarks-plan.mdto a "design rationale, historical" pointer.benchmarks/results/.gitignorerewriteThe old rule was strict "ignore everything until 9.6." Now it documents the convention ("only pinned-host runs get committed; PR review enforces it") and allows
*.jsonto be added explicitly. Local runs still show up as untracked ingit status, which is the prompt to either commit them as official or leave them out.Test plan
cargo fmt --all -- --checkcleancargo clippy -p sqlrite-benchmarks --all-targetsclean (default features)cargo build / test / doc --workspace --exclude {desktop,python,nodejs,benchmarks}greencargo test -p sqlrite-benchmarks— 5 tests passcompare.pyround-trips a synthetic envelope pair into a Markdown diffmake bench-duckdbran end-to-end: 35 samples, all 12 workloads × all eligible driversWhat's left
The plan's exit criterion is met:
docs/benchmarks.mdexists, the README has a "Benchmarks" section pointing at it, the first dated results JSON is committed.Follow-ups still open (separately tracked, all "informational, not a release gate" per the plan):
Plan post-9.6 ideas still parked:
References
docs/benchmarks-plan.mddocs/benchmarks.mdbenchmarks/scripts/compare.pybenchmarks/results/2026-05-07-apple-9ffd55a5.json🤖 Generated with Claude Code