Skip to content

deps(js): bump MUI X Charts to 9.16 with React 19 and Material 9.5 - #12243

Merged
MarkusNeusinger merged 3 commits into
mainfrom
chore/muix-9
Oct 23, 2026
Merged

MarkusNeusinger merged 3 commits into
mainfrom
chore/muix-9

Conversation

@MarkusNeusinger

@MarkusNeusinger MarkusNeusinger commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

Note

The owner decided on 2026-10-23 to merge this PR and bulk-regenerate all 323 MUI X implementations afterwards.

Summary

  • Bumps the JS render stack in the root package.json via npm: @mui/x-charts 7.29.1 → 9.16.0, @mui/material 5.18.0 → 9.5.0, react / react-dom 18.3.1 → 19.3.1. These are the React and Material versions app/ already runs. Emotion stays on 11.14.x, which satisfies the new peer ranges. The tree resolves to one copy each of React, Material, @mui/system and @mui/utils.
  • Moves the API level in prompts/library/muix.md to MUI X Charts 9, the major the lock now pins. Adds a "MUI X v9 API" section, an axis-size rule in Sizing, and a legend-band allowance in both code examples. Since refactor: derive library versions from pins, install from uv.lock #12240, the displayed version comes from the lock, so core/constants.py needs no change.
  • Leaves automation/js-render/render.mjs and the setup-node guard component unchanged. The guard snippet renders 3200 × 1800 under the new stack.

Before and after renders

Every MUI X implementation was rendered in both themes with the old pins and then with the new ones (646 renders each), and the PNGs were compared with PIL. Renders are deterministic: 44 of 44 repeat renders of the old stack were pixel-identical. So any differing pixel counts as a change, with no tolerance.

Result per spec v9.16.0 (this PR) v8.29.3 (tested, not proposed)
Identical in both themes 2 6
Changed 157 313
Failed to render 164 4

The changed v9 renders differ in a median of 13 % of their pixels, with a maximum of 69 %.

The v8.29.3 column shows that staying on v8 would not avoid the regressions. v8 keeps the ChartContainer path, but the legend, axis-size and margin changes that cause most of the visual damage landed in v8. Under v8, 135 specs get a blank axis.

Failures

All 164 failures happen at esbuild bundle time, so nothing is drawn:

Cause Specs
@mui/x-charts/ChartContainer subpath removed; v9 renamed it ChartsContainer and has no alias 160
ChartContainer imported from the package root (heatmap-periodic-table, qrcode-basic) 2
lineElementClasses removed, now lineClasses.line (line-styled) 1
DefaultChartsLegend removed (pie-basic) 1

A bundle stops at its first error, so further v9 problems may surface in these files once the import is fixed.

Ten largest diffs (light theme)

Spec Pixels changed Cause
area-stacked 68.9 % Area fillOpacity set via .MuiAreaElement-root no longer applies, so fills turn opaque. The strict x domain drops the empty trailing month, and the legend marks become lines.
streamgraph-basic 67.2 % The y axis hidden with leftAxis={null} reappears. The same stackOrder: "insideOut" and stackOffset: "wiggle" now produce a different layer order and a flatter baseline.
area-stacked-percent 65.6 % Lost area opacity, layout shift from the new axis sizing, and line-style legend marks.
area-stacked-confidence 64.3 % Prediction-interval bands styled per series lose their opacity, and a second legend appears.
learning-curve-basic 62.1 % ±1 SD bands styled via .MuiAreaElement-series-<id> turn opaque and cover the lines. Marks cycle shapes, and the x tick labels go blank.
area-basic 61.8 % The gradient fill set through .MuiAreaElement-root falls back to solid. The x tick labels go blank, and a legend appears.
histogram-cumulative 59.0 % The fill turns opaque, the legend hidden with slotProps.legend.hidden reappears, and the x tick labels go blank.
survival-kaplan-meier 58.0 % Confidence bands turn opaque, so one group's band covers the whole plot. Marks cycle shapes.
line-filled 55.4 % The gradient fill falls back to solid.
line-impurity-comparison 53.1 % Area fills turn opaque, so the entropy curve's fill hides the Gini curve's fill.

Silent regressions in the charts that still render

These v7 options are not rejected in v9. They are ignored.

