Skip to content

test(ci): sweep every module's effective javadoc config for silencers (#203) - #204

Merged
EtaCassiopeia merged 1 commit into
masterfrom
test/rift-203-javadoc-config-assertion
Aug 5, 2026
Merged

test(ci): sweep every module's effective javadoc config for silencers (#203)#204
EtaCassiopeia merged 1 commit into
masterfrom
test/rift-203-javadoc-config-assertion

Conversation

@EtaCassiopeia

Copy link
Copy Markdown
Collaborator

Closes #203

Summary

The #200 poison canary only poisons rift-java-core, so it pins the ROOT pluginManagement. 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.py sweep that reads each module's effective javadoc configuration via help:effective-pom and 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} into rift-java-jackson printed error: reference not found twice and still reported BUILD SUCCESS.

Configuration sweep: New scripts/check-javadoc-strictness.py reads help:effective-pom (the merged model—immune to whitespace, property indirection, or the setting living in another file) and rejects:

  • failOnError (allowlist: only true)
  • skip, skippedModules
  • Any doclint other than all
  • Any -Xdoclint option disabling a group
  • Equivalent maven.javadoc.* / bare doclint properties (which need no <configuration> at all)

Self-test mode (--self-test): Runs in CI before the real sweep. Detects 14 silencer fixtures + 4 run_check round-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 + -DdualEmbedded reactor 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:

  • Property maven.javadoc.failOnError
  • Property doclint
  • Config value doclint=syntax
  • Config value -Xdoclint:all,-missing,-reference
  • Typo'd --require flag that silently no-op'd

The 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=false added to a workflow's own mvn command line. This is documented in the script header and CONTRIBUTING.md, and being filed as a separate issue.

Also pins maven-help-plugin to avoid prefix-invoked goals resolving latest-on-Central, keeping the sweep reproducible.

…#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.
@EtaCassiopeia
EtaCassiopeia merged commit 75dbfd3 into master Aug 5, 2026
16 checks passed
@EtaCassiopeia
EtaCassiopeia deleted the test/rift-203-javadoc-config-assertion branch August 5, 2026 21:32
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.

Javadoc canary doesn't cover per-module failOnError overrides

1 participant