--- name: verify-changes description: Find and run the checks a change owes, from what it touches and what that can reach. Use after editing any file, when about to call a change finished, or when asked whether something passes. --- # Verifying a change The Verify step. Decide what to run from the diff itself — the paths in it, and what those paths can reach. **A Gradle module's dependents** owe their tests as well as the module's own. Their `build.gradle` is what names them: ```bash grep -rl 'project(.:core.)' --include=build.gradle . ``` Some declare it as `project(path: ":x", configuration: "y")` instead, so treat that as a starting list rather than a complete one. **Never the whole platform.** `buildAll`, `buildAllFast`, `distZip`/`distTar`, `buildDoc`, the `bootRepackage`/`buildUI`/`buildPipe` artifact tasks and everything under `e2e/` cost between an hour and half a day, and belong to post-merge CI or to release time by hand. Never escalate to a heavier check because a lighter one was unavailable. A change **inside** `e2e/gui` is the exception: the tests it touches are the check it owes. Read `e2e/gui/AGENTS.md` first. **A partial toolchain is the normal case here.** Most contributors have one language's tooling and not the others, so you satisfy a check by running it *or* by recording that the tool was absent. A declared skip is a correct outcome; a silent one is not. **Ask the module for its check.** `settings.gradle` lists every Gradle subproject: run `./gradlew ::test` where its `build.gradle` gives it a `test` task, and `./gradlew ::checkstyleMain ::checkstyleTest ::pmdMain ::pmdTest` where it has Java sources — **each task carries the module prefix**; unprefixed, those four are the whole platform. Several Python modules have neither — their runner is named in that module's `AGENTS.md` or `README.md`. What departs from that: **`client/`** — the runners in `client/AGENTS.md` → "Checks", then the `verify-client-live` skill where it applies. **`client/src/themes/`** — also `npm run gui-themes-prepare && git diff --exit-code -- src/themes`, and commit what it regenerates. **`api`, `elasticsearch-agent`** — tests need a live PostgreSQL, configured in `api/src/test/resources/test-application.properties` and `elasticsearch-agent/src/test/resources/test-application.properties`. **`workflows/pipe-common/`, `scripts/`** — `cd workflows/pipe-common && export PYTHONPATH=$PYTHONPATH:$PWD && python -m pytest` **Any `AGENTS.md`, `CLAUDE.md`, `.claude/`, `.cursor/`, `.github/instructions/`, `.agents/`** — `.agents/skills/modifying-instructions/scripts/verify-instructions.sh` **`e2e/gui/`** — `e2e/gui/AGENTS.md`, and its own `e2e/gui/gradlew`: a standalone build, so no root `::` task reaches it. Where that search finds nothing, nothing else will check the path later either — `deploy/`, `docs/` and the rest of `e2e/` are the large cases — so reading the diff is the verification.