Repository navigation
chore(julia): move the render stack to Julia 1.13 and Makie 0.24 - #12245
Merged
Merged
Conversation
MarkusNeusinger
added a commit
that referenced
this pull request
Oct 23, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
The shared runtime upgrade has documented rendering regressions and a pending real Makie pipeline check that warrant human sign-off.
No open issues 🎉
What changed in this PR
Upgrades anyplot’s shared Julia rendering environment to Julia 1.13 and Makie 0.24, with matching dependency pins, displayed versions, and generator guidance.
Changes:
- Updates Julia, Makie, and CairoMakie compatibility and regenerates the dependency lockfile.
- Removes QRCoders to resolve its dependency conflict with newer Makie releases.
- Updates figure sizing examples and documents API changes and rendering workarounds.
| File | Description |
|---|---|
prompts/quality-criteria.md |
Marks QRCoders as unavailable to reviewed implementations. |
prompts/plot-generator.md |
Aligns the generator’s package list with the new environment. |
prompts/library/makie.md |
Updates sizing examples, version header, and API guidance. |
Project.toml |
Raises compatibility requirements and removes QRCoders. |
Manifest.toml |
Locks the upgraded Julia rendering dependencies. |
core/constants.py |
Updates displayed Julia and Makie versions. |
changelog.d/julia-1.13-makie-0.24.md |
Records the upgrade and compatibility impacts. |
.github/actions/setup-julia/action.yml |
Updates the default runtime and smoke-test sizing keyword. |
Review effort: Balanced
Makie 0.24.16 / CairoMakie 0.15.16 on Julia 1.13.2, up from Makie 0.21.9 on Julia 1.11.9. QRCoders leaves Project.toml: every release caps ImageCore at 0.9, while Makie >= 0.21.10 needs ImageBase 0.1.7 and therefore ImageCore 0.10. That conflict is what resolved Makie down to 0.21.9 when qrcode-basic (#9398) added QRCoders. - Project.toml compat and Manifest.toml, regenerated by Pkg in a julia:1.13.2 container - setup-julia installs 1.13 by default; its smoke test uses `size` - core/constants.py shows Makie 0.24 and Julia 1.13 - prompts/library/makie.md: `Figure(size = ...)` instead of the deprecated `resolution`, header line 0.24 / 1.13, and notes on the 0.24 APIs that broke catalogue implementations in the before/after render (arrows, text align, layout gaps, heatmap on PolarAxis, hash/Dict determinism, no QR encoder) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The generator and reviewer "compute with" blocks still named QRCoders after it left Project.toml; test_julia_block_matches_project_toml compares the two. Move it to the not-loadable list in both copies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MarkusNeusinger
force-pushed
the
chore/julia-1.13-makie-0.24
branch
from
October 23, 2026 10:02
00d5e91 to
b1fe0b0
Compare
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
Project.tomlcompat,Manifest.tomlregenerated by Pkg in ajulia:1.13.2container, setup-julia default1.13). Since refactor: derive library versions from pins, install from uv.lock #12240 the displayed versions derive from the Manifest and the setup-julia default, socore/constants.pyneeds no change.prompts/library/makie.md:Figure(size = …)replaces the deprecatedresolutionkeyword, the "API level" line names Makie 0.24, and a new "Makie 0.24 API Notes" section covers every break the before/after render found.Why Makie was stuck on 0.21.9
The qrcode-basic implementation (#9398) added QRCoders, and the resolver moved Makie from 0.22.10 down to 0.21.9. The chain, confirmed with the resolver in a
julia:1.13.2container:ImageCore = "0.8, 0.9".ImageBase >= 0.1.7.QRCode.jl, the only other QR package in the General registry, has the same ImageCore 0.8 to 0.9 cap. The new Manifest avoids the conflict by not carrying a QR encoder at all. The prompt now says so, so a regeneration does not reach for one.
plots/qrcode-basic/implementations/julia/makie.jlstops running in the new environment and is left untouched. Its catalogue PNGs stay valid until it is regenerated; the generator will have to hand-roll the encoder or returnNOT_FEASIBLE. An upstream compat PR to JuliaImages/QRCoders.jl (ImageCore 0.10) is a possible follow-up for the owner to decide.Before/after renders
All 325 Makie implementations in both themes, no sampling. Each render is its own
julia --project=<env> makie.jlprocess withANYPLOT_THEMEset, run from the implementation's directory as inimpl-generate.yml. The renders ran in officialjulia:1.11andjulia:1.13images with the action's apt packages. Before: Julia 1.11.9 with the committed Manifest. After: Julia 1.13.2 with exactly the Manifest in this PR. A pixel counts as changed when any channel moves by more than 16/255. "Near" means under 0.1 % of pixels changed.No render changed its pixel size.
Failures after the bump
All five are code written against old behaviour, not default drift:
QRCodersis no longer installed (see above).rowgap!/colgap!honour offset indices. After a header atfig[0, …],rowgap!(fig.layout, 1, …)names a gap that does not exist and raises "invalid row gap". bode-basic and spc-xbar-r use the same pattern without crashing; they now resize a different gap.arrows!called inside a custom recipe hits aMethodErrorin the 0.24 compatibility shim.Healed
BoundsErroratsave). It renders again on 0.24.Silent breakage
heatmap!on aPolarAxisdoes this in CairoMakie 0.15.15 and 0.15.16, for every input form, without an error;surface!andband!render. The canvas gate refuses it at review time (check_blank, AR-04: "Plot is 99% one color"), so a regeneration cannot merge blank. The prompt now forbidsheatmap!on aPolarAxisand names theband!workaround.The ten largest diffs
hash(::String); frame colors are chosen by hasheigenreturns PC1 with the opposite sign (mirrored plot); deprecated arrows draw thinner.0padding (0.24.11), shifting the axesshuffle!; different patientsrandperm; different pointsrandpermDefault drift is visible in the polar plots too: Makie 0.24.12 aligned the
PolarAxisdefaults withAxis, with a bold title, a thinner spine and lighter grid lines. Seededrandandrandnstreams are unchanged between Julia 1.11 and 1.13.Deprecated keywords
resolution: 122 implementations passFigure(resolution = …). All of them still render on 0.24 with a deprecation warning, so it is a warning, not a failure.arrows!: 16 implementations use the deprecatedarrows!. All render except feynman-basic, with warnings about the renamed attributes.Breaking changes handled in the prompt
From the Makie changelog 0.21.9 to 0.24.16 and the render results, each checked in the 1.13 container:
Figure(size = …)instead ofresolution(deprecated since 0.20).arrows2d!withshaftwidth/tipwidth/tiplength/tipcolor/shaftcolor(arrows!deprecated in 0.23).annotations!removed in 0.24, so the prompt namestext!and theannotation!recipe instead.text!alignmust be a tuple.shading = falseinstead ofNoShading.PseudologTicks/SymlogTicksforpseudolog10/Symlog10(0.24.11).series!color cycling (0.24.16).rowgap!/colgap!(GridLayoutBase 0.11.3).heatmap!on aPolarAxis.hash/Dictorder for colors.prompts/plot-generator.mdandprompts/quality-criteria.mdcarry identical Julia "compute with" blocks, which a unit test compares withProject.toml. Both now move QRCoders from the installed list to "Not loadable". In the rubric this corrects which packages are installed and changes no criterion or deduction, so I dispatched noreview-retestarm.Regeneration candidates
arrows!, and bode-basic / spc-xbar-r, whose header gap moved.First review (Gemini 3.8 Flash)
plot-generator.mdandquality-criteria.mdstill listed QRCoders as installed. The CI "Run Tests" job failed on that test before the fix.arrows2d!,PseudologTicksandSymlogTicksdon't exist. All three are defined in Makie 0.24.16, checked in the container.Manifest.tomlis committed.plots/is out of scope, and the pipeline regenerates them.Dependencies and verification gaps
core/constants.pyand themakie.mdheader line take its form, and its "API level:" line now names Makie 0.24, whichtests/unit/core/test_version_sources.pychecks against the Manifest.Pkg.instantiate()on this Manifest and the action's smoke test both pass injulia:1.13.2. The first real check is the next Makieimpl-generaterun.Plan
N/A
Test plan
julia:1.11/julia:1.13containersPkg.instantiate()and the action's smoke test on this Manifest injulia:1.13.2ruff check,ruff format --check,mypy api core,pytest tests/unit tests/integration(12,277 passed)uv run python -m tools.changelog check --base origin/mainimpl-generaterun installs Julia 1.13 and renders