Labels reference
The HAI-Co² label taxonomy is the connective tissue between Issues, PRs, the Project board, and the AI-automation workflows. This page is the canonical reference for what each label means and when to apply it. The labels themselves live in.github/labels.yml (the source of truth) and are created on the GitHub side by .github/scripts/init-labels.sh (idempotent, safe to re-run).
1. Triage rules (every label has a job)
- Every Issue gets exactly one
type:label during triage. - Every Issue gets exactly one
area:label during triage.- On PRs, the labeler workflow auto-applies
area:*based on changed paths, so you usually do not need to set it by hand on PRs.
- On PRs, the labeler workflow auto-applies
needs-triageis removed once triage is done. Its presence on an open issue means “no maintainer has looked at this yet”.good first issueis reserved for issues a newcomer can finish in under 2 hours without reading internal docs.path:ai-automationis added explicitly by a maintainer, or automatically when Coco (HAI-Coco) is assigned to the issue. Default is traditional (the absence of anypath:*label means traditional).priority:*andeffort:*are advisory, not contractual. Adjust them as your understanding of the work changes.
2. The full taxonomy
type:*: what kind of work this is
Pick exactly one. Drives the Release Drafter categories.
area:*: where in the codebase
Pick exactly one. The labeler workflow auto-applies these on PRs by matching changed paths to the labeler config.
For cross-cutting changes (rare), apply the area you’d want a reviewer to
care about first; mention the others in the PR body.
priority:*: how urgent
Apply during triage. Revisit if the situation changes.
status:*: workflow state
The Project board’s Status field is the primary place to read state. These labels exist for cases where a label is more ergonomic (search, filter dropdowns, mobile triage).
path:*: which development pathway
The single most consequential triage label. See ADR-0002.
Apply exactly one engine label per issue (the bare
path:ai-automation counts as the Copilot one); the chosen engine runs the whole PR through. See ai-pathway.md §2.4.
ai:*: AI review marker
The AI pathway is driven mostly by slash commands (/approve-plan, /coco, /promote dev), not labels, so there is just one ai:* label.
The pathway and its workflows are documented in
docs/ai-pathway.md.
stage:*: AI-pathway lifecycle (managed automatically)
Every AI-pathway issue and its PR carry exactly one stage:* label, advanced automatically by coco-stage-labels.yml as the assignee drives the flow, so the Issues and Pull-requests lists show where each item is at a glance. Never set these by hand. Warm colors (yellow/orange/green) mean it is your turn to act. See the state diagram in ai-pathway.md.
Community labels
effort:*: rough sizing
Advisory; the reviewer’s mental budget when they decide what to pick up this week.
3. Adding or changing labels
The taxonomy is intentionally small. Before adding a label, ask:- Is this a new category, or could an existing label carry the signal?
- Will this label be applied to ≥ 5 issues a year? If no, don’t add it: labels you never use are visual noise.
- Does it conflict with the “exactly one type, exactly one area” rule? If yes, you are probably trying to model something else (e.g. the Project board’s Status field).
- Open a PR adding it to
.github/labels.yml. - Update this reference in the same PR.
- After merge, run
.github/scripts/init-labels.sh(or wait for a maintainer to run it). The script is idempotent; existing labels’ colors/descriptions get updated to match the file.
4. Sources and related docs
docs/community-guide.md: how triage and the lifecycle look from a contributor’s seat.docs/maintainers-handbook.md: the maintainer’s triage routine and label discipline.docs/repository-foundation.md§6.7: the rationale and history behind the taxonomy..github/labels.yml: source of truth..github/labeler.yml:area:*auto-application rules.