Skip to content

Validation and Linting Reference

Central reference for all validation scripts, linting commands, git hooks, and CI workflows.

Jump to: Architecture · Lefthook Hooks · Validation Scripts · CI Workflows · Running Locally

Validation runs at three stages, catching issues progressively earlier:

flowchart LR
    A["Pre-Commit<br/>(lefthook)"] --> B["Pre-Push<br/>(lefthook)"]
    B --> C["CI<br/>(GitHub Actions)"]
    style A fill:#e8f5e9,stroke:#4caf50,color:#000
    style B fill:#fff3e0,stroke:#ff9800,color:#000
    style C fill:#ffebee,stroke:#f44336,color:#000
  1. Pre-commit — validates staged files only (fast, file-type scoped, parallel)
  2. Pre-push — validates all changed files vs main (domain-scoped, parallel)
  3. CI — validates the full repository on every PR and push to main

All hooks are defined in lefthook.yml at the repository root.

HookTrigger (glob)Purpose
markdown-lint*.mdmarkdownlint on staged markdown files
link-checksite/src/content/docs/**/*.{md,mdx}Verify URLs in staged docs files
h2-syncSKILL.md, azure-artifacts filesCheck H2 heading sync across sources
artifact-validationagent-output/**/*.mdValidate artifact H2 structure against templates
agents**/*.agent.md, **/*.prompt.mdAgent frontmatter, model alignment, body size
instructions**/*.instructions.md, agents, skillsInstruction frontmatter and cross-reference validity
secrets-baseline(all staged files)gitleaks secret scan (soft-skip if not installed)
python-linttools/mcp-servers/**/*.pyRuff linter on Python files
terraform-fmt*.tfTerraform formatting check
terraform-validate*.tfTerraform validation per project
iac-security-baselineinfra/bicep/**/*.bicep, infra/terraform/**/*.tfTLS 1.2, HTTPS-only, no public blob, managed identity
HookPurpose
commitlintEnforce Conventional Commits format
HookPurpose
branch-namingValidate branch name uses an approved prefix
branch-scopeValidate domain branches only modify in-scope files
diff-based-checkRun domain-scoped validators for changed file types

All scripts are in the tools/scripts/ directory. Run via npm run <command>.

npm CommandScriptPurpose
validate:agentsvalidate-agents.mjsAgent frontmatter, body size, model alignment
validate:skillsvalidate-skills.mjsSkill format, affinity, references, stale refs
validate:skill-checksvalidate-skill-checks.mjsSkill size (≤500 lines) and references
validate:instruction-checksvalidate-instruction-checks.mjsInstruction frontmatter and applyTo patterns
validate:agent-registryvalidate-agent-registry.mjsAgent registry consistency
validate:workflow-graphvalidate-workflow-graph.mjsDAG integrity (no orphans, no cycles)
npm CommandScriptPurpose
validate:artifactsvalidate-artifacts.mjsH2 sync, template compliance, and auto-fix (with --fix)
e2e:validatevalidate-e2e-step.mjsE2E pipeline structural validation
e2e:benchmarkbenchmark-e2e.mjs8-dimension benchmark scoring
npm CommandScriptPurpose
lint:governance-refsvalidate-governance-refs.mjsGovernance guardrails integrity
validate:no-hardcoded-countsvalidate-no-hardcoded-counts.mjsPrevent hardcoded entity counts
lint:deprecated-refsvalidate-no-deprecated-refs.mjsBlock deprecated API/pattern references
validate:iac-security-baselinevalidate-iac-security-baseline.mjsIaC security baseline (TLS, HTTPS, blob, identity, SQL auth)
npm CommandScriptPurpose
validate:session-statevalidate-session-state.mjsSchema validation + deprecated lock/claim field detection
npm CommandScriptPurpose
lint:glob-auditvalidate-glob-audit.mjsDetect overly broad glob patterns
lint:orphaned-contentvalidate-orphaned-content.mjsDetect unreferenced skills/content
lint:docs-freshnesscheck-docs-freshness.mjsDocumentation staleness detection
lint:version-syncvalidate-version-sync.mjsVersion consistency across files
npm CommandScriptPurpose
validate:vscodevalidate-vscode-config.mjsVS Code settings completeness
validate:hooksvalidate-hooks.mjsHook script structure and syntax
test:hookstest-hooks.shHook integration tests (bats)
lint:mcp-configvalidate-mcp-config.mjsMCP server configuration validity
npm CommandToolPurpose
lint:mdmarkdownlint-cli2Markdown formatting and style
format:checkPrettierCode formatting (JS/JSON/CSS; markdown via markdownlint)
lint:linksmarkdown-link-checkURL validity in all markdown files
lint:links:docsmarkdown-link-checkURL validity in site docs
lint:jsonlint-json.mjsJSON/JSONC syntax validation
lint:pythonruffPython code quality (tools/mcp-servers/azure-pricing/)
lint:terraform-fmtterraform fmtTerraform formatting compliance
lint:bicep-fmtbicep formatBicep formatting compliance (no-op when no projects)
validate:terraformterraform validateTerraform validation per project
npm CommandPurpose
validate:allRun all validators (parallel Node + external)
validate:_nodeAll Node.js validators in parallel
validate:_externalAll external tool validators in parallel
validate:agentsAgent frontmatter, body, model alignment
validate:artifactsH2 sync, template compliance, auto-fix
validate:skillsSkill format, affinity, references, stale
audit:quarterlyQuarterly context audit checks

