From cqa-tools
Orchestrates full CQA 2.1 content quality assessments for Red Hat modular documentation repositories, guiding parameter-by-parameter through Pre-migration, Quality, and Onboarding tabs using specialized skills.
npx claudepluginhub redhat-documentation/redhat-docs-agent-tools --plugin cqa-toolsThis skill is limited to using the following tools:
Run a complete CQA 2.1 assessment against a Red Hat modular documentation repository. The assessment covers three tabs with 54 total parameters across Pre-migration, Quality, and Onboarding.
scripts/check-conscious-language.pyscripts/check-content-types.pyscripts/check-external-links.pyscripts/check-fluff.pyscripts/check-legal-notices.pyscripts/check-product-names.pyscripts/check-readability.pyscripts/check-scannability.pyscripts/check-simple-words.pyscripts/check-tp-disclaimers.pyscripts/resolve-includes.pyscripts/validate-refs.pyAssesses CQA P2-P7 modularization in Red Hat AsciiDoc docs: assembly structure without rendered text between includes, module prefixes, templates, required elements, nesting depth.
Provides checklists, metrics, scoring, and grep-based detection patterns for auditing README, API, and architecture documentation quality.
Assesses documentation quality across readability, consistency, audience fit, and prose clarity. Produces scored reviews with actionable findings before releases or doc reviews.
Share bugs, ideas, or general feedback.
Run a complete CQA 2.1 assessment against a Red Hat modular documentation repository. The assessment covers three tabs with 54 total parameters across Pre-migration, Quality, and Onboarding.
See scoring-guide.md for score definitions and checklist.md for the full parameter list.
Before starting any checks, ask the user two questions:
Scope — what to assess:
resolve-includes.py to build the file list — see Include-tree resolution below)Mode — what to do with issues:
Severity filtering — which parameters to run:
cqa-legal-branding). Use the Skill Map below to identify which parameters are covered.| Skill | Parameters Covered |
|---|---|
cqa-tools:cqa-vale-check | P1 |
cqa-tools:cqa-modularization | P2, P3, P4, P5, P6, P7 |
cqa-tools:cqa-titles-descriptions | P8, P9, P10, P11 |
cqa-tools:cqa-procedures | P12, Q12, Q13, Q14, Q15, Q16 |
cqa-tools:cqa-editorial | P13, P14, Q1, Q2, Q3, Q4, Q5, Q18, Q20 |
cqa-tools:cqa-links | P15, P16, P17, Q24, Q25 |
cqa-tools:cqa-legal-branding | P18, P19, Q17, Q23, O1, O2, O3, O4, O5 |
cqa-tools:cqa-user-focus | Q6, Q7, Q8, Q9, Q10, Q11 |
cqa-tools:cqa-tables-images | Q19, Q21, Q22 |
cqa-tools:cqa-onboarding | O6, O7, O8, O9, O10 |
cqa-tools:cqa-report | Final report generation |
Recommended order (dependencies flow downward):
cqa-tools:cqa-vale-check — foundational; fixes here affect other checkscqa-tools:cqa-modularization — structural compliancecqa-tools:cqa-titles-descriptions — metadata qualitycqa-tools:cqa-procedures — procedure structurecqa-tools:cqa-editorial — writing qualitycqa-tools:cqa-links — cross-references and URLscqa-tools:cqa-legal-branding — compliancecqa-tools:cqa-user-focus — content qualitycqa-tools:cqa-tables-images — visual elementscqa-tools:cqa-onboarding — publishing readinesscqa-tools:cqa-report — final summaryWhen the user chooses "One assembly" scope, use resolve-includes.py to build the exact file list before running any checks. This prevents scope leakage (scanning files outside the assembly's include tree).
# List all files included by an assembly (recursively follows include:: directives)
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cqa-assess/scripts/resolve-includes.py "$DOCS_REPO/assemblies/admin/assembly_installing.adoc" --base-dir "$DOCS_REPO"
# Tree view showing the include hierarchy
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cqa-assess/scripts/resolve-includes.py "$DOCS_REPO/assemblies/admin/assembly_installing.adoc" --base-dir "$DOCS_REPO" --format tree
# JSON output for programmatic use
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cqa-assess/scripts/resolve-includes.py "$DOCS_REPO/assemblies/admin/assembly_installing.adoc" --base-dir "$DOCS_REPO" --format json
# Include the root file itself in the output
python3 ${CLAUDE_PLUGIN_ROOT}/skills/cqa-assess/scripts/resolve-includes.py "$DOCS_REPO/assemblies/admin/assembly_installing.adoc" --base-dir "$DOCS_REPO" --include-root
The script handles symlinks, attribute placeholders in paths, circular includes, and conditional includes (ifdef/ifndef). Exit codes: 0 (all resolved), 1 (some unresolved), 2 (invalid arguments).
Scoping workflow:
resolve-includes.py to get the file list for the assembly--scan-dirs or by filtering outputReusable scripts in skills/cqa-assess/scripts/ automate repetitive checks. Each script accepts a docs repo path and exits 0 (pass), 1 (issues found), or 2 (invalid arguments). Python 3.9+ stdlib only.
All check scripts (except check-legal-notices.py) scan assemblies/, modules/, topics/, and snippets/ by default. Use --scan-dirs to override (e.g., --scan-dirs topics assemblies to skip snippets). check-legal-notices.py checks titles/*/ for docinfo.xml and the repo root for LICENSE — use --repo-root to specify the repo root when the docs directory is a subdirectory.
| Script | Skill | Parameters | Extra flags |
|---|---|---|---|
check-product-names.py | cqa-tools:cqa-legal-branding | P18, O1, O3 | --config, --fix |
check-conscious-language.py | cqa-tools:cqa-legal-branding | Q23, O4 | |
check-content-types.py | cqa-tools:cqa-modularization | P3, P4, P5 | --no-prefix-check |
check-tp-disclaimers.py | cqa-tools:cqa-legal-branding | P19, O5 | |
check-external-links.py | cqa-tools:cqa-legal-branding | Q17 | --details |
check-legal-notices.py | cqa-tools:cqa-legal-branding | O2 | --repo-root |
check-scannability.py | cqa-tools:cqa-editorial | Q1 | |
check-simple-words.py | cqa-tools:cqa-editorial | Q3 | |
check-readability.py | cqa-tools:cqa-editorial | Q4 | |
check-fluff.py | cqa-tools:cqa-editorial | Q5 | |
resolve-includes.py | (utility) | — | --format, --include-root |
Run all check scripts at once:
for script in scripts/check-*.py; do
python3 "$script" "$DOCS_REPO"
echo "---"
done
resolve-includes.py to determine the exact file list.