# 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 - [x] Pin the Springdoc 3 `ApiError.details` widening with a real-server RED test. - [x] 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`. - [x] Reproduce starter-driven Mongo activation through an actual `@EnableAutoConfiguration` context in both default and explicit-false modes. - [x] Register a module-level Boot 4 `AutoConfigurationImportFilter` that blocks Mongo auto-configuration until the module enable flag is true. - [x] Re-run affected formatting, locks, focused tests, and all design verification commands.