Conversation
ivosh
force-pushed
the
refactor/2016-adopt-4.1-baseline
branch
from
September 3, 2026 20:12
125ccfe to
237737f
Compare
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.
Core compiles, boots and runs its whole suite on Spring Boot 4.1.1 — 7254 tests, 102 failing, 98.59% green — and every failure is attributed to a sibling issue.
Closes the compile-and-measure half of #2016. This is the first sub-PR on the
integration/spring-boot-4.1branch.What changed
Three commits, each reviewable on its own.
1. The dependency bump. Parent
com.otilm:dependenciesmoves1.4.3-SNAPSHOT→2.0.0-SNAPSHOT. That brings Boot 4.1.1, Framework 7.0.9, Hibernate 7.4.5, Security 7.1.1 and JUnit 6.0.3. Jackson stays on 2.22.1, held there by the parent's explicitjackson-bomimport. Thecom.otilm:interfacescoordinate moves to2.20.0-SBM-SNAPSHOT.Boot 4 split the monolithic jars, so
spring-boot-http-clientandspring-boot-jackson2are now declared explicitly.spring-boot-jackson2is load-bearing: it restores theJackson2ObjectMapperBuilderbean, and without it every integration test fails on context load.spring-boot-webmvc-testis added test-scoped because@AutoConfigureMockMvcmoved into it.hibernate-jpamodelgenbecomeshibernate-processor, and the enhance plugin moves toorg.hibernate.orm:hibernate-maven-plugin.2. Compile breaks. Six main sources and 23 test sources. The substantive ones are
ContextAwarePoolExecutor(Framework 7 removedListenableFuture) andAbstractExternalAuthorizationManager(Security 7 removedcheck, andauthorizewidens toSupplier<? extends Authentication>). The rest are package relocations.src/test/resources/schema.sqlgains the Spring Session tables. Boot 4 commits a session on MockMvc requests. Flyway is disabled in the test profile and these are not JPA entities, so nothing else creates them. Every statement usesIF NOT EXISTSbecause the Testcontainer is reused andspring.sql.init.mode: alwaysre-runs the script per context.3.
SortOrderBuilder.JpaOrder.nullPrecedencetakesorg.hibernate.query.NullPrecedenceon Hibernate 6.6 andjakarta.persistence.criteria.Nullson 7.x, with no overload on either side.jakarta.persistence-api:3.1.0— whatmainresolves — ships noNullsclass at all. So there is no source form that compiles on both lines, and unlike the #2202 test shapes this could not be prepared onmain. It is a separate commit because the branch head would not otherwise compile.Two decisions worth a second opinion
The
tomcat.versionpin moves to the Tomcat 11 line — it is not dropped. #2205 pinned 10.1.59 against three critical bypass CVEs. Boot 4.1.1 manages Tomcat 11.0.24, a different Jakarta EE generation, so the 10.1.x override cannot apply here — but 11.0.24 is not safe. All three CVEs are fixed in 11.0.25 on the 11.0.x line, perGHSA-gcx9-497g-6cp6,GHSA-9xv2-5v5q-p794andGHSA-h3x4-894j-xpx5, each listingorg.apache.tomcat.embed:tomcat-embed-core [introduced=11.0.0-M1 fixed=11.0.25]. Inheriting the managed 11.0.24 would have reintroduced all three and failed the Trivy image gate #2205 exists to satisfy.So the pin is re-expressed as
11.0.25rather than deleted.dependency:treeconfirmstomcat-embed-core,-eland-websocketall resolve at 11.0.25. 11.0.25 is published on Maven Central (HTTP 200) and is the head of the 11.0.x line — checked explicitly, because #2205 records that the announced 10.1.58 never reached Central and 10.1.59 was its successor.The Testcontainers 1.21.4 pin stays. Boot 4.1.1 manages 2.0.5. Staying on 1.x is the decision already recorded in #2016 and #2019, and the spike verified it coexists with JUnit 6.0.3. Only the stale comment changed.
Measured
mvn -B verify, on this branch head:Do not compare that against #2016's "125 failing / 5661 tests". That was measured on 2026-08-25, before #2149 and #2202 landed and before
maingrew by roughly 1600 tests.Attribution of all 102:
Unable to determine TableReference— HHH-20744 (55 raw, 1 wrapped in a JPA/tx failure)HttpStatus422 split —ExceptionHandlingAdviceConnectorTestassertsUNPROCESSABLE_ENTITY, getsUNPROCESSABLE_CONTENTThe RC#3 hit is worth noting: #2111 recorded that split as latent with no failing test. On this branch it fails, because the interfaces artifact now returns the new constant.
The 9 residual are 4 ×
ScepRegistrationEnrolmentITest(expected: <3> but was: <2>), 2 ×PendingIssueReaperITestand 1 ×V3AsyncPollITest(state never advances pastPENDING_ISSUE), and 2 ×AcmeProtocolFlowITest(internal error inAcmeServiceImpl.getOrder). The reaper and poll symptoms match RC#8's signature — the lock is silently not taken, so state never advances — and #2017 namesPendingIssueReaper.reapOneas a hot-path call site. That is a plausible reading, not a proven one, and #2016 leaves the residual to be triaged on this branch.Gates
No CI runs here.
build_pr.ymltriggers onpull_requestinto[main*, feat/*, hotfix/*], and this branch matches none of them, so everything below was run locally and the branch'sRECONCILE.mdrecords that the merge tomainis the first time CI executes.mvn test-compile -Dmaven.compiler.proc=fullmvn spotless:check checkstyle:checkbuild_identity_tables.py+git diff --exit-codemvn verifydependency:treevs GHSA fixed versionsThe parent bump also moves the formatter engine to Spotless 3.7.0 / Eclipse JDT 4.40. It produced no reformat, so no
.git-blame-ignore-revsentry is needed.The interfaces dependency resolves from ~/.m2 only
com.otilm:interfaces:2.20.0-SBM-SNAPSHOTis published nowhere — 404 on Sonatype snapshots, absent from Maven Central and from GitHub Packages. The only remotely resolvable interfaces snapshot is2.20.0-SNAPSHOT, built from interfacesmainon the Boot 3.x parent, which cannot satisfy this branch.So this branch builds only where it has been installed locally, from interfaces
integration/spring-boot-4.1at0dd634ba. Clearing that is OmniTrustILM/interfaces#806, whose "3.0.0-SNAPSHOTis published forcoreto consume" criterion is still unchecked.RECONCILE.mdrecords it.Not done here
ContextSignatureGuardTest.BASELINEstill reads 61 and the suite does not fail it, so no re-justification was needed. No test was disabled, ignored or weakened. The OpenTelemetry BOM imports still pin 1.60.1 / 2.26.1 against the parent's 1.62.0 — that belongs to #2020 and is left alone deliberately.