v7 usage, now ignored Specs (all 323) Of the 159 that render
sx selectors on classes v9 removed (.MuiAreaElement-*, .MuiLineElement-series-*, .MuiBarElement-root, …) 95 80
slotProps.legend.hidden, so the legend reappears 76 76
v7 legend direction / position values 102 67
v7 legend styling props (labelStyle, itemMarkWidth, markGap, itemGap, padding) 83 53
topAxis / leftAxis / bottomAxis / rightAxis props, so hidden axes reappear 25 25
tickFontSize / labelFontSize 52 36

A DOM probe over all 159 rendered charts found 67 specs with at least one axis whose tick labels are all empty. The old stack has 4 such specs, and none of them overlap with the 67. The cause is confirmed in isolation. Since v8, an x axis reserves a 25 px band (a y axis 45 px) and truncates tick labels that don't fit. An axis label with labelStyle plus an enlarged tickLabelStyle overflows that band, and every label is emptied. A numeric height or width fixes it. "auto" did not fix it reliably in the harness.

The legend is now HTML outside the SVG and adds about 30 px on top of height. With the usual height={window.ANYPLOT_SIZE.height}, the chart root is 932 px in the 900 px mount, and the bottom is cropped from the PNG. This happens to the guard snippet too. It still passes because it checks only the PNG size.

hexbin-map-geographic renders under v9 but logs a NaN polygon console error.

Harness changes

None. React 19 still ships CommonJS, so the harness's import React from "react", createRoot and React.createElement entry bundles unchanged. ThemeProvider / createTheme from @mui/material/styles work the same in Material 9. The draw check still finds the <svg>, which v9 wraps in an HTML layer container. The setup-node guard snippet (.github/actions/setup-node/action.yml) renders 3200 × 1800 locally.

Breaking changes handled in the prompt

prompts/library/muix.md, verified against the installed 9.16.0 types and by rendering test snippets in the harness:

  • Composition. ChartsContainer from @mui/x-charts/ChartsContainer. In a composed chart the HTML legend goes inside ChartsDataProvider + ChartsWrapper and outside ChartsSurface.
  • Legend. hideLegend replaces slotProps.legend.hidden. direction takes horizontal or vertical, and position.horizontal takes start, center or end. Styling goes through slotProps.legend.sx. A visible top or bottom legend needs about 40 px subtracted from height.
  • Axes. Hide an axis with position: "none". Fonts go through labelStyle / tickLabelStyle. Size the axis band with a numeric height (x) or width (y) whenever fonts grow. margin is now the space outside the axes.
  • Line charts. showMark defaults to false, marks cycle shapes (shape: "circle" keeps them uniform), and the x domain is strict (domainLimit: "nice").
  • CSS classes are per chart. For example .MuiLineChart-area and .MuiBarChart-element. [data-series="<id>"] sits on line and area paths, and on the series group for bars.
  • Series. id is a string that is unique across the chart. RadarChart is stable. SparkLineChart takes color, not colors.
  • Coverage. Heatmap, Funnel and Sankey are Pro-only. The old prompt listed funnel as community, but neither 7.29.1 nor 9.16.0 ships it.
  • Examples and API level. Both code examples subtract the legend band. The **API level:** line names MUI X Charts 9. The example header lines keep refactor: derive library versions from pins, install from uv.lock #12240's form without a number.

Blast radius

The root package.json and package-lock.json feed only the pipeline's render step: impl-generate and impl-repair, and daily-regen through them. The agent-network renderer is Python-only and never loads this stack. The site shows the PNGs and HTML already stored in GCS, and those stay untouched until an implementation is regenerated. After a merge, any regeneration or repair of an existing MUI X implementation starts from v7 code that either fails to bundle or renders with the regressions above. New MUI X implementations are generated against the updated prompt.

What a regeneration must do

