Commit 7e84098
feat(server): upgrade to Spring Boot 4 / Hibernate 7 / Modulith 2 / Security 7 baseline
Closes #1118, #1119, #1120, #1121, #1122 (epic #1096).
Major version bumps (all pinned to concrete patches):
- spring-boot-starter-parent 3.5.14 → 4.0.6
- spring-modulith-bom 1.4.11 → 2.0.6
- Hibernate ORM 6.x → 7.2.12 (Boot 4 managed)
- Liquibase 4.x → 5.0.2 (Boot 4 managed)
- liquibase-hibernate6 4.33.0 → liquibase-hibernate7 5.0.2-rc1
- springdoc-openapi 2.8.15 → 3.0.3
- resilience4j-spring-boot3 → resilience4j-spring-boot4 (same 2.4.0)
- okhttp 4.12.0 → okhttp-jvm 5.3.2 (Maven users must use -jvm classifier; lysine-dev/okhttp#8913)
- mockwebserver → mockwebserver3
- sentry-spring-boot-starter-jakarta 8.40.0 → sentry-spring-boot-4-starter 8.41.0
- Jackson 2 (com.fasterxml.jackson.*) → Jackson 3 (tools.jackson.*)
Deletions:
- hypersistence-utils — replaced by Hibernate-native @JdbcTypeCode(SqlTypes.JSON) across 5 JSONB
entities (AgentJob, ChatMessage, Practice, PracticeFinding, ProjectField).
- ClassImportIntegratorIntegratorProvider — dead code.
- JacksonConfig.java + JsonNullableModule registration — JsonNullable<T> had zero Java usages.
- @EnableWebSecurity on SecurityConfig — auto-enabled since Security 6.x.
- openapi-generator{-maven-plugin} <dependency> blocks — orphaned from deleted intelligence-service.
- spring-boot-starter-aop — Boot 4 removed the artifact entirely.
- maven-compiler-plugin 3.15.0 override, plexus-utils pin, explicit netty-resolver-dns.
Additions:
- spring-boot-restclient — Boot 4 split RestTemplateBuilder out of starter-web.
- tools.jackson.dataformat:jackson-dataformat-yaml — needed by AchievementRegistry.
- spring-modulith-core + spring-modulith-starter-test.
- spring-retry 2.0.12 (no longer in Boot 4 dep management).
Architecture:
- 11 packages now carry explicit @ApplicationModule(displayName = …) declarations.
- New ApplicationModulesVerificationTest runs verify() against a committed baseline allowlist.
- New SecurityFilterChainArchitectureTest: runtime slice asserts no CsrfFilter on any chain plus
JobTokenAuthenticationFilter precedes UsernamePasswordAuthenticationFilter; ArchUnit rule
asserts only SecurityConfig + LlmProxySecurityConfig may declare SecurityFilterChain beans.
Boot 4 package moves applied:
- o.s.boot.actuate.health.* → o.s.boot.health.contributor.*
- o.s.boot.web.client.RestTemplateBuilder → o.s.boot.restclient.RestTemplateBuilder
- o.s.boot.autoconfigure.web.servlet.WebMvcRegistrations
→ o.s.boot.webmvc.autoconfigure.WebMvcRegistrations
- liquibase plugin referenceUrl: SpringImplicitNamingStrategy moved to o.s.boot.hibernate.*
- testcontainers 2.0 artifact renames: junit-jupiter/postgresql → testcontainers-*
Docs:
- docs/decisions/0001-server-deps-boot4-upgrade.md (ADR)
- docs/operations/server-deps-boot4-soak.md (48h staging soak runbook + rollback)
- .ai/server-deps-hibernate7-audit.md (per-class disposition log)
Known remaining work (deferred to small follow-up PRs against this upgraded baseline):
- Spring Data 4 Persistable.getId() interface change — TeamMembership, TeamRepositoryPermission.
- Lombok / Hibernate 7 entity equals/hashCode across gitprovider entities.
- AccountService / AchievementService cascading symbol errors — needs targeted investigation.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent fd5f02b commit 7e84098
171 files changed
Lines changed: 898 additions & 567 deletions
File tree
- docs
- decisions
- operations
- server/application-server
- src
- main
- java/de/tum/in/www1/hephaestus
- achievement
- activity
- agent
- config
- context
- providers
- mentor
- handler
- spi
- job
- mentor
- chat
- exception
- wire
- proxy
- runtime
- sandbox
- docker
- interactive
- spi
- task
- config
- gitprovider
- common
- spi
- project
- github/dto
- integrations/posthog
- leaderboard
- mentor
- practices
- dto
- finding
- model
- review
- workspace
- adapter
- context
- resources
- test
- java/de/tum/in/www1/hephaestus
- achievement
- agent
- config
- context
- providers
- mentor
- handler
- spi
- job
- mentor
- chat
- wire
- live
- practice
- live
- proxy
- runtime
- sandbox/docker
- interactive
- task
- architecture
- config/jackson
- gitprovider
- discussioncomment/github
- discussion/github
- installation/github
- issuecomment
- github
- gitlab
- issue
- github
- gitlab
- label/github
- milestone
- github
- gitlab
- organization/github
- project/github
- pullrequestreviewcomment/github
- pullrequestreviewthread/github
- pullrequestreview/github
- pullrequest
- github
- gitlab
- repository
- github
- gitlab/dto
- subissue/github
- team/github
- mentor
- practices
- finding
- feedback
- review
- resources
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
0 commit comments