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
verifyMongoTestLaneDisjointnessandverifyMongoReleaseContractLanestask names and report paths. - Preserve the existing
test+mongoStableContractTestdependency 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
doLastverification 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=plainand 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,verifyMongoReleaseContractLaneswith unchanged report paths. -
Step 1: Register
ca.mongo-verificationand 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=plainandgit diff --check.