A forced regeneration (regen_gate=false, Opus with the repair loop) gets the v9 notes from prompts/library/muix.md. This is the delta to apply to v7 code:

  • Import ChartsContainer from @mui/x-charts/ChartsContainer in place of ChartContainer (the @mui/x-charts/ChartContainer path and the root export are gone). Replace DefaultChartsLegend with ChartsLegend, and lineElementClasses with the per-chart classes.
  • Give every axis whose fonts were enlarged, or that has a label, a numeric band: height on x axes, width on y axes. Without it the tick labels come out blank.
  • Move legend config to v9: hideLegend instead of slotProps.legend.hidden; direction: "horizontal" | "vertical"; position.horizontal: "start" | "center" | "end"; styling via slotProps.legend.sx. Subtract the legend band (about 40 px) from height when a legend shows above or below the chart.
  • Rewrite sx selectors on removed classes (.MuiAreaElement-*, .MuiLineElement-*, .MuiMarkElement-series-*, .MuiBarElement-root, …) to .MuiLineChart-area, .MuiLineChart-line, .MuiLineChart-mark or .MuiBarChart-element, plus [data-series="<id>"] for one series.
  • Replace topAxis / leftAxis / bottomAxis / rightAxis props, including leftAxis={null}, with position in the axis config ("none" hides it). Replace tickFontSize / labelFontSize with tickLabelStyle / labelStyle.
  • On line charts, set showMark: true where dots are wanted and shape: "circle" for uniform dots. Set domainLimit: "nice" on the x axis where the old padded domain mattered.
  • Re-render and check that nothing is cropped at the bottom and no axis has blank or 0… tick labels.

Regeneration candidates

The per-spec classification is in /tmp/claude-1000/-home-meake-projects-anyplot/cd03bb60-b280-4230-bfe2-83fcd57e888f/scratchpad/bump-muix/muix-9-per-spec.csv on the machine that ran the comparison. It has one row per spec: result, failure class, pixel fraction per theme, whether an axis is blank, and flags for each ignored v7 usage.

All 323 MUI X implementations were written against v7. In priority order:

  1. The 164 specs that no longer bundle.
  2. The 67 rendered specs that lose all tick labels on an axis.
  3. The remaining 90 rendered specs. Most of them changed through the ignored options above.
164 specs that fail to bundle

alluvial-basic, alluvial-opinion-flow, arc-basic, bar-3d-categorical, bar-error, bar-pareto, bar-permutation-importance, bifurcation-basic, biplot-pca, box-basic, box-grouped, box-horizontal, box-notched, boxen-basic, bubble-basic, bubble-packed, calibration-beer-lambert, campbell-basic, candlestick-basic, candlestick-volume, cat-box-strip, chernoff-basic, chessboard-basic, chord-basic, circlepacking-basic, circos-basic, climograph-walter-lieth, coefficient-confidence, column-stratigraphic, contour-filled, contour-map-geographic, curve-dose-response, datamatrix-basic, dendrogram-basic, dendrogram-radial, diagnostic-regression-panel, dot-matrix-proportional, dumbbell-basic, energy-level-atomic, errorbar-asymmetric, errorbar-basic, facet-grid, feynman-basic, flamegraph-basic, flowmap-origin-destination, forest-basic, frontier-efficient, funnel-basic, genome-track-multi, heatmap-annotated, heatmap-basic, heatmap-chromagram, heatmap-clustered, heatmap-cohort-retention, heatmap-loss-triangle, heatmap-mandelbrot, heatmap-periodic-table, heatmap-polar, heatmap-risk-matrix, histogram-capability, histogram-density, histogram-epidemic, histogram-kde, histogram-returns-distribution, hive-basic, horizon-basic, icicle-basic, indicator-ichimoku, indicator-macd, indicator-rsi, lightcurve-transit, line-3d-trajectory, line-growth-percentile, line-reaction-coordinate, line-styled, line-tanabe-sugano, line-training-load-pmc, logistic-regression, lollipop-basic, lollipop-grouped, ma-differential-expression, map-connection-lines, map-marker-clustered, map-projections, map-route-path, marimekko-basic, mohr-circle, network-basic, network-bipartite, network-directed, network-force-directed, network-hierarchical, network-transport-static, network-weighted, ohlc-bar, parallel-basic, parallel-categories-basic, parliament-basic, phase-diagram, piano-roll-midi, pie-basic, point-and-figure-basic, point-basic, polar-bar, polar-basic, polar-line, polar-scatter, probability-weibull, qq-basic, qrcode-basic, quiver-basic, radar-basic, radar-innovation-timeline, radar-multi, raincloud-basic, recurrence-basic, renko-basic, ridgeline-basic, rug-basic, sankey-basic, scatter-3d, scatter-ashby-material, scatter-basic, scatter-complex-plane, scatter-embedding, scatter-lag, scatter-pitch-events, scatter-regression-linear, scatter-regression-lowess, scatter-regression-polynomial, scatter-shot-chart, sequence-logo-basic, skewt-logp-atmospheric, smith-chart-basic, sn-curve-basic, spc-xbar-r, spectrogram-basic, spectrogram-mel, spiral-timeseries, star-chart-constellation, stem-basic, stereonet-equal-area, streamline-basic, strip-basic, surface-basic, swarm-basic, ternary-basic, ternary-density, tree-decision, tree-phylogenetic, treemap-basic, venn-basic, venn-labeled-items, violin-basic, violin-box, violin-grouped-swarm, violin-split, violin-swarm, voronoi-basic, waffle-basic, waterfall-basic, windbarb-basic, windrose-basic, wireframe-3d-basic

