chore(build): the gates cover the surfaces they claim - #505
Conversation
Three gates reported on less than their names implied. The Javadoc gate ran with subpackages set to com.demcha.compose.document, so GraphCompose — the entry point every README snippet starts from — sat in the root package outside it. It carried a real doclint error the whole time: two <h3> headings under an implicit <h1>. Nothing else caught it, because the published Javadoc jar is built with doclint=none. The gate now covers com.demcha.compose and the headings are <h2>. Widening it also pulls in the @internal engine package; excludePackageNames does not take effect alongside subpackages, and the cost is warnings rather than failures. The CI gate-coverage guard found jobs with a pattern admitting only lower case and hyphens. A job named build_and_test or CodeQL was never matched, and a job the guard cannot see is one it cannot report missing from the aggregate check. Job names now come from the YAML's indentation rather than from a guess at GitHub's identifier grammar. Nothing held docs/recipes.md to the folder it indexes. RecipeCatalogueGuardTest fails on a page the catalogue omits and on a catalogue row pointing at a file that is gone.
643334f to
a184daf
Compare
|
Confirmed and fixed. Reproduced the blind spot first — appending security_scan: # Run security tools
runs-on: ubuntu-latestto Pattern. Now Testability, rather than one more fixture. The guard reads Recipe link grammar. Taken as you suggested: Rebased onto |
Why
Three gates reported on less than their names implied. Each failure mode is silence:
the step goes green having checked less than the reader assumes.
The Javadoc gate skipped the entry point. It ran with
<subpackages>com.demcha.compose.document</subpackages>, soGraphCompose— in theroot package, and the class every README snippet starts from — was never linted.
GraphCompose.htmlwas not even generated by the report goal. It had carried a realdoclint error since
e1376ad8(the layout move, 2026-07-12): two<h3>headings underan implicit
<h1>, exactly the sequence breakdoclintexists to catch. The otherpath could not catch it either — the published Javadoc jar is built with
doclint=noneso a broken tag never blocks a release.
The CI gate-coverage guard could not see half the job names GitHub allows. Its job
pattern was
^ ([a-z][a-z0-9-]*):$, which admits what today's names happen to use. Ajob added as
build_and_testorCodeQLmatched nothing, and a job the guard neversees is one it cannot report missing from
ci-gate.needs— the same silence the guardwas written to break.
Nothing held
docs/recipes.mdto the folder it indexes. It is the page the READMEand the documentation index both point at, so a recipe missing from it has no inbound
link from anywhere, and adding one disturbs no gate.
What
core/pom.xml: the Javadoc gate's scope becomescom.demcha.compose; the twoheadings in
GraphComposebecome<h2>.CiGateCoverageGuardTest: job names are taken structurally, from the YAML's ownindentation, rather than from a guess at GitHub's identifier grammar.
RecipeCatalogueGuardTest(new): fails on a page the catalogue omits, and on acatalogue row pointing at a file that is gone.
Widening the Javadoc scope also pulls in the
@Internalcom.demcha.compose.enginepackage. That is a consequence, not a goal: with
subpackagesset,excludePackageNamesdoes not take effect — botha.b.engine:a.b.engine.*anda.b.engine*were tried and the package is emitted either way. It costs warnings, notfailures, since
failOnErrorfails on errors only. Recorded in the pom rather than leftfor the next person to rediscover.
Tests
./mvnw -B -ntp clean verify→BUILD SUCCESS;./mvnw -B -ntp javadoc:javadoc -pl :graph-compose-core→ exit 0 (it exited 1 on the widened scope before the heading fix).Each guard was checked from both sides rather than trusted because it was green:
security_scan:job absent fromci-gate.needsmakesthe old pattern pass — it does not see the job at all — and the new one fail, naming
security_scan.probe-page.md); a catalogue rowpointed at a renamed file is reported from both ends.
The published Javadoc jar is unchanged: built with
-Preleasebefore and after, bothcarry 1024 entries and the same package set, so the widened
subpackagesreaches thereport goal only.