Files
clean-architecture-backend-…/docs/superpowers/plans/2026-07-25-module-gradle-hygiene-harness-free.md
T

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, and shared-contract receive 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-nullable with 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-docs tests.
  • 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 verifyConfigurationPropertiesProcessor from the JSON registry and wire it into leaf check.
  • 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 rg assertion that production contains no Example*.

Task 7: Invert sample correlation access

  • Add framework-free CorrelationIdPort contract 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-database and 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 --check and 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.details widening 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: object snapshot without adding Swagger to shared-contract.
  • Reproduce starter-driven Mongo activation through an actual @EnableAutoConfiguration context in both default and explicit-false modes.
  • Register a module-level Boot 4 AutoConfigurationImportFilter that blocks Mongo auto-configuration until the module enable flag is true.
  • Re-run affected formatting, locks, focused tests, and all design verification commands.