104 lines
5.3 KiB
Markdown
104 lines
5.3 KiB
Markdown
# 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.
|