Project Sync/Lint
Purpose
Provide centralized synchronization and validation for the project governance system:
- Lint: enforce the Project Contract and detect drift
- Sync: generate missing
.ai-task.yaml(IDs), upsertregistry.yaml, and regenerate derived views - CI: run in check-only mode to block inconsistent changes (errors only; warnings do not fail by default)
This skill is repo governance oriented. It should not implement product code changes.
Commands
All commands are implemented by:
node .ai/scripts/ctl-project-governance.mjs
Init
Create .ai/project/<project>/ files from templates (idempotent).
node .ai/scripts/ctl-project-governance.mjs init --project main
Lint (check-only)
Scan all configured or discovered dev-docs roots and validate the repo against the contract.
node .ai/scripts/ctl-project-governance.mjs lint --check --project main
Sync (dry-run or apply)
Generate missing task identity meta, upsert registry tasks, and regenerate derived views.
node .ai/scripts/ctl-project-governance.mjs sync --dry-run --project main
node .ai/scripts/ctl-project-governance.mjs sync --apply --project main
Optional: append sync-detected events to the hub changelog (append-only; apply-mode only):
node .ai/scripts/ctl-project-governance.mjs sync --apply --project main --changelog
Contract highlights (read the full contract)
- Task progress SoT: task bundle
00-overview.mdState: - Task identity SoT:
.ai-task.yamltask_id - Project semantic SoT:
.ai/project/<project>/registry.yaml - Migration: missing
.ai-task.yamlis a warning, but invalid/duplicate IDs are errors
Verification
- Lint (check-only):
node .ai/scripts/ctl-project-governance.mjs lint --check --project main
- Sync preview (no writes):
node .ai/scripts/ctl-project-governance.mjs sync --dry-run --project main --init-if-missing
- If you changed SSOT skills:
node .ai/scripts/lint-skills.mjs --strictnode .ai/scripts/sync-skills.mjs --scope current --providers both --mode reset --yes
Boundaries
- Do not edit
.codex/skills/or.claude/skills/directly (generated). - Do not require Python or third-party dependencies for governance scripts.
- Do not treat
.ai-task.yaml.statusas authoritative for task progress.