chore(deps): update every language's dependencies and release them together at 0.16.0 - #294
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #292
js: eslint 10.8.1 -> 10.9.1, bun-types 1.3.14 -> 1.4.0 (both lockfiles refreshed). python: pytest >=9.1, black >=26.5, isort >=9.0 (isort 8 -> 9 is a major bump; the suite and black/isort/flake8 checks pass unchanged). go: go directive 1.21 -> 1.24 and CI go-version 1.21 -> 1.26; the module has no external dependencies. rust: nom 8.0.0, syn 3.0.4, quote 1.0.47, proc-macro2 1.0.107 already resolve to the latest published versions, so Cargo.lock is unchanged. Refs #292
junit-jupiter 5.14.4 -> 6.1.3 (major; JUnit 6 requires Java 17+), spotless-maven-plugin 2.46.1 -> 3.10.1 (major), google-java-format 1.19.2 -> 1.36.1, and maven.compiler.release 11 -> 21. The other Maven plugins already pin the latest stable releases (compiler 3.15.0, surefire 3.5.6, jar 3.5.1, source 3.4.0, javadoc 3.12.0, gpg 3.2.8, central-publishing 0.11.0); the 4.x lines of compiler/jar/source are still beta and surefire 3.6.0-M1 a milestone, so those stay where they are. CI now sets up JDK 21 and the test matrix runs 21 and 25, the two current LTS releases, instead of 11/17/21. All 133 tests and spotless:check pass locally on JDK 21 with Maven 3.9.11. Refs #292
…line phpunit/phpunit ^10.5 -> ^13.3 (three majors) and squizlabs/php_codesniffer ^3.10 -> ^4.0 (one major). phpunit 13.3.2 declares "php": ">=8.4.1", so the package baseline moves with it: "php": ">=8.1" -> ">=8.4". That is a real restriction on consumers, taken deliberately per the issue - 8.1/8.2 are end-of-life and 8.3 is security-fixes only. No phpunit.xml or phpcs.xml change was needed: the existing <source>/<testsuites> schema is still what phpunit 13 reads, and PSR12 plus Generic.Files.LineLength still resolve under PHPCS 4. CI lints on 8.4 and the test matrix is 8.4 and 8.5 instead of 8.1-8.4. Verified in php:8.4-cli and php:8.5-cli containers: 183 tests / 497 assertions pass on both, phpcs reports no violations across the 21 files. Refs #292
TargetFramework net8 -> net10.0 for both projects and xunit 2.9.3 -> xunit.v3 4.0.0. The v3 test project is self-executing, so it needs <OutputType>Exe. The .NET 10 SDK dropped the VSTest path that used to run Microsoft.Testing. Platform projects, so csharp/global.json opts `dotnet test` into MTP mode. Under MTP, Microsoft.NET.Test.Sdk, xunit.runner.visualstudio and coverlet.collector are unused VSTest components (CI collects no coverage) and are dropped; xunit.v3 hosts the runner itself. Microsoft.CSharp is also dropped: on net10.0 it is part of the shared framework and NU1510 flags the reference. Pegasus 4.1.0, Platform.Collections 0.4.0 and Microsoft.SourceLink.GitHub 10.0.400 are already the latest published versions. CI, docfx and the Gitpod task move to the .NET 10 SDK; `dotnet test -f net8` becomes plain `dotnet test`, since MTP mode does not take -f. Verified with the 10.0.400 SDK: restore, build, `dotnet format --verify-no-changes`, 196/196 tests, and `dotnet pack` all succeed. Refs #292
…ement Dependabot only watched cargo, npm, pip and github-actions, so the maven, composer and gomod manifests were never offered updates. Add the three missing ecosystems with the same weekly schedule and labelling the other blocks use. The release audit compares each declared version against its registry and only warns, because a bump legitimately lands before the release that publishes it. Disagreement *between* the implementations has no such excuse: it reads only the working tree, so it is always a defect. Split the declaration readers into scripts/declared-versions.mjs, share them with the audit, and add scripts/version-consistency.mjs as a hard-failing check that runs on every pull request.
The dependency updates change what each package is built and tested against, so they need a release to reach anyone. Bump all seven declarations together — the point of the repository is that the implementations ship the same grammar at the same version — and record the work in the changelog. Part of #292
Keep the evidence the bumps were judged against: what each registry actually serves (the issue's own tables were already stale), which Maven artefacts were skipped because the newest one is a beta, what each suite reported, what the .NET 10 test-runner change forced, and the negative test proving the new consistency check fails on disagreement. Part of #292
The hooks are pinned by git tag, and had drifted from what the language manifests actually ask for: eslint 8 against js/package.json's 10, black 24.1 against pyproject's 26.5, isort 5.13 against 9.0. Bump all six to their current tags; doublify/pre-commit-rust has no newer one. pre-commit does not pass on this repository and did not before — the findings are in docs/, experiments/ and csharp/scripts/, never in a shipped implementation — so no reformatting is folded into this update. Part of #292
`pip install -e python/` writes python/links_notation.egg-info/, which nothing ignored, so a local editable install leaked five generated files into the previous commit. Untrack them and ignore *.egg-info/. Part of #292
Working session summaryAll 13 workflows are green on the final commit #294 — chore(deps): update every language's dependencies and release them together at 0.16.0 What landed against the six things #292 asked for:
Two things worth your attention:
The one CI failure along the way was a Maven Central 429 on the This summary was automatically extracted from the AI working session output. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $8.679596📊 Context and tokens usage:Claude Opus 5: (2 sub-sessions)
Total: (2.7K new + 180.0K cache writes + 10.1M cache reads) input tokens, 72.9K output tokens, $8.679596 cost 🤖 Models used:
📎 Log file uploaded as Gist (3515KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
🎉 Auto-mergedThis pull request has been automatically merged by hive-mind.
Auto-merged by hive-mind with --auto-merge flag |
Closes #292.
Updates every dependency in every language, takes the major bumps the issue calls for, releases all
seven implementations together at 0.16.0, and adds the CI that makes a version disagreement fail
instead of going unnoticed.
Dependencies
Every version below was read from the registry rather than from the tables in the issue — several of
those were already stale (
xunit.runner.visualstudiowas listed as needing 2.x→3.x when NuGetalready served 4.0.0; java and php were listed at 0.3.0/0.2.0 when both were already 0.15.0 on
main). After this pull request, every declared dependency equals its registry's current release;the snapshot is reproducible with
node experiments/issue-292/registry-latest.mjs.bun-types1.4.0,eslint10.9.1; peggy 5.1.0, typescript 7.0.2 and prettier 3.9.6 were already current. Lockfiles refreshedpytest9.1,pytest-timeout2.4,black26.5,isort9.0,flake87.3cargo updatelocked 0 packages; nom 8.0.0, syn 3.0.4, quote 1.0.47, proc-macro2 1.0.107 are currentnet8.0→net10.0, xunit 2 →xunit.v34.0.0;Microsoft.CSharpdropped (NU1510: it is in the framework on net10)maven.compiler.release11 → 21, spotless 3.10.1, google-java-format 1.36.1php >=8.1→>=8.4Four Maven plugins were deliberately left where they are: the newest
maven-compiler-plugin,maven-jar-pluginandmaven-source-pluginartefacts are 4.0.0 betas and the newestmaven-surefire-pluginis a 3.6.0 milestone, so the pom stays on the newest stable releases.CI images moved with the language requirements: Java
['11','17','21']→['21','25'], PHP['8.1','8.2','8.3','8.4']→['8.4','8.5'], .NET8.0.x→10.0.x, Go1.21→1.26. TheREADMEs that advertise a minimum version were updated to match.
The one bump that needed more than a version number
The .NET 10 SDK removed the VSTest path xunit v2 used, so
dotnet testfailed with "Testing withVSTest target is no longer supported by Microsoft.Testing.Platform on .NET 10 SDK and later".
Neither
<TestingPlatformDotnetTestSupport>nor adotnet.config[dotnet.test.runner]sectionfixes it; the documented opt-in is
csharp/global.json:{ "test": { "runner": "Microsoft.Testing.Platform" } }with the test project built as
<OutputType>Exe</OutputType>, because an xunit v3 project is its owntest host.
Microsoft.NET.Test.Sdk,xunit.runner.visualstudioandcoverlet.collectorare VSTestcomponents and are gone.
Peggy and Pegasus
Both were already at their current release (peggy 5.1.0, Pegasus 4.1.0). Regenerating
js/src/parser-generated.jsfromsrc/grammar.pegjsproduces a byte-identical file, and all 204JS tests pass, so the generated parsers are unchanged.
Releasing the languages together
All seven declarations move to 0.16.0 in one commit. Two new pieces of CI keep them there:
scripts/version-consistency.mjs— a new job onrelease-audit.yml, now also triggered onpull_request, that fails when the implementations declare different versions. It reads onlythe working tree, so a disagreement is always a defect and never a transient registry answer.
scripts/release-audit.mjs— unchanged in behaviour, refactored to share the declarationreaders via the new
scripts/declared-versions.mjs. It keeps warning on registry drift, becausea declared version being ahead of a published one is the normal state between a bump and the
release that publishes it — this very pull request is in it.
Five languages (js, python, rust, csharp, go) already match their registries. java and php have
never published anything — Maven Central holds nothing under
io.github.link-foundation:links-notationand Packagist holds nothing under
link-foundation/links-notation. That needs credentials this pullrequest cannot supply and is tracked in #192; what it can do, and does, is make the divergence
impossible to reintroduce silently.
Automated dependency updates
.github/dependabot.ymlwatchedcargo,npm,pipandgithub-actions, so Java, PHP and Go werenever offered updates. It now also watches
maven(/java),composer(/php) andgomod(/go),matching the existing blocks' weekly schedule, limits and labels.
Verification
Each major bump was kept only after its suite was run against it:
cargo testpassesdotnet format --verify-no-changesanddotnet packcleanspotless:checkandpackagecleanactionlintis clean on every changed workflow.The new check was also tested negatively — editing one declaration and nothing else:
The full evidence — registry snapshots, the Maven beta/milestone survey, the audit output after the
bump, and what each suite reported — is in
dev/log/issues/292/pulls/294/.