67 rendered specs with an axis whose tick labels are all blank

area-basic, area-cumulative-flow, area-elevation-profile, audiogram-clinical, band-basic, bar-diverging, bar-diverging-likert, bar-feature-importance, barcode-ean13, bland-altman-basic, bubble-map-geographic, bump-basic, chessboard-pieces, confusion-matrix, contour-3d, contour-basic, contour-decision-boundary, contour-density, density-basic, density-rug, ecdf-basic, elbow-curve, funnel-meta-analysis, gain-curve, heatmap-geographic, heatmap-rainflow, hexbin-basic, histogram-2d, histogram-cumulative, histogram-stepwise, indicator-bollinger, indicator-ema, indicator-sma, learning-curve-basic, line-annotated-events, line-arrhenius, line-basic, line-confidence, line-multi, line-pca-variance-cumulative, line-stepwise, line-stock-comparison, line-stress-strain, line-timeseries-rolling, pdp-basic, phase-diagram-pt, psychrometric-basic, pyramid-basic, range-interval, residual-plot, roc-curve, root-locus-basic, scatter-categorical, scatter-color-mapped, scatter-connected-temporal, scatter-constellation-diagram, scatter-hr-diagram, scatter-map-geographic, shap-summary, silhouette-basic, span-basic, spectrum-basic, spectrum-nmr, spirometry-flow-volume, step-basic, titration-curve, waveform-audio

Reviews

  • Gemini 3.8 Flash (first review): "sound with changes". It confirmed every v9 name in the prompt against the installed type definitions and found no React 19 or Material 9 problem in the harness. Two of its four low-severity findings are applied in 7a371ef (f355836 before the rebases): the prompt now says showMark: true is needed for dots, and names DefaultChartsLegend among the removed imports. Two are skipped. The guard snippet's legend overflow doesn't matter because the guard checks only the bundle and PNG size. A selector for all area fills is already covered by the .MuiLineChart-area class in the list.
  • Copilot: reviewed f355836, the pre-rebase head, with no inline comments and "No open issues". Its only note repeats the regeneration caveat. No fixes were pushed, so no second round was requested.

Rebased on #12240

The branch is rebased on main after #12240 merged (7a9e411). core/constants.py takes main's side, because the "version" key no longer exists there. prompts/library/muix.md takes main's example header lines, which carry no number, and its **API level:** line now names MUI X Charts 9, which tests/unit/core/test_version_sources.py checks against the lock. The branch is then rebased again on the Highcharts bump (#12246, 99010bc). package.json and package-lock.json take main's side, and the four pins are re-applied with npm install --save-exact. The resulting lock differs from this PR's earlier lock only in main's Highcharts 13.1.1 entry, and npm ci accepts it. #12246 also fixed the ready-signal timeout in render.mjs. MUI X renders are unaffected, because the React entry sets the signal: the guard PNG is byte-identical, and the four pilot specs that render are pixel-identical to the earlier after renders.

Plan

N/A

