quality-scan
Scan Types Available:
- critical - Crashes, security vulnerabilities, resource leaks, data corruption
- logic - Algorithm errors, edge cases, type guards, off-by-one errors
- cache - Cache staleness, race conditions, invalidation bugs
- workflow - Build scripts, CI issues, cross-platform compatibility
- workflow-optimization - CI optimization checks (build-required conditions on cached builds)
- security - GitHub Actions workflow security (zizmor scanner)
- documentation - README accuracy, outdated docs, missing documentation, junior developer friendliness
Why Quality Scanning Matters:
- Catches bugs before they reach production
- Identifies security vulnerabilities early
- Improves code quality systematically
- Provides actionable fixes with file:line references
- Prioritizes issues by severity for efficient remediation
- Cleans up junk files for a well-organized repository
Agent Prompts:
All agent prompts are embedded in reference.md with structured , , , and tags following Claude best practices.
Do NOT:
- Fix issues during scan (analysis only - report findings)
- Skip critical scan types without user permission
- Report findings without file/line references
- Proceed if codebase has uncommitted changes (warn but continue)
Do ONLY:
- Run enabled scan types in priority order (critical → logic → cache → workflow)
- Generate structured findings with severity levels
- Provide actionable improvement tasks with specific code changes
- Report statistics and coverage metrics
- Deduplicate findings across scans
Process
Execute the following phases sequentially to perform comprehensive quality analysis.
Phase 1: Validate Environment
Verify the environment before starting scans:
git status
If working directory dirty:
- Warn user: "Working directory has uncommitted changes - continuing with scan"
- Continue with scans (quality scanning is read-only)
Phase 2: Update Dependencies
Update Process:
pnpm run update
Track for reporting:
- Packages updated: N
- Update status: Success/Failed (with warning)
Important: Only update dependencies in the current repository. Do NOT attempt to update sibling repositories as this is out of scope and could have unintended side effects.
Phase 2b: Install External Tools (zizmor)
Read minimumReleaseAge from
.pnpmrc:grep 'minimumReleaseAge' .pnpmrc | cut -d'=' -f2This returns minutes (e.g.,
10080= 7 days). Default to 10080 if not found.Query zizmor releases (using curl or gh):
# Option A: curl (universally available) curl -s "https://api.github.com/repos/zizmorcore/zizmor/releases" | \ jq '[.[] | select(.prerelease == false) | {tag: .tag_name, date: .published_at}] | .[0:10]' # Option B: gh (if available) gh api repos/zizmorcore/zizmor/releases --jq \ '[.[] | select(.prerelease == false) | {tag: .tag_name, date: .published_at}] | .[0:10]'Calculate age and select version:
- Convert minimumReleaseAge from minutes to days:
minutes / 1440 - Find latest stable release older than that threshold
- Example: If minimumReleaseAge=10080 (7 days) and today is March 24, select releases from March 17 or earlier
- Convert minimumReleaseAge from minutes to days:
Install selected version (choose based on available tools):
# macOS with Homebrew (latest only, version pinning limited) brew install zizmor # Python environments (version pinning supported) pipx install zizmor==VERSION uv tool install zizmor==VERSION uvx zizmor@VERSION --helpRecommended priority: pipx/uvx > brew
Phase 3: Repository Cleanup
Cleanup Tasks:
Remove SCREAMING_TEXT.md files (all-caps .md files) that are NOT:
- Inside
.claude/directory - Inside
docs/directory - Named
README.md,LICENSE, orSECURITY.md
- Inside
Remove temporary test files in wrong locations:
.test.mjsor.test.mtsfiles outsidetest/or__tests__/directories- Temp files:
*.tmp,*.temp,.DS_Store,Thumbs.db - Editor backups:
*~,*.swp,*.swo,*.bak - Test artifacts:
*.logfiles in root or package directories (not logs/)
# Find SCREAMING_TEXT.md files (all caps with .md extension)
find . -type f -name '*.md' \
! -path './.claude/*' \
! -path './docs/*' \
! -name 'README.md' \
! -name 'LICENSE' \
! -name 'SECURITY.md' \
| grep -E '/[A-Z_]+\.md$'
# Find test files in wrong locations
find . -type f \( -name '*.test.mjs' -o -name '*.test.mts' \) \
! -path '*/test/*' \
! -path '*/__tests__/*' \
! -path '*/node_modules/*'
# Find temp files
find . -type f \( \
-name '*.tmp' -o \
-name '*.temp' -o \
-name '.DS_Store' -o \
-name 'Thumbs.db' -o \
-name '*~' -o \
-name '*.swp' -o \
-name '*.swo' -o \
-name '*.bak' \
\) ! -path '*/node_modules/*'
# Find log files in wrong places (not in logs/ or build/ directories)
find . -type f -name '*.log' \
! -path '*/logs/*' \
! -path '*/build/*' \
! -path '*/node_modules/*' \
! -path '*/.git/*'
If no junk files found:
- Report: "✓ Repository is clean - no junk files found"
Important:
- Always get user confirmation before deleting
- Show file contents if user is unsure
- Track deleted files for reporting
Phase 4: Structural Validation
Validation Tasks:
Run the consistency checker to validate monorepo structure:
node scripts/check-consistency.mjs
The consistency checker validates:
- Required files - README.md, package.json existence
- Vitest configurations - Proper mergeConfig usage
- Test scripts - Correct test patterns per package type
- Coverage scripts - Coverage setup where appropriate
- External tools - external-tools.json format validation
- Build output structure - Standard build/{mode}/out/Final/ layout
- Package.json structure - Standard fields and structure
- Workspace dependencies - Proper workspace:* and catalog: usage
If errors found:
- Report as Critical findings in the final report
- Include file:line references from checker output
- Suggest fixes based on checker recommendations
- Continue with remaining scans
If warnings found:
- Report as Low findings (these are expected deviations)
- Document in final report under "Structural Validation"
Track for reporting:
- Number of packages validated
- Number of errors/warnings/info messages
- Any architectural pattern violations
Phase 5: Determine Scan Scope
Default Scan Types (run all unless user specifies):
- critical - Critical bugs (crashes, security, resource leaks)
- logic - Logic errors (algorithms, edge cases, type guards)
- cache - Caching issues (staleness, races, invalidation)
- workflow - Workflow problems (scripts, CI, git hooks)
- workflow-optimization - CI optimization (build-required checks for cached builds)
- security - GitHub Actions security (template injection, cache poisoning, etc.)
- documentation - Documentation accuracy (README errors, outdated docs)
User Interaction: Use AskUserQuestion tool:
- Question: "Which quality scans would you like to run?"
- Header: "Scan Types"
- multiSelect: true
- Options:
- "All scans (recommended)" → Run all 4 scan types
- "Critical only" → Run critical scan only
- "Critical + Logic" → Run critical and logic scans
- "Custom selection" → Ask user to specify which scans
Default: If user doesn't specify, run all scans.
If user requests non-existent scan type, report error and suggest valid types.
Phase 6: Execute Scans
// Example: Critical scan
Task({
subagent_type: "general-purpose",
description: "Critical bugs scan",
prompt: `${CRITICAL_SCAN_PROMPT_FROM_REFERENCE_MD}
[IF monorepo] Focus on packages/ directories and root-level scripts/.
[IF single package] Focus on src/, lib/, and scripts/ directories.
Report findings in this format:
- File: path/to/file.mts:lineNumber
- Issue: Brief description
- Severity: Critical/High/Medium/Low
- Pattern: Code snippet
- Trigger: What input triggers this
- Fix: Suggested fix
- Impact: What happens if triggered
Scan systematically and report all findings. If no issues found, state that explicitly.`
})
For each scan:
- Load agent prompt template from
reference.md - Customize for repository context (determine monorepo vs single package structure)
- Spawn agent with Task tool using "general-purpose" subagent_type
- Capture findings from agent response
- Parse and categorize results
Execution Order: Run scans sequentially in priority order:
- critical (highest priority)
- logic
- cache
- workflow (lowest priority)
Agent Prompt Sources:
- Critical scan: reference.md starting at line ~12
- Logic scan: reference.md starting at line ~100
- Cache scan: reference.md starting at line ~200
- Workflow scan: reference.md starting at line ~300
- Security scan: reference.md starting at line ~400
- Workflow-optimization scan: reference.md starting at line ~860
- Documentation scan: reference.md starting at line ~1040
Phase 7: Aggregate Findings
interface Finding {
file: string // "src/path/to/file.mts:89" or "packages/pkg/src/file.mts:89"
issue: string // "Potential null pointer access"
severity: "Critical" | "High" | "Medium" | "Low"
scanType: string // "critical"
pattern: string // Code snippet showing the issue
trigger: string // What causes this issue
fix: string // Suggested code change
impact: string // What happens if triggered
}
Deduplication:
- Remove duplicate findings across scans (same file:line, same issue)
- Keep the finding from the highest priority scan
- Track which scans found the same issue
Prioritization:
- Sort by severity: Critical → High → Medium → Low
- Within same severity, sort by scanType priority
- Within same severity+scanType, sort alphabetically by file path
Phase 8: Generate Report
# Quality Scan Report
**Date:** YYYY-MM-DD
**Repository:** [repository name]
**Scans:** [list of scan types run]
**Files Scanned:** N
**Findings:** N critical, N high, N medium, N low
## Dependency Updates
**Status:** N packages updated
**Result:** Success/Failed
## Structural Validation
**Consistency Checker Results:**
- Packages validated: 12
- Errors: N (reported as Critical below)
- Warnings: N (reported as Low below)
- Info: N observations
**Validation Categories:**
✓ Required files
✓ Vitest configurations
✓ Test scripts
✓ Coverage scripts
✓ External tools
✓ Build output structure
✓ Package.json structure
✓ Workspace dependencies
## Critical Issues (Priority 1) - N found
### src/path/to/file.mts:89
- **Issue**: [Description of critical issue]
- **Pattern**: [Problematic code snippet]
- **Trigger**: [What triggers this issue]
- **Fix**: [Suggested fix]
- **Impact**: [Impact description]
- **Scan**: critical
## High Issues (Priority 2) - N found
[Similar format for high severity issues]
## Medium Issues (Priority 3) - N found
[Similar format for medium severity issues]
## Low Issues (Priority 4) - N found
[Similar format for low severity issues]
## Scan Coverage
- **Dependency updates**: N packages updated
- **Structural validation**: [IF consistency checker exists] N packages validated, N architectural patterns checked
- **Critical scan**: N files analyzed in [src/ or packages/]
- **Logic scan**: N files analyzed
- **Cache scan**: N files analyzed (if applicable)
- **Workflow scan**: N files analyzed (package.json, scripts/, .github/)
## Recommendations
1. Address N critical issues immediately before next release
2. Review N high-severity logic errors in patch application
3. Schedule N medium issues for next sprint
4. Low-priority items can be addressed during refactoring
## No Findings
[If a scan found no issues, list it here:]
- Critical scan: ✓ Clean
- Logic scan: ✓ Clean
Output Report:
- Display report to console (user sees it)
- Offer to save to file (optional):
reports/quality-scan-YYYY-MM-DD.md
Phase 9: Complete
Quality Scan Complete
✓ Dependency updates: N packages updated ✓ Structural validation: [IF applicable] N packages validated (N errors, N warnings) ✓ Repository cleanup: N junk files removed ✓ Scans completed: [list of scan types] ✓ Total findings: N (N critical, N high, N medium, N low) ✓ Files scanned: N ✓ Report generated: Yes ✓ Scan duration: [calculated from start to end]
Dependency Update Summary:
- Packages updated: N
- Update status: Success/Failed
Structural Validation Summary: [IF consistency checker exists]
- Packages validated: N
- Consistency errors: N (included in critical findings)
- Consistency warnings: N (included in low findings)
- Architectural patterns checked: N
Repository Cleanup Summary:
- SCREAMING_TEXT.md files removed: N
- Temporary test files removed: N
- Temp/backup files removed: N
- Log files cleaned up: N
Critical Issues Requiring Immediate Attention:
- N critical issues found
- Review report above for details and fixes
Next Steps:
- Address critical issues immediately
- Review high-severity findings
- Schedule medium/low issues appropriately
- Re-run scans after fixes to verify
All findings include file:line references and suggested fixes.
Success Criteria
- ✅
<promise>QUALITY_SCAN_COMPLETE</promise>output - ✅ All enabled scans completed without errors
- ✅ Findings prioritized by severity (Critical → Low)
- ✅ All findings include file:line references
- ✅ Actionable suggestions provided for all findings
- ✅ Report generated with statistics and coverage metrics
- ✅ Duplicate findings removed
Scan Types
See reference.md for detailed agent prompts with structured tags:
- critical-scan - Null access, promise rejections, race conditions, resource leaks
- logic-scan - Off-by-one errors, type guards, edge cases, algorithm correctness
- cache-scan - Invalidation, key generation, memory management, concurrency
- workflow-scan - Scripts, package.json, git hooks, CI configuration
- workflow-optimization-scan - CI optimization checks (build-required on installation steps with checkpoint caching)
- security-scan - GitHub Actions workflow security (runs zizmor scanner)
- documentation-scan - README accuracy, outdated examples, incorrect package names, missing documentation, junior developer friendliness (beginner-friendly explanations, troubleshooting, getting started guides)
All agent prompts follow Claude best practices with , , , , and tags.
Commands
This skill is self-contained. No external commands needed.
Context
This skill provides systematic code quality analysis by:
- Spawning specialized agents for targeted analysis
- Using Task tool to run agents autonomously
- Embedding agent prompts in reference.md following best practices
- Generating prioritized, actionable reports
- Supporting partial scans (user can select specific scan types)
For detailed agent prompts with best practices structure, see reference.md.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.