Adding a Health Check
GHS currently has 63 health checks across 2 modules (core and .NET). Here's how to add a new one.
Step 1: Choose a Module and Category
Checks are organized by module, then by category within each module.
Core module (always active) — 7 categories:
documentation--- project docs (README, LICENSE, CHANGELOG, etc.)repo-settings--- GitHub repo configurationdev-config--- developer tooling (.gitignore, .editorconfig, etc.)ci-cd--- CI/CD pipelinescommunity--- community health (templates, security policy)security--- security posturemaintenance--- ongoing project health
.NET module (activates on .sln detection) — 4 categories:
build-config--- build infrastructure (Directory.Build.props, global.json, etc.)code-quality--- analyzers, nullable, warningstesting--- tests, coverage, benchmarkspackaging--- NuGet, SourceLink, multi-targeting
Step 2: Create the Check File
Create the check file in the appropriate module and category directory:
- Core checks:
.claude/skills/shared/checks/core/{category}/{slug}.md - .NET checks:
.claude/skills/shared/checks/dotnet/{category}/{slug}.md
Use this frontmatter structure:
---
check: Human-readable name
slug: kebab-case-slug
tier: 1|2|3
category: one of the module's categories
points: 4|2|1
scoring: Normal|INFO only
---Then include these sections:
- What to Check --- verification logic
- Status Rules --- when PASS, FAIL, WARN
- Project Item Content --- what to create as a GitHub Project item if FAIL (title, description, acceptance criteria)
Step 3: Register in the Module Index
Add the check to the appropriate module's index.md:
- Core:
.claude/skills/shared/checks/core/index.md - .NET:
.claude/skills/shared/checks/dotnet/index.md
Steps:
- Add a row to the appropriate tier table
- Update the Scoring Summary if tier totals change
- Add to the Slug-to-Path Lookup table
Step 4: Categorize for Fixing
Add the slug to the appropriate category in .claude/skills/shared/references/item-categories.md:
- Category A: API-only (no file changes)
- Category B: File changes (needs worktree)
- Category CI: Special CI diagnosis
For .NET checks, most are Category B (file changes to .csproj or Directory.Build.props).
Step 5: Update Documentation
Update the docs site to reflect the new check:
- Add to the appropriate tier page in
docs/checks/ - Update check counts in
docs/checks/index.md - Update the HomeContent stats if totals changed
Step 6: Test
Run ghs-repo-scan against a test repo and verify your check appears correctly.
Adding a New Module
To add an entirely new language module (e.g., Python, Node):
- Create
checks/{module}/index.mdwith the module's check registry - Create category subdirectories with check files
- Add the module to
checks/index.md(the module registry) - Add a stack detection rule (e.g.,
pyproject.tomlfor Python) - Update
shared/references/scoring-logic.mdwith the module's max points - Update
shared/references/config.mdwith the module constants - Update
shared/references/item-categories.mdwith fix routing - Update
shared/references/projects-format.mdwith the new project item fields for the module - Update consumer skills (ghs-repo-scan, ghs-backlog-board, ghs-backlog-score, ghs-backlog-fix)