Test plan

  • Rendered all 323 MUI X implementations in both themes before and after the bump, and compared the PNGs with PIL (tables above). A repeat pass on the old stack was pixel-identical.
  • Rendered the setup-node guard snippet under the new stack: 3200 × 1800 PNG and HTML written.
  • Rendered both code examples extracted from the edited prompt. They bundle, and the chart root fits the 900 px mount (889 px).
  • Rendered test snippets for every API the new prompt section names, and probed the DOM for class names, [data-series] placement, hideLegend, position: "none", legend sx and the axis truncation fix.
  • Ran uv run ruff check ., ruff format --check, mypy api core, pytest tests/unit tests/integration (12,277 passed), and tools.changelog check.
  • After the rebases on refactor: derive library versions from pins, install from uv.lock #12240 and chore(js): bump Highcharts to 13.1.1 #12246: test_version_sources.py, test_constants.py and the prompt tests (581 passed), ruff, ruff format, mypy and the changelog check. core.library_versions reads muix 9.16.0, API level 9, and Highcharts 13.1.1 from the lock.
  • Not verifiable before merge: the generator-side prompt change and the new stack in CI only show on real impl-generate runs. No PR check runs the setup-node action. Watch the first MUI X generation after merge.

MarkusNeusinger added a commit that referenced this pull request Oct 22, 2026
…notes

Gemini 3.8 Flash first review on #12243: a circle shape alone draws
nothing while showMark defaults to false, and DefaultChartsLegend is
one of the removed v7 imports (pie-basic). Also rewraps one long line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The documented 164 bundle failures and 67 blank-axis regressions require the owner’s regeneration decision and coordination with #12240 before merge.

No open issues 🎉

What changed in this PR

Upgrades the pipeline’s JavaScript render stack to MUI X Charts 9.16, Material 9.5, and React 19, with generation guidance for the breaking API changes. Existing published artifacts remain unchanged until regeneration.

Changes:

  • Updates dependency pins and the lockfile for the new render stack.
  • Adds v9 guidance for composition, legends, axes, styling, and chart sizing.
  • Updates the displayed library version and documents the catalogue compatibility impact.
File Description
prompts/​library/​muix.md Adds v9 migration guidance and adjusts example heights for legends.
package.json Bumps MUI Charts, Material, React, and React DOM.
package-lock.json Locks the upgraded stack and its transitive dependencies.
core/​constants.py Updates the displayed MUI X Charts version to 9.16.0.
changelog.d/​muix-9.md Records the upgrade and existing implementations’ regeneration needs.

Review effort: Balanced

MarkusNeusinger added a commit that referenced this pull request Oct 23, 2026
…notes

Gemini 3.8 Flash first review on #12243: a circle shape alone draws
nothing while showMark defaults to false, and DefaultChartsLegend is
one of the removed v7 imports (pie-basic). Also rewraps one long line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MarkusNeusinger and others added 3 commits October 23, 2026 12:08
The JS render harness pins @mui/x-charts 9.16.0, @mui/material 9.5.0
and react / react-dom 19.3.1 (from 7.29.1, 5.18.0 and 18.3.1), the
React and Material versions the frontend already runs. Installed with
npm; emotion stays on 11.14.x, which satisfies the new peer ranges.

prompts/library/muix.md moves its API level to MUI X Charts 9, the
major the lock now pins (tests/unit/core/test_version_sources.py), and
gains a "MUI X v9 API" section covering what breaks or silently
restyles generated code (ChartsContainer, hideLegend and the legend
position values, the HTML legend's extra height, position "none" for
axes, per-chart CSS classes and [data-series], line-mark defaults). The
Sizing section adds the explicit axis height/width rule, because v9
truncates tick labels that overflow the axis band, and both code
examples subtract the legend band. The displayed version now comes from
the lock, so core/constants.py is unchanged.

render.mjs and the setup-node guard component need no change: the
guard renders 3200x1800 under the new stack.

Existing MUI X implementations were written for v7. Under v9, 164 of
323 no longer bundle (mostly the removed @mui/x-charts/ChartContainer
path), and 157 of the 159 that render change. The owner decided on
2026-10-23 to merge and regenerate all MUI X implementations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175hA62juZoajMcqKxWFGza
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…notes

