Convex Doctor
waynesutton/markdown-site
Run convex-doctor static analysis, interpret findings, and fix issues across security, performance, correctness, schema, and architecture categories.
Guide to running, reading and fixing code style and analysis violations in grails-core with CodeNarc, Checkstyle, PMD, SpotBugs, Spotless and JaCoCo through Gradle.
$ npx skills add apache/grails-core --skill violation-fixer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install apache/grails-core violation-fixer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/violation-fixer .claude/skills/violation-fixer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .claude/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add apache/grails-core --skill violation-fixer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install apache/grails-core violation-fixer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/violation-fixer .agents/skills/violation-fixer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .agents/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/grails-core --skill violation-fixer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install apache/grails-core violation-fixer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/violation-fixer .cursor/skills/violation-fixer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .cursor/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/apache/grails-core.git --path .agents/skills/violation-fixer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add apache/grails-core --skill violation-fixer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install apache/grails-core violation-fixer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/violation-fixer .gemini/skills/violation-fixer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .gemini/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install apache/grails-core violation-fixerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add apache/grails-core --skill violation-fixer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/violation-fixer .github/skills/violation-fixer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .github/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apache/grails-core --skill violation-fixer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install apache/grails-core violation-fixer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apache/grails-core.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/violation-fixer .opencode/skills/violation-fixer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "violation-fixer" agent skill from https://github.com/apache/grails-core/tree/8.0.x/.agents/skills/violation-fixer into .opencode/skills/violation-fixer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "violation-fixer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
violation-fixerGuide to running, reading and fixing code style and analysis violations in grails-core with CodeNarc, Checkstyle, PMD, SpotBugs, Spotless and JaCoCo through Gradle.
The skill explains how three Gradle plugins enforce code quality across the 60+ modules of grails-core. The code style plugin applies Checkstyle and CodeNarc to every subproject, the code analysis plugin applies PMD and SpotBugs, which are opt-in, and a JaCoCo plugin runs a coverage report after each test task. A root-only violation aggregation plugin adds tasks that collect results and write Markdown summaries under build/reports/violations.
Key tasks are listed with their scope. `./gradlew codeStyle` and `./gradlew codeAnalysis` run per project, `./gradlew aggregateViolations` runs every check across all modules and writes the *_VIOLATIONS.md files, and `./gradlew validateRepositoryConventions` checks skill metadata, AGENTS paths, GitHub Action pins and message keys, with RAT provenance handled by a separate rat task. It also covers which tools are always on or opt-in, how to configure them with Gradle properties and which violations can be fixed automatically. Plugin output must be clean before a commit is merged.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 3d6db18. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash and groovy).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Grails Violation Fixer loads about 3.9k tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 1,397 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from apache/grails-core at commit 3d6db18, republished under its Apache-2.0 licence (© apache). 1,397 words, ~3,886 tokens.
.claude/skills/violation-fixer/SKILL.md (or your agent's skills folder).<!--
SPDX-License-Identifier: Apache-2.0
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0.
-->
GrailsCodeStylePlugin, GrailsCodeAnalysisPlugin, and GrailsViolationAggregationPlugin enforce code quality across all 60+ modules.Activate this skill when:
./gradlew aggregateViolations and interpreting the resulting *_VIOLATIONS.md files.| Plugin | Applied to | Responsibility |
|---|---|---|
org.apache.grails.gradle.grails-code-style | Every subproject | Applies Checkstyle, CodeNarc, and code analysis; registers per-project codeStyle task; redirects XML reports to root build/reports/code-style/ |
org.apache.grails.gradle.grails-code-analysis | Every subproject | Applies PMD and SpotBugs (both opt-in); registers per-project codeAnalysis task; redirects XML reports to root build/reports/code-analysis/ |
org.apache.grails.gradle.grails-jacoco | Every subproject | Applies JaCoCo; wires jacocoTestReport to run after each test task |
org.apache.grails.gradle.grails-violation-aggregation | Root project only | Registers aggregateViolations and aggregateJacocoCoverage tasks; writes Markdown summaries to build/reports/violations/ |
| Task | Scope | Description |
|---|---|---|
./gradlew codeStyle | per-project | Runs Checkstyle and CodeNarc for that project |
./gradlew codeAnalysis | per-project | Runs PMD and/or SpotBugs for that project (when enabled) |
./gradlew aggregateViolations | root | Runs all checks across every module, then writes *_VIOLATIONS.md to build/reports/violations/ |
./gradlew validateRepositoryConventions | root | Validates canonical skill metadata, AGENTS paths, GitHub Action pins, and message keys. RAT provenance is the separate rat task, which aggregateViolations runs |
./gradlew cleanViolationReports | root | Deletes analyzer XML reports, their markers, and the aggregate Markdown so the next aggregate run re-analyzes every module. The root clean runs it |
./gradlew aggregateJacocoCoverage | root | Runs JaCoCo reports across every module, then writes JACOCO_COVERAGE.md to build/reports/violations/ |
./gradlew codenarcFix | per-project | Auto-fixes a subset of CodeNarc violations |
# Check a single module (style only)
./gradlew :grails-core:codeStyle
# Check a single module (analysis - enable through the module extension or an override)
./gradlew :grails-core:codeAnalysis -Pgrails.code-analysis.enabled.pmd=true
# Full multi-module check + report (use --continue so the reports are written even when an analyzer fails)
./gradlew aggregateViolations --continue
# Force every module to be re-analyzed instead of reusing UP-TO-DATE analyzer results
./gradlew cleanViolationReports aggregateViolations --continue
# Repository conventions only
./gradlew validateRepositoryConventions
# Include test sources in style checks
./gradlew aggregateViolations -Pgrails.code-style.enabled.tests=true
# Include test sources in analysis
./gradlew aggregateViolations -Pgrails.code-analysis.enabled.tests=true
# Ignore failures (collect reports without failing the build)
./gradlew aggregateViolations -Pgrails.code-style.ignoreFailures=true -Pgrails.code-analysis.ignoreFailures=true
# Auto-fix some CodeNarc violations before running checks
./gradlew codenarcFix codeStyle
# JaCoCo coverage report
./gradlew aggregateJacocoCoverageAfter running aggregateViolations, these files appear under build/reports/violations/ in the root project build directory:
| File | Tool | Always generated |
|---|---|---|
build/reports/violations/CODENARC_VIOLATIONS.md | CodeNarc | Yes |
build/reports/violations/CHECKSTYLE_VIOLATIONS.md | Checkstyle | Yes |
build/reports/violations/PMD_VIOLATIONS.md | PMD | Yes - reports PMD is disabled. when PMD is disabled |
build/reports/violations/SPOTBUGS_VIOLATIONS.md | SpotBugs | Yes - reports SpotBugs is disabled. when SpotBugs is disabled |
build/reports/violations/REPOSITORY_CONVENTIONS.md | Repository conventions | Yes - lists skill, Action, or message-key failures. Ordered after rat in the aggregateViolations lane |
After running aggregateJacocoCoverage:
| File | Tool | Generated |
|---|---|---|
build/reports/violations/JACOCO_COVERAGE.md | JaCoCo | Only when at least one subproject has a JaCoCo CSV report |
All reports are inside build/ and are excluded from version control via .gitignore. A clean run produces No violations found! 🎉 in each style file. The build must be clean before committing.
Each aggregated style or analysis report begins with Modules analyzed:, which names only modules that contributed data. Each file is a Markdown table grouped by module, with columns: Class, Tool, Violation, Line, Message.
Only the aggregate lane (aggregateViolations, aggregateStyleViolations, aggregateAnalysisViolations) writes these Markdown files. Running an analyzer task directly, such as ./gradlew :grails-core:checkstyleMain, produces only that task's own XML report and deliberately leaves the aggregate Markdown untouched, so a partial run can never overwrite an authoritative full-repository report. Because the writer is part of that lane rather than a per-task finalizer, pass --continue when you expect violations, otherwise the failing analyzer stops the build before the report explaining the failure is written. Analyzers for unchanged modules stay UP-TO-DATE between aggregate runs and their previous results are aggregated; run cleanViolationReports (or the root clean) first to force a full re-analysis.
Run ./gradlew validateRepositoryConventions to write build/reports/violations/REPOSITORY_CONVENTIONS.md. Fix the reported source rather than suppressing the validation.
| Finding | Fix |
|---|---|
| Skill | Start SKILL.md with YAML front matter, supply string name, description, and license values, use a valid directory name that matches name, and keep names unique. Every skill path that AGENTS.md references must exist, but AGENTS.md is not required to index every skill. |
| GitHub Action | Pin third-party references to one lowercase 40-hex immutable reference for that action across workflows and repository-local action.yml or action.yaml manifests. A 40-hex value may be a commit or annotated-tag object SHA. actions/* must use the full tag of a release (vX.Y.Z) and apache/* a version or branch reference, never a 40-hex SHA, and local ./... uses are permitted. Pin Docker uses, Docker action runs.image, and workflow job/service container images to literal immutable name@sha256:<digest> values. |
| Message key | Remove or rename the duplicate logical key in the reported grails-app/i18n/**/*.properties file, preserving escaped separators and continuation semantics. |
Rule file: build/code-style/codenarc/codenarc.groovy (generated by the plugin during setup; not intended to be edited directly).
Most common violations and how to fix them:
| Rule | Fix |
|---|---|
UnnecessaryGString | Replace "plain string" with 'plain string' |
UnnecessarySemicolon | Remove trailing ; |
SpaceBeforeOpeningBrace | Add space before { → method() { |
SpaceAroundMapEntryColon | [key: value] not [key:value] |
ConsecutiveBlankLines | Collapse 3+ blank lines to 2 |
ClassStartsWithBlankLine | Remove blank line right after class Foo { |
NoWildcardImports | Expand import org.foo.* to explicit imports |
UnusedImport | Remove imports not referenced in the file |
MethodName | Method names must be camelCase (not snake_case) |
VariableName | Variable names must be camelCase |
LineLength | Keep lines ≤ 200 chars (default) |
Auto-fixable via codenarcFix: ClassStartsWithBlankLine, SpaceAroundMapEntryColon, UnnecessaryGString, UnnecessarySemicolon, SpaceBeforeOpeningBrace, ConsecutiveBlankLines.
Rule file: build/code-style/checkstyle/checkstyle.xml.
Common violations:
| Rule | Fix |
|---|---|
ImportOrder | Re-order imports: `java |
AvoidStarImport | Use explicit class imports |
UnusedImports | Remove unused imports |
WhitespaceAround | Add spaces around operators and keywords |
NeedBraces | Add {} to single-statement if/for/while |
FileTabCharacter | Replace tabs with 4 spaces |
NewlineAtEndOfFile | Ensure file ends with \n |
Enable PMD in each clean module's build.gradle with grailsCodeAnalysis { enablePmd() }. Use -Pgrails.code-analysis.enabled.pmd.projects=:project-a,:project-b to also enable selected project paths for a baseline run. Use -Pgrails.code-analysis.enabled.pmd=true or =false to switch PMD on or off for every project; when set, it wins over both the module opt-ins and the .projects list. PMD excludes sources under each project's configured build directory.
enablePmd() configures PMD immediately, so customize the pmd* tasks directly after it, for example tasks.named('pmdMain') { ... }.
Rule file: build/code-analysis/pmd/pmd.xml.
Enable SpotBugs in each clean module's build.gradle with grailsCodeAnalysis { enableSpotbugs() }. Use -Pgrails.code-analysis.enabled.spotbugs.projects=:project-a,:project-b to also enable selected project paths for a baseline run. Use -Pgrails.code-analysis.enabled.spotbugs=true or =false to switch SpotBugs on or off for every project; when set, it wins over both the module opt-ins and the .projects list.
enableSpotbugs() configures SpotBugs immediately, so customize the spotbugs* tasks directly after it, for example tasks.named('spotbugsMain') { ... }.
Runs at Effort.MAX / Confidence.HIGH. Only high-confidence bugs are reported.
Enable: -Pgrails.code-style.enabled.spotless=true
Uses Palantir Java Format. Can auto-fix by running:
./gradlew spotlessApplyAll properties can be set in gradle.properties or passed as -P flags:
grails-code-style plugin (Checkstyle + CodeNarc)| Property | Default | Description |
|---|---|---|
grails.code-style.enabled.checkstyle | true | Enable Checkstyle |
grails.code-style.enabled.codenarc | true | Enable CodeNarc |
grails.code-style.enabled.spotless | false | Enable Spotless |
grails.code-style.enabled.tests | false | Also check test source sets |
grails.code-style.ignoreFailures | false | Collect reports without failing build |
grails.code-style.codenarc.fix | false | Run codenarcFix before CodeNarc tasks |
grails.codestyle.dir.checkstyle | (auto) | Custom path to Checkstyle config dir |
grails.codestyle.dir.codenarc | (auto) | Custom path to CodeNarc config dir |
skipCodeStyle | unset | If present, every static check is skipped: CodeNarc and Checkstyle, and PMD and SpotBugs as well. The aggregate reports say the tools were skipped |
grails-code-analysis plugin (PMD + SpotBugs)Enable PMD and SpotBugs primarily in each module's build.gradle:
grailsCodeAnalysis {
enablePmd()
enableSpotbugs()
}The Gradle properties below are all-project or selected-project overrides for baseline runs.
| Property | Default | Description |
|---|---|---|
grails.code-analysis.enabled.pmd | unset | When set, true or false overrides PMD for every project, including enablePmd() opt-ins and the .projects list |
grails.code-analysis.enabled.pmd.projects | unset | Also enable PMD for comma-separated project paths, unless the all-project property is set |
grails.code-analysis.enabled.spotbugs | unset | When set, true or false overrides SpotBugs for every project, including enableSpotbugs() opt-ins and the .projects list |
grails.code-analysis.enabled.spotbugs.projects | unset | Also enable SpotBugs for comma-separated project paths, unless the all-project property is set |
grails.code-analysis.enabled.tests | false | Also analyse test source sets |
grails.code-analysis.ignoreFailures | false | Collect ordinary findings without failing the build; missing expected XML always fails |
grails.code-analysis.dir.pmd | (auto) | Custom path to PMD config dir |
skipCodeAnalysis | unset | If present, PMD and SpotBugs are skipped while CodeNarc and Checkstyle still run. skipCodeStyle also skips them |
./gradlew aggregateViolations -Pgrails.code-style.ignoreFailures=true -Pgrails.code-analysis.ignoreFailures=truebuild/reports/violations/CODENARC_VIOLATIONS.md and build/reports/violations/CHECKSTYLE_VIOLATIONS.md to see all issues by module./gradlew codenarcFix to auto-fix what it can./gradlew aggregateViolations and confirm files contain No violations found! 🎉build/ and do not need to be deleted before committingAll XML reports are consolidated at:
build/reports/code-style/ ← XML inputs for style aggregation
├── checkstyle/
│ ├── <hex-project-path>-checkstyleMain.xml
│ ├── <hex-project-path>-checkstyleCli.xml
│ └── ...
└── codenarc/
├── <hex-project-path>-codenarcMain.xml
└── ...
build/reports/code-analysis/ ← XML inputs for analysis aggregation (if enabled)
├── pmd/
└── spotbugs/
build/reports/violations/ ← Markdown summaries written by aggregateViolations
├── CODENARC_VIOLATIONS.md
├── CHECKSTYLE_VIOLATIONS.md
├── PMD_VIOLATIONS.md
├── SPOTBUGS_VIOLATIONS.md
├── REPOSITORY_CONVENTIONS.md
└── JACOCO_COVERAGE.md ← written by aggregateJacocoCoverageThe filename prefix is the UTF-8 hexadecimal encoding of the full Gradle project path. Aggregation decodes it back to paths such as :grails-core, preventing nested projects with the same leaf name from colliding.
© apache, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/violation-fixer of apache/grails-core.
Open the folder on GitHubat commit 3d6db18
Grails Violation Fixer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Grails Violation Fixer this skillapache/grails-core | 2.9k | — | ~3.9k | Automated safety check: Pass | Apache-2.0 | |
| Convex Doctorwaynesutton/markdown-site | 628 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Code Qualitybonny/WordPress-Simple-History | 317 | — | ~519 | Automated safety check: Notes | None | |
| Code QualityBlackBeltTechnology/pi-agent-dashboard | 316 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Dx Code Analyzer Runforcedotcom/sf-skills | 1.1k | — | ~6.3k | Automated safety check: Pass | Apache-2.0 | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.2k | — | ~2.2k | Automated safety check: Pass | MIT |
waynesutton/markdown-site
Run convex-doctor static analysis, interpret findings, and fix issues across security, performance, correctness, schema, and architecture categories.
bonny/WordPress-Simple-History
Runs linting and static analysis on PHP/CSS/JS using phpcs, phpstan, and rector.
BlackBeltTechnology/pi-agent-dashboard
Drive static-analysis code quality in pi-agent-dashboard with Biome (analyze → fix → test), in changed-files or whole-repo mode.
forcedotcom/sf-skills
Run Salesforce Code Analyzer to scan code for security, performance, best practice, and code style violations.
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
comet-ml/opik
Checklist for wiring a new linter into Opik's Code Quality pipeline: the four files to edit, the silent-failure gotchas and the pass/fail verification loop.
apache/grails-core
Guides building Grails web applications and REST APIs with GORM, controllers, services, views, plugins and Spock and Geb testing.
apache/grails-core
Guidance for Groovy 5 work in Grails projects: syntax, closures, traits, DSLs, metaprogramming, Spock tests, static compilation and Java 21 integration.
apache/grails-core
Guides changes to the grails-data-hibernate7 module, covering domain binding, Hibernate 5 to 7 migration work, generators and integration specs.
apache/grails-core
Guide for writing modern Java 21 in a Grails and Groovy codebase: records, sealed classes, pattern matching, text blocks and how Java works alongside Groovy.
apache/grails-core
Guides running, reviewing and fixing test failures across grails-core modules with Gradle, including targeted runs and the aggregate HTML and Markdown reports.
apache/grails-core
Guides Gradle 9 build changes in apache/grails-core on the 8.0.x line, favoring the repo's convention plugins, BOM platforms and patterns over generic Gradle advice.
Works with
Categories
Guide to running, reading and fixing code style and analysis violations in grails-core with CodeNarc, Checkstyle, PMD, SpotBugs, Spotless and JaCoCo through Gradle. The skill explains how three Gradle plugins enforce code quality across the 60+ modules of grails-core. The code style plugin applies Checkstyle and CodeNarc to every subproject, the code analysis plugin applies PMD and SpotBugs, which are opt-in, and a JaCoCo plugin runs a coverage report after each test task.
Grails Violation Fixer fits situations like: running aggregateViolations and working through the generated violation reports; fixing CodeNarc, Checkstyle, PMD, SpotBugs or Spotless findings in grails-core; enabling, disabling or tuning style and analysis tools across the repository.
Run `npx skills add apache/grails-core --skill violation-fixer -a claude-code`. Or copy the skill folder (.agents/skills/violation-fixer in apache/grails-core) into .claude/skills/violation-fixer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add apache/grails-core --skill violation-fixer -a codex`. Or copy the skill folder (.agents/skills/violation-fixer in apache/grails-core) into .agents/skills/violation-fixer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add apache/grails-core --skill violation-fixer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/violation-fixer, .gemini/skills/violation-fixer, .github/skills/violation-fixer and .opencode/skills/violation-fixer in your project.
SKILL.md names no scripts, command-line tools or credentials: Grails Violation Fixer is instructions for the agent only. Our summary lists: A checkout of grails-core; The Gradle wrapper that ships with the repository.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Grails Violation Fixer is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Grails Violation Fixer: Convex Doctor (waynesutton/markdown-site, 628 stars), Code Quality (bonny/WordPress-Simple-History, 317 stars), Code Quality (BlackBeltTechnology/pi-agent-dashboard, 316 stars) and Dx Code Analyzer Run (forcedotcom/sf-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
apache (a GitHub organization) maintains it in apache/grails-core, which has 2,934 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 7, 2026.
Source: apache/grails-core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.