5.3 KiB
5.3 KiB
Harness-Free Module and Gradle Hygiene Implementation Plan
Goal: Apply the approved 19-leaf dependency and boundary cleanup without .harness.
Spec: docs/superpowers/specs/2026-07-25-module-gradle-hygiene-harness-free-design.md
Policy: TDD for behavior/boundary changes; focused proof before dependency removal; human-only Git operations.
Task 1: Lock Phase B and characterize the Phase C baseline
- Confirm the Phase B focused tests, dependency-purity gate, spec review, and quality review are green.
- Record the current 19-leaf registry and affected lockfiles.
- Run the existing OpenAPI runtime tests before changing springdoc.
Task 2: Isolate pure-core tests
- Change the root test convention so
domain-core,application-core, andshared-contractreceive only JUnit Jupiter, AssertJ, and the platform launcher. - Run the three core test suites and dependency reports.
- Regenerate only their affected locks and prove no Spring coordinate remains on their test runtime classpaths.
Task 3: Prune core/inbound declarations and align Boot 4
- Before editing, run and record each affected leaf's
compileJava,compileTestJava,test, runtime dependency report, and relevant dependency insight. - Remove the approved unused project edges from application and inbound leaves.
- Upgrade springdoc to
3.0.0. - Remove unused GraphQL/WebSocket Jackson 2 declarations and unused gRPC direct declarations.
- Characterize
jackson-databind-nullablewith dependency insight and focused present/null/undefined Jackson 3 tests; exclude its Jackson 2 transitive dependency only if the tests and real-server OpenAPI contract remain green. - Run each affected leaf test plus the two real-server
/v3/api-docstests. - Update the OpenAPI snapshot only if the generated public contract is semantically unchanged.
Task 4: Prune outbound declarations
- Before editing, run and record each affected leaf's
compileJava,compileTestJava,test, runtime dependency report, and relevant dependency insight. - Apply the approved support/cache/httpclient/identifier/messaging/notification project-edge removals.
- Remove Groovy/Spock only from leaves with no Groovy tests.
- Narrow fileserver/objectstorage from the broad Boot starter to autoconfigure plus SLF4J API.
- Remove the JPA domain edge and remove explicit Flyway core only if focused compile/test proves it is redundant.
- Run affected compile/tests before and after each dependency group.
Task 5: Enforce configuration-processor parity
- Add a failing verification fixture or temporary mutation proving the exact
@ConfigurationProperties(parity check detects missing and extra processors. - Register
verifyConfigurationPropertiesProcessorfrom the JSON registry and wire it into leafcheck. - Add processors to settings-owning leaves and remove the unused GraphQL processor.
- Run the new gate and affected settings tests.
Task 6: Remove the Mongo example domain
- Add tests for disabled mode, enable-flag binding, and enabled infrastructure with a mock
MongoClient. - Delete all production/test
Example*types and remove the fixed example bean/repository scanning. - Remove obsolete project and Testcontainers dependencies.
- Run the Mongo tests and an
rgassertion that production contains noExample*.
Task 7: Invert sample correlation access
- Add framework-free
CorrelationIdPortcontract tests/fakes. - Add and test the inbound web MDC implementation.
- Change the two sample application collaborators to use the port while retaining event-id fallback behavior.
- Add an architecture assertion that sample application source has no SLF4J dependency.
- Run application, web, sample outbox/poster, and architecture focused tests.
Task 8: Clean generated state and composition documentation
- Delete tracked
src/sample-portfolio/.jqwik-databaseand ignore future files. - Correct app-bootstrap “every module” wording and document default versus opt-in runtime composition.
- Preserve the existing default runtime dependency set.
Task 9: Locks, full verification, and review
- Regenerate strict lockfiles only with each affected leaf's
:leaf-path:resolveAndLockAll --write-locks; do not run the root all-leaf writer. - Run all commands in the design verification section.
- Run
git diff --checkand inspect the complete unstaged/untracked status. - Request spec and code-quality review; fix all actionable findings.
- Update the mandated LLM Wiki raw branch note and derived raw notes, or record the exact missing-vault blocker.
Final review hardening
- Pin the Springdoc 3
ApiError.detailswidening with a real-server RED test. - Add a web-owned OpenAPI customizer, import it in both real-server test applications, and
restore the committed
type: objectsnapshot without adding Swagger toshared-contract. - Reproduce starter-driven Mongo activation through an actual
@EnableAutoConfigurationcontext in both default and explicit-false modes. - Register a module-level Boot 4
AutoConfigurationImportFilterthat blocks Mongo auto-configuration until the module enable flag is true. - Re-run affected formatting, locks, focused tests, and all design verification commands.