marketplace/bundles/plan-marshall/skills/build-gradle/SKILL.md
Gradle build operations — Java/Kotlin builds with JaCoCo coverage, quality task detection, and multi-project discovery
npx skillsauth add cuioss/plan-marshall build-gradleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Gradle build execution with output parsing, module discovery, and wrapper detection. Wrapper resolution prefers the project wrapper (gradlew) and falls back to the system gradle when no checked-in wrapper is present. See build-api-reference.md § Wrapper Detection for the detection table.
See build-api-reference.md § Enforcement for shared rules.
All commands use python3 .plan/execute-script.py plan-marshall:build-gradle:gradle {command} {args}.
| Script | Purpose |
|--------|---------|
| gradle.py | CLI dispatcher |
| _gradle_execute.py | Execution config via factory (custom command_key_fn for :module: notation) |
| _gradle_cmd_discover.py | Module discovery via settings.gradle(.kts) + Gradle metadata commands |
| _gradle_cmd_parse.py | Log parsing with JVM base patterns + Kotlin error patterns |
| _gradle_cmd_find_project.py | Subproject name-to-notation resolution |
Supports: run, parse, coverage-report, check-warnings, discover, find-project.
See build-api-reference.md for the full subcommand API and availability matrix.
--command-args takes Gradle tasks, e.g., ":module:build" or "build"no-openrewrite mode; includes Kotlin-specific error patterns (Unresolved reference, Type mismatch, etc.)build/reports/jacoco/test/jacocoTestReport.xml, build/reports/jacoco/jacocoTestReport.xml, build/jacoco/test.xmlsettings.gradle(.kts) include() declarations (Groovy + Kotlin DSL); detects quality tasks (spotlessCheck, checkstyleMain, pmdMain, detekt, ktlintCheck)auth → :services:auth)run --plan-id)When run is invoked with --plan-id <P>, every parsed issue from a failed build is auto-stored via the producer path (always-on). Without --plan-id, the build parses and formats only (no finding storage). The gradle-specific issue→finding-type routing is:
| Parsed category (Issue) | Finding type |
|---------------------------|--------------|
| test_failure, test_* | test-failure |
| categories containing lint or style (spotless, checkstyle, ktlint, detekt) | lint-issue |
| everything else (compilation, dependency, plugin, Kotlin Unresolved/Type mismatch) | build-error |
The finding's module carries gradle, rule carries the parser category.
For the producer→store→consumer→gate flow including the producer-mismatch fidelity contract, see
ref-workflow-architecture/standards/findings-pipeline.md. This SKILL.md owns the per-tool issue→finding-type routing only.
Reads settings.gradle(.kts) for include() declarations. Supports both Groovy and Kotlin DSL. Shells out to Gradle for properties, dependencies, and quality task detection.
The canonical argparse surface for gradle.py. The plugin-doctor analyzer (_analyze_manage_invocation.py) reads this section as source-of-truth for the manage-invocation-invalid and missing-canonical-block rules. Consuming docs xref this section by name instead of restating the command inline. See pm-plugin-development:plugin-script-architecture cross-skill-integration.md § "Script invocation in documentation".
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle run \
--command-args COMMAND_ARGS \
[--timeout SECONDS] [--mode {actionable,structured,errors}] [--format {toon,json}] \
(--project-dir PROJECT_DIR | --plan-id PLAN_ID)
--project-dir and --plan-id are mutually exclusive.
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle parse \
--log LOG \
[--mode {default,errors,structured,no-openrewrite}] [--format {toon,json}] \
(--project-dir PROJECT_DIR | --plan-id PLAN_ID)
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle find-project \
(--project-name PROJECT_NAME | --project-path PROJECT_PATH) [--root ROOT]
--project-name and --project-path are mutually exclusive; exactly one must be supplied.
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle coverage-report \
[--project-path PROJECT_PATH] [--report-path REPORT_PATH] [--threshold PERCENT] \
(--project-dir PROJECT_DIR | --plan-id PLAN_ID)
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle check-warnings \
[--warnings WARNINGS] [--acceptable-warnings ACCEPTABLE_WARNINGS] \
(--project-dir PROJECT_DIR | --plan-id PLAN_ID)
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle discover \
[--root ROOT] [--format {toon,json}]
python3 .plan/execute-script.py plan-marshall:build-gradle:gradle run-config-key \
--command-args COMMAND_ARGS [--format {toon,json}]
build-api-reference.md — Shared subcommand API, error categories, issue routing, wrapper detectionbuild-execution.md — Execution contract and lifecyclestandards/gradle-impl.md — Gradle-specific execution and configuration detailsdevelopment
Domain-owned OpenRewrite log-line finding parser for the java-cui domain — parses the
development
Domain-owned OpenRewrite marker detection for the java-cui domain — scans Java/Kotlin sources for cui-rewrite TODO markers, categorizes them by recipe, and fails the gate on any detected marker
development
Operator control surface for the marshalld build server — enrol/drop a project in the machine-global registry (the opt-in enable signal and anti-laundering wall), manage the daemon lifecycle (start, stop, drain, status, install, upgrade) version-pinned to the verified bundle copy, and inspect the daemon's per-project interaction-audit log (read-only)
tools
The tiny build-consumption client for the marshalld build server — submit a build job, bounded long-poll for its result, ping the daemon identity, and preflight registry-plus-liveness in one call; consumption only, never provisioning or enrolment