Gemini 3.8 Flash first review on #12243: a circle shape alone draws
nothing while showMark defaults to false, and DefaultChartsLegend is
one of the removed v7 imports (pie-basic). Also rewraps one long line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MarkusNeusinger
MarkusNeusinger merged commit 5234ec8 into main Oct 23, 2026
15 checks passed
@MarkusNeusinger
MarkusNeusinger deleted the chore/muix-9 branch October 23, 2026 10:15
MarkusNeusinger added a commit that referenced this pull request Oct 23, 2026
…#12259)

## Summary
- **Playwright 1.55.1 → 1.64.1** in the root `package.json` and
`package-lock.json`. GitHub's `ubuntu-latest` now resolves to Ubuntu
26.04 (image 20261012.163.1). Playwright 1.55.1 has no `ubuntu26.04-x64`
host platform, so `npx playwright install --with-deps chromium` in
`.github/actions/setup-node` failed (run 39938127853). Every
`impl-generate`/`impl-repair` run for chartjs, d3, echarts, highcharts
and muix died in setup. 1.64.1 ships the 26.04 download paths and apt
dependency list. The lock diff is playwright + playwright-core plus the
darwin-only `fsevents` optional entry that 1.64 no longer declares.
esbuild stays at 0.28.1. Integrity hashes match the registry. This also
aligns with the `playwright-core@1.64.1` pin that
`scripts/site-smoke.mjs` and `ci-image.yml` already use.
- **Ruff format fix no longer part of this PR.** This branch first
carried the two PEP 758 `except` lines that main's lint needed. #12260
landed the identical lines, and after merging main they collapsed, so
the diff is Playwright only.
- Supersedes Dependabot #12251 for the Playwright half; its esbuild
0.28.2 half is left to Dependabot.

## Plan
N/A

## Test plan
- [x] **The action's own steps on Ubuntu 26.04, in a container.**
`ubuntu:26.04` (26.04.1 LTS, resolute) with Node 22.23.3 (the action's
default `node-version: "22"`). Every `run:` step of
`.github/actions/setup-node/action.yml` ran verbatim against a minimal
checkout:
- **1.64.1:** `npm ci`, `npx playwright install --with-deps chromium`
(apt deps + Chrome for Testing 156.0.8078.4) and both smoke renders all
pass. The chartjs PNG and the MUI X React-path PNG are both 3200×1800.
- **1.55.1 (negative control):** the install fails with exactly the CI
error, `Error: ERROR: Playwright does not support chromium on
ubuntu26.04-x64`.
- [x] Render comparison: 1.55.1 (Chromium 140.0.7339.186) against 1.64.1
(Chromium 156.0.8078.4). Each harness was confirmed to launch its own
build. The sample is 17 catalogue snippets × 2 themes = 34 pairs,
rendered the way the pipeline calls the harness:
- chartjs: 4 snippets. d3: 3. echarts: 4. highcharts: 3. muix: 3. Six of
them are square-orientation.
- **All 34 pairs are pixel-identical:** 0.000 % of pixels differ and the
content bounding boxes match. Only the PNG encoding bytes differ.
- [x] **MUI X sample excluded two snippets.** Two sampled muix snippets
(`spiral-timeseries`, `biplot-pca`) import
`@mui/x-charts/ChartContainer`. MUI X 9.16 (#12243) no longer exports
that path, so both fail identically under BOTH Playwright versions. This
is the known #12243 blast radius, and the muix bulk regeneration covers
it. The muix sample therefore uses three snippets that still bundle.
- [x] `ruff check`, `ruff format --check`, `mypy api core`, `pytest
tests/unit tests/integration` (12715 passed) and `tools.changelog check`
are green locally.

## Known gaps
- **No PR check runs `.github/actions/setup-node`.** Only
`impl-generate.yml` and `impl-repair.yml` use it, and neither runs on
pull requests. A green PR therefore does not prove the install on the
real runner. The 26.04 container run above is the closest local proof:
same OS release, same Node major, same verbatim steps. The GitHub runner
image adds preinstalled software on top of that.
- **The real test is the first `impl-generate` run for a JavaScript
library after the merge.** The muix bulk-regeneration pilot will be that
run.
- **Steps after setup are also untested on 26.04.** No `impl-generate`
run has yet passed setup on the new image. Python, uv and the pngquant
apt install already pass there (run 39938127853, steps 9–13). Claude,
image processing and the GCS upload have not run on 26.04 yet.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

2 participants