Skip to content

zu-java holds the stability item - #580

Merged
tamnd merged 1 commit into
mainfrom
java-stability
Aug 22, 2026
Merged

zu-java holds the stability item#580
tamnd merged 1 commit into
mainfrom
java-stability

Conversation

@tamnd

@tamnd tamnd commented Aug 22, 2026

Copy link
Copy Markdown
Owner

tamnd/zu-java#14 landed the surface gate, so the scorecard says so.

api/surface.txt has one line for every exported type and every member a caller outside the module can name, across the two packages the module exports. SurfaceTest regenerates it from the compiled classes and compares, so moving the API means moving that file, in the same commit, at the top of the diff rather than buried in one.

The file name and the place are zu-go's on purpose. That client already keeps its published names in api/surface.txt, in the shape of the api/go1.N.txt files Go holds itself to, and a reviewer moving between the two should not have to learn a second mechanism.

There is no japicmp and no revapi, and that is a decision rather than an omission. Both of them compare against a published baseline, and nothing from this repository is published yet, so today they would compare against nothing. A checked-in file compares against the last commit instead, which is what a reviewer has in front of them, and it keeps working the same way after the first release.

The part worth knowing about is that nothing in the generated file comes from Class.toGenericString. JDK 21 leaves the sealed marker out of it and JDK 25 puts it in, so the first version of the gate would have gone red on two rows of the api matrix for a change nobody made. A gate that cries wolf on a version matrix is a gate that gets turned off. It is all read off the class file now, and the output is byte for byte identical on 21 and 25.

That is 60 to 70 on practice. What is left for zu-java is leaks and install, which are apparatus, and api-map and perf, which are reports the release collects.

docs/clients/overview.md is regenerated by cargo run -q -p xtask -- clients and not hand-edited.

api/surface.txt has a line for every exported type and every member a
caller outside the module can name, and a test regenerates it and compares,
so a change to the API is a change to that file in the same commit. Same
file name and same place as zu-go, because a reviewer moving between the
clients should not have to learn a second mechanism.

No japicmp and no revapi: both compare against a published baseline and
nothing is published yet. A checked-in file compares against the last
commit, which is what a reviewer is looking at anyway.

tamnd/zu-java#14. That takes the practice score to 70, and what is left is
leaks and install, which are apparatus, and api-map and perf, which are
reports the release collects.
@tamnd
tamnd merged commit c9c8b9f into main Aug 22, 2026
38 of 40 checks passed
@tamnd
tamnd deleted the java-stability branch August 22, 2026 09:52
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