validate:_external is a local-developer aggregate (run all external-tool linters in one shot). In CI its members are gated individually so coverage does not depend on the aggregate: lint:md and format:check run in ci.yml, lint:python runs in the ci.yml external-tests job, lint:terraform-fmt / lint:bicep-fmt / validate:terraform run in iac-checks.yml, and the site link check runs in docs-checks.yml.

Agent-Invoked IaC Validators (runtime, not CI)

Section titled “Agent-Invoked IaC Validators (runtime, not CI)”

These validators are run by agents during the workflow against generated artifacts (Steps 4–6), not by lefthook or CI. They have no committed inputs on main, so they are intentionally absent from the aggregates above.

npm CommandInvoked byValidates
validate:iac-contract05-IaC Planner04-iac-contract.json schema/DAG
validate:iac-contract-consistency05-IaC PlannerContract ↔ implementation plan
validate:iac-handoff06b/06t CodeGen05-iac-handoff.json + tree hash
validate:environment-manifest05-IaC Planner04-environment-manifest.json
validate:policy-property-map05-IaC Planner04-policy-property-map.json

All workflows are in .github/workflows/.

WorkflowFileTriggerPurpose
CIci.ymlPR to main, push to mainFull validation suite (markdown, Prettier, agents, skills, hooks, bats tests, MCP, VS Code config) + Python ruff in the external-tests job
IaC Checksiac-checks.ymlinfra/** changesTerraform fmt/validate + Bicep format (path-filtered; no-op until IaC is committed)
Branch Enforcementbranch-enforcement.ymlPR to mainBranch naming convention and scope validation
Link Checklink-check.ymlDocs changesURL validity in documentation
Docsdocs.ymlDocs changesBuild and deploy Astro Starlight site
E2E Validatione2e-validation.ymlAgent output changesE2E pipeline structural validation
Weekly Maintenanceweekly-maintenance.ymlScheduled (weekly)Freshness audits, orphaned content, glob audit
Azure Deprecation Trackerazure-deprecation-tracker.ymlScheduledTrack Azure service deprecations
Terminal window
# Run everything
npm run validate:all
# Run a specific category
npm run lint:md # Markdown only
npm run validate:agents # Agent definitions only
npm run validate:session-state # Session state only
# Auto-fix where supported
npm run lint:md:fix # Fix markdown issues
npm run fix:artifacts -- <file> --apply # Fix artifact H2 headings
npm run lint:python:fix # Fix Python lint issues