test(ci): sweep every module's effective javadoc config for silencers (#203) - #204
Merged
Merged
Conversation
…#203) The #200 poison canary only poisons rift-java-core, so it pins the ROOT pluginManagement. A per-module <failOnError>false</failOnError> override elsewhere leaves both the canary and the release build green while that module ships broken javadoc to Central. This adds a help:effective-pom sweep over the whole release reactor to catch per-module silencers. Also pins maven-help-plugin to avoid prefix-invoked goals resolving latest-on-Central at runtime, keeping the sweep reproducible.
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.
Closes #203
Summary
The #200 poison canary only poisons
rift-java-core, so it pins the ROOTpluginManagement. A per-module<failOnError>false</failOnError>override in another module leaves both the canary and the release build green while that module ships broken javadoc to Central.This PR adds a new
scripts/check-javadoc-strictness.pysweep that reads each module's effective javadoc configuration viahelp:effective-pomand rejects any silencer that could hide errors.Evidence
The hole was real, proved first: Injecting a per-module
<failOnError>false</failOnError>plus a broken{@link}intorift-java-jacksonprintederror: reference not foundtwice and still reportedBUILD SUCCESS.Configuration sweep: New
scripts/check-javadoc-strictness.pyreadshelp:effective-pom(the merged model—immune to whitespace, property indirection, or the setting living in another file) and rejects:failOnError(allowlist: onlytrue)skip,skippedModulesdoclintother thanall-Xdoclintoption disabling a groupmaven.javadoc.*/ baredoclintproperties (which need no<configuration>at all)Self-test mode (
--self-test): Runs in CI before the real sweep. Detects 14 silencer fixtures + 4run_checkround-trip cases + a strict fixture that must stay clean. Without it, a checker edit that stopped flagging anything would print "confirmed" forever.Module requirement guard (
--require): Names the 11 modules the JDK-21 +-DdualEmbeddedreactor must contain, so a module silently dropping out fails the sweep instead of shrinking it.Verification: Two review rounds found 5 blockers, each confirmed behaviourally before fixing:
maven.javadoc.failOnErrordoclintdoclint=syntax-Xdoclint:all,-missing,-reference--requireflag that silently no-op'dThe existing #200 canary is untouched (pure addition) and still passes. The two guards are complementary: canary = behaviour, sweep = configuration.
Known Limitation
The sweep reads POM-reachable configuration and cannot see a
-Dmaven.javadoc.failOnError=falseadded to a workflow's ownmvncommand line. This is documented in the script header andCONTRIBUTING.md, and being filed as a separate issue.Also pins
maven-help-pluginto avoid prefix-invoked goals resolving latest-on-Central, keeping the sweep reproducible.