ADR-0001: Lockstep Versioning Across All Modules
Status: ACCEPTED Date: 2026-03-18 Supersedes: N/A Superseded by: N/A
Context
The backend-platform is a multi-module Maven reactor with 28 build modules. Without a unified versioning policy, individual modules could drift to independent version tracks, making it difficult to determine compatibility between modules and complicating dependency management.
Source: docs/versioning-policy.md, docs/archive/plans/2026-03-18-pom-version-cleanup.md
Decision
All modules inherit a single version from the root pom.xml (currently 2.0.0) by default. Child modules omit <version> and rely on dependencyManagement in the root parent. Module-local versions are used only when a module is intentionally released on its own track (currently only slaunchx-support-file at 2.1.0). Family-managed modules (infra-audit, infra-gateway, support-secure-transport) version submodules from their own parent POMs.
Consequences
- Simpler release process: bumping the root version advances most modules at once.
- Clear audit trail: intentional version divergence is documented in the versioning policy.
- Harder to release a single module hotfix without touching the root version; family-managed modules mitigate this for high-change SDKs.
Alternatives Considered
- Fully independent versioning per module: Rejected because the overhead of tracking N independent version tracks outweighs the flexibility, especially given the tight coupling between infrastructure SDKs and the app layer.
- Git tag-based versioning: Rejected because Maven reactor builds rely on POM-declared versions for dependency resolution; tags alone do not satisfy this.