Skip to content

6/7 Turn Plotly compat into a number, and correct §24's two wrong premises - #307

Closed
Alek99 wants to merge 2 commits into
claude/customization-capability-matrix-vckjxg-5-comparison-matrixfrom
claude/customization-capability-matrix-vckjxg-6-plotly-schema-coverage
Closed

6/7 Turn Plotly compat into a number, and correct §24's two wrong premises#307
Alek99 wants to merge 2 commits into
claude/customization-capability-matrix-vckjxg-5-comparison-matrixfrom
claude/customization-capability-matrix-vckjxg-6-plotly-schema-coverage

Conversation

@Alek99

@Alek99 Alek99 commented Jul 26, 2026

Copy link
Copy Markdown
Member

Stacked on #306.

§24 has asked since the audit for compat to be "a measured number" instead of vibes. Implementing it turned up two things the plan assumed that are not true.

Premise 1: plot-schema.json does not ship

Checked against plotly 4.14.3, 5.24.1, and 6.9.0 — it is a plotly.js artifact, and the Python package generates validator classes from it instead. The only surviving trace is a docstring reference in _plotly_utils/basevalidators.py.

The equivalent — and a better shape for this job, being one flat entry per dotted path — is plotly/validators/_validators.json. The real surface is 9,472 leaf attributes once compound namespaces and *src column-reference companions come out. The dossier estimated ~3,000; it was 3× low.

Premise 2: there is no Plotly shim to warn

The shipped shim is xy.pyplot, which is Matplotlib-flavored. So "supported" cannot mean "the shim accepts this attribute" — nothing would be accepting it. It means xy can express the same visual outcome, decided by a committed rule table in the script. 9,472 attributes cannot be audited one at a time, and a table implying they were would be fiction; every rule names the xy surface that answers it, so any row traces back to the claim that produced it.

The number

Scoped to the trace types xy implements plus layout: 344 supported, 126 mapped-with-difference of 3,387.

Whole-schema: 345 and 126 of 9,472, where the denominator is dominated by 3-D, geo, polar, and financial traces xy does not implement.

Both are published because either alone misleads — the first overstates by hiding its scope, the second understates by counting work never attempted. The report says so in as many words, and a test enforces that the sentence survives.

The honest residue

2,190 attributes land in unsupported/unclassified: no committed rule claims them. That bucket is reported rather than folded into a friendlier one, and shrinking it is how the table improves. tests/test_plotly_schema_coverage.py fails if it disappears, if the report is hand-edited, if *src companions pad the denominator, or if the scoped number loses its scope.

Both §24 and risk row 13 in the dossier are updated to match reality.

uv run pytest 2358 passed.


Generated by Claude Code

§24 has asked since the audit for compat to be "a measured number" instead of
vibes. Implementing it turned up two things the plan assumed that are not true.

**No published Plotly wheel ships `plot-schema.json`.** Checked against 4.14.3,
5.24.1, and 6.9.0: it is a plotly.js artifact, and the Python package generates
validator classes from it. The equivalent — and a better shape for this job,
being one flat entry per dotted path — is `plotly/validators/_validators.json`.
The real surface is 9,472 leaf attributes once compound namespaces and `*src`
column-reference companions come out, three times the ~3,000 the dossier
estimated.

**There is no Plotly shim to warn.** The shipped shim is `xy.pyplot`, which is
Matplotlib-flavored, so "supported" cannot mean "the shim accepts this
attribute" — nothing would be accepting it. It means XY can express the same
visual outcome, decided by a committed rule table in the script. 9,472
attributes cannot be audited one at a time, and a table implying they were would
be fiction; every rule names the XY surface that answers it, so any row can be
traced to the claim that produced it.

The number, scoped to the trace types XY implements plus `layout`: 344 supported
and 126 mapped-with-difference of 3,387. Whole-schema: 345 and 126 of 9,472,
where the denominator is dominated by 3-D, geo, polar, and financial traces XY
does not implement. Both are published because either alone misleads — the first
overstates by hiding its scope, the second understates by counting work never
attempted.

2,190 attributes land in `unsupported/unclassified`: no committed rule claims
them. That bucket is reported rather than folded into a friendlier one, and
`tests/test_plotly_schema_coverage.py` fails if it disappears, if the report is
hand-edited, if `*src` companions pad the denominator, or if the scoped number
loses the sentence that scopes it.
@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: 69b77e23-c883-4ff5-8021-f267f91d6a76

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-6-plotly-schema-coverage

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

…son-matrix' into claude/customization-capability-matrix-vckjxg-6-plotly-schema-coverage
@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-6-plotly-schema-coverage (9a59924) with main (62462ec)2

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.

  2. No successful run was found on claude/customization-capability-matrix-vckjxg-5-comparison-matrix (fad4989) during the generation of this report, so main (62462ec) was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@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