Project Orchestrator
Purpose
Provide a single front door for project-level governance:
- •Prevent duplicate work
- •Keep semantic mapping clean (Feature/Requirement <-> Task)
- •Advance the project mainline (milestones, priorities)
- •Keep the project hub consistent with ongoing work
Project Orchestrator is project-management oriented. The workflow should not implement product code changes.
When to use
Use Project Orchestrator when the request involves any of the following:
- •Starting a new development request (feature, bug fix, refactor, integration)
- •Continuing work but needing to locate the right task or decide whether to create a new task
- •Mapping work to Milestones/Features/Requirements
- •Updating project status, milestones, priorities, scope, or archival decisions
- •Writing project-level updates (
registry.yaml,changelog.md) to maintain long-term continuity
When to avoid
Avoid using Project Orchestrator for purely local implementation within an already-scoped task when no scope/status/mapping changes are needed. In those cases, proceed with task-level execution workflows and run hub lint/sync later as needed.
Inputs
- •Natural-language request (new work or continuation)
- •Optional: constraints (scope, deadlines, dependencies)
- •Optional: pointers to existing task docs (
dev-docs/**/active/<task>/...)
Process (high-level)
- •Ensure the project hub exists.
- •If missing, instruct to run:
- •
node .ai/scripts/ctl-project-governance.mjs init --project <project>(default:main)
- •
- •If missing, instruct to run:
- •Load the current project state:
- •Prefer reading
.ai/project/<project>/registry.yaml - •Run lint for sanity if needed:
- •
node .ai/scripts/ctl-project-governance.mjs lint --check --project <project>
- •
- •Prefer reading
- •Search for related work:
- •Prefer using
ctl-project-governance queryfirst (LLM-friendly output):- •
node .ai/scripts/ctl-project-governance.mjs query --project <project> --text "<keywords>" - •
node .ai/scripts/ctl-project-governance.mjs query --project <project> --status in-progress
- •
- •If hub is missing,
queryfalls back to scanningdev-docs/** - •Cross-check existing task bundles under
dev-docs/**when needed
- •Prefer using
- •Decide: reuse an existing Task vs propose a new Task.
- •If a new Task is needed:
- •Propose a stable task slug (kebab-case)
- •Do not create the task bundle in Project Orchestrator
- •Instruct to create a task bundle via task-level workflows (module-first), then register it:
- •Module scope:
modules/<module_id>/dev-docs/active/<slug>/ - •Integration scope:
modules/integration/dev-docs/active/<slug>/ - •Then run:
node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project>
- •Module scope:
- •Update project hub semantics (when needed):
- •Update
registry.yamlto map Milestone/Feature/Requirement <-> Task (viamapor manual edit) - •Changelog: prefer
node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project> --changelogfor registration/status events; add manual entries only for non-status events
- •Update
- •Regenerate derived views (recommended after mapping changes):
- •
node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project>
- •
Outputs
Output MUST include a triage decision and actionable command sequence.
Output Fields
| Field | Description | Example |
|---|---|---|
| Decision | REUSE_TASK / NEW_TASK / PROJECT_UPDATE | NEW_TASK |
| Rationale | One sentence explanation | "No existing task covers OAuth2 integration" |
| Task ID | T-xxx or pending assignment | T-005 |
| Slug | kebab-case task slug | oauth2-provider-integration |
| Mapping | M-xxx > F-xxx > R-xxx > T-xxx | M-001 > F-002 > R-003 > T-005 |
| Next Actions | Numbered command/skill list | See below |
Next Actions by Decision Type
| Decision | Next Actions |
|---|---|
| NEW_TASK | 1. Create a dev-docs task bundle under module/integration dev-docs/active/<slug>/ 2. node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project> 3. node .ai/scripts/ctl-project-governance.mjs lint --check --project <project> |
| REUSE_TASK | 1. Read dev-docs/**/active/<slug>/00-overview.md 2. (if needed) Update State: + node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project> |
| PROJECT_UPDATE | 1. Edit .ai/project/<project>/registry.yaml (or use map) 2. node .ai/scripts/ctl-project-governance.mjs sync --apply --project <project> |
Verification
- •If you updated project hub files:
- •
node .ai/scripts/ctl-project-governance.mjs lint --check --project <project>
- •
- •If you changed SSOT skills:
- •
node .ai/scripts/lint-skills.mjs --strict - •
node .ai/scripts/sync-skills.mjs --scope current --providers both --mode reset --yes
- •
Boundaries
- •Do not implement product code changes in the workflow.
- •Do not create task bundles under
dev-docs/**(delegate to task-level workflows). - •Do not edit generated stubs under
.codex/or.claude/directly.
Contract
All behavior MUST follow .ai/project/CONTRACT.md.