Files
clean-architecture-backend-…/docs/superpowers/plans/2026-09-17-mongo-gradle-verification-java.md
T

4.4 KiB

Mongo Gradle Verification Java Migration Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Remove Mongo JUnit/XML and release-manifest verification algorithms from the Groovy leaf build script and move them into typed Java build tooling without changing task names or verification semantics.

Architecture: ca.mongo-verification lives in src/build-tools because the checks are repository certification tooling, not reusable compilation conventions. The plugin registers the two existing verification task names; normal Java verifier/parser classes own XML/JSON parsing and return typed records, while persistence-mongo/build.gradle keeps only plugin/lane/dependency declarations and check wiring.

Tech Stack: Java 21, Gradle 9 binary plugins/tasks, Jackson 3, JUnit 6, JUnit XML.

Spec: docs/superpowers/specs/2026-09-16-verification-surface-reduction-design.md

Global Constraints

  • Preserve verifyMongoTestLaneDisjointness and verifyMongoReleaseContractLanes task names and report paths.
  • Preserve the existing test + mongoStableContractTest dependency graph.
  • Do not add or resolve new production dependencies in the Mongo leaf.
  • Keep Groovy only as declarative build DSL; no JSON/XML parsing or doLast verification algorithm remains in the leaf.
  • Do not stage, commit, amend, or push; repository policy is human-only commits.

Task 1: Typed Mongo verification core

Files:

  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoLaneDisjointnessVerifier.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoLaneDisjointnessResult.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoReleaseContract.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoReleaseContractManifestParser.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoReleaseContractLaneVerifier.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoReleaseContractLaneResult.java
  • Test: src/build-tools/src/test/java/dev/caskeleton/buildtools/mongo/MongoLaneDisjointnessVerifierTest.java
  • Test: src/build-tools/src/test/java/dev/caskeleton/buildtools/mongo/MongoReleaseContractLaneVerifierTest.java

Interfaces:

  • Consumes: Gradle JUnit XML result directories and config/mongodb/release-contracts.json.

  • Produces: typed result records used by Gradle task classes.

  • Step 1: Write failing verifier tests covering disjoint lanes, overlap failure data, manifest filtering to hermetic lanes, missing result XML, and minimum-executed checks.

  • Step 2: Run cd src/build-tools && ../gradlew test --tests 'dev.caskeleton.buildtools.mongo.*' --console=plain and confirm RED from missing production types.

  • Step 3: Implement minimal typed records/parsers/verifiers using fail-closed XML parsing and Jackson 3 JSON tree parsing.

  • Step 4: Run the focused tests again and confirm PASS.

Task 2: Binary plugin/task ownership and leaf cleanup

Files:

  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/MongoVerificationPlugin.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/VerifyMongoTestLaneDisjointnessTask.java
  • Create: src/build-tools/src/main/java/dev/caskeleton/buildtools/mongo/VerifyMongoReleaseContractLanesTask.java
  • Modify: src/build-tools/build.gradle
  • Modify: src/adapter/outbound/persistence-mongo/build.gradle

Interfaces:

  • Consumes: typed verifiers from Task 1.

  • Produces: existing task names verifyMongoTestLaneDisjointness, verifyMongoReleaseContractLanes with unchanged report paths.

  • Step 1: Register ca.mongo-verification and the two typed tasks in Java.

  • Step 2: Apply the plugin in the Mongo leaf and delete both Groovy tasks.register { doLast { ... } } implementations.

  • Step 3: Run cd src && ./gradlew :adapter:outbound:persistence-mongo:verifyMongoTestLaneDisjointness :adapter:outbound:persistence-mongo:verifyMongoReleaseContractLanes --console=plain.

  • Step 4: Run cd src && ./gradlew :adapter:outbound:persistence-mongo:check --console=plain.

  • Step 5: Run cd src/build-tools && ../gradlew test --console=plain and git diff --check.