Skip to content

5/7 Commit the customization comparison, losses included - #306

Closed
Alek99 wants to merge 3 commits into
claude/customization-capability-matrix-vckjxg-4-capability-registryfrom
claude/customization-capability-matrix-vckjxg-5-comparison-matrix
Closed

5/7 Commit the customization comparison, losses included#306
Alek99 wants to merge 3 commits into
claude/customization-capability-matrix-vckjxg-4-capability-registryfrom
claude/customization-capability-matrix-vckjxg-5-comparison-matrix

Conversation

@Alek99

@Alek99 Alek99 commented Jul 26, 2026

Copy link
Copy Markdown
Member

Stacked on #305.

Performance claims here are backed by a committed methodology and a rerunnable harness. Customization claims had nothing, which is why "more customizable than Plotly" was unanswerable rather than merely unproven.

spec/api/customization-vs-alternatives.md gives it the same treatment.

Method

  • Versions pinned and recorded, taken from benchmarks/requirements-ci.in: Plotly 6.9.0, Bokeh 3.9.1, Altair 6.2.2 (Vega-Lite 6), Matplotlib 3.11.1.
  • Every row names its methodschema (counted from a machine-readable schema, reproducible), code (read from source, symbol named), or docs (the library's own documentation, which is right for intended-contract questions and wrong for coverage counts).
  • Same-work comparison, the benchmark harness's rule 2: where two libraries solve a problem in incomparable ways the row says so rather than picking the framing that flatters xy.
  • The xy column is not typed in — countable parts are checked against xy.styling.capabilities by tests/test_customization_comparison.py.

The loss table is the point

xy loses on total attribute surface by roughly three orders of magnitude, on chart families, on writing a genuinely new mark, on custom rendering primitives, on a style-defaults file format, and on two export paths.

A matrix where one library wins everything is evidence of nothing, so the tests fail if the loss table is emptied, if a loss stops naming who wins, if a quoted version drifts from the pins, or if the "do not claim breadth" rule disappears.

Note

spec/benchmarks/methodology.md promises a standing "where XY loses" table — "Nothing buys credibility like published losses." — and no such table was ever written. This is that table, for the dimension that needed it most. The benchmark one is still outstanding.

uv run pytest 2352 passed.


Generated by Claude Code

Performance claims in this repo are backed by a committed methodology and a
harness anyone can rerun. Customization claims had nothing, which is why "more
customizable than Plotly" was unanswerable rather than merely unproven.

`spec/api/customization-vs-alternatives.md` gives it the same treatment: pinned
competitor versions taken from `benchmarks/requirements-ci.in`, a named method
on every row (`schema` for anything counted from a machine-readable schema,
`code` for anything read from source with the symbol named, `docs` for
intended-contract questions where the library's own documentation is the right
source), and a copyable claim taxonomy modelled on the benchmark one.

The loss table is the point, not an appendix. XY loses on total attribute
surface by roughly three orders of magnitude, on chart families, on writing a
genuinely new mark, on custom rendering primitives, on a style-defaults file
format, and on two export paths. A matrix where one library wins everything is
evidence of nothing, so `tests/test_customization_comparison.py` fails if the
loss table is emptied, if a loss stops naming who wins, if a quoted version
drifts from the pins, or if the "do not claim breadth" rule disappears.

The XY column is not typed in either: the countable parts are checked against
`xy.styling.capabilities`, so the comparison cannot quietly overstate what the
registry knows.

`spec/benchmarks/methodology.md` promised a standing "where XY loses" table and
never grew one. This is that table, for the dimension that needed it most.
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: eaab452c-4b61-49b1-b0fe-528401e9f6f9

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/customization-capability-matrix-vckjxg-5-comparison-matrix

Comment @coderabbitai help to get the list of available commands.

Alek99 added 2 commits July 26, 2026 02:25
…ity-registry' into claude/customization-capability-matrix-vckjxg-5-comparison-matrix
The axis-key number was the one figure in this document that no test checked,
and it had drifted from 15 to 16 without anything noticing — found by a
fresh-agent evaluation, not by the suite, which is the wrong way round.

An unpinned number in a document whose whole argument is 'these numbers are
checkable' is worse than no number, so it now comes from
capabilities.summary() like the other two.
@codspeed-hq

codspeed-hq Bot commented Jul 26, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 103 untouched benchmarks
⏩ 2 skipped benchmarks1


Comparing claude/customization-capability-matrix-vckjxg-5-comparison-matrix (fad4989) with claude/customization-capability-matrix-vckjxg-4-capability-registry (5d8e9c4)

Open in CodSpeed

Footnotes

  1. 2 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@Alek99 Alek99 closed this Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant