This document defines the default Linear label taxonomy for AI-assisted engineering workflows. The goal is to keep labels small, explicit, and operationally useful.
The system of record is Linear. This document defines only Linear label surfaces and the default issue shape inside Linear.
This is the primary surface.
Use team-level issue labels for the main working taxonomy:
repo:*kind:*area:*theme:*
status:* is not a default axis. Only use it as a narrow exception when a
built-in field is not sufficient.
Default to none.
Only create workspace-level issue labels when the same label is:
- truly cross-team
- long-lived
- semantically identical in every team that uses it
If a label exists only to help one team operate, it belongs at team scope.
Default to none.
Only use project labels for portfolio-level grouping across multiple projects, for example:
- a program
- a track
- a company-wide initiative
Do not use project labels for repo ownership, issue type, or technical area.
- Linear is authoritative for label semantics.
- Built-in Linear fields remain authoritative for workflow state.
- Labels exist to add missing semantics, not to duplicate built-in fields.
- Team-level issue labels are the main operating surface.
- The default issue model uses four axes:
repo:*,kind:*,area:*, andtheme:*. repo:*andkind:*are hard routing axes.area:*andtheme:*are soft semantic axes.
- One concept, one home.
- Implementation issues must have exactly one
repo:*label. - One issue must have exactly one
kind:*label. - Treat
repo:*andkind:*as hard routing axes. - Treat
area:*andtheme:*as soft semantic axes. Keep them sparse, stable, and reusable. - Do not use labels to restate built-in fields such as priority, assignee, project, cycle, or team.
- Every label should have a short description that explains its intended use.
- Prefer low-cardinality labels with durable meaning.
- Do not add a fifth default axis unless built-in fields and the four default axes are both insufficient.
- Delete or merge zero-use and duplicate labels during maintenance.
Repository ownership or implementation surface.
This axis is for issues that primarily belong to one repository.
Examples:
repo:pubfi-monorepo:maestrorepo:rsnap
If an issue is team-level governance, portfolio planning, or other meta work
that is not primarily owned by one repository, it may omit repo:*.
If an implementation issue spans multiple repositories, do not add multiple
repo:* labels. Pick one primary owning repository and split follow-on work
into linked issues when the execution would otherwise be ambiguous.
Do not expand repo:* into package, module, service, or temporary execution
surface labels. Those belong in area:* or the issue body.
What kind of work the issue is.
Recommended set:
kind:arch- architecture and system-shape changeskind:bug- defect or behavioral fixkind:chore- maintenance work that is not better expressed elsewherekind:epic- large umbrella or coordinating issuekind:feat- new capability or product behaviorkind:perf- performance or efficiency improvementkind:research- investigation, evaluation, or spikekind:spec- contract, schema, or design definition
Keep this set closed by default. Add a new kind:* only when repeated triage
shows a durable ambiguity that cannot be resolved with the existing set.
Only one kind:* label is allowed per issue.
If an issue could fit multiple kinds, choose the primary execution intent:
featif the main work is delivering a new capabilitybugif the main work is correcting broken behaviorarchif the main work changes system shape, boundaries, or ownershipspecif the main deliverable is a contract or design definitionperfif the main result is lower latency, lower cost, or higher throughputresearchif the main result is a decision memo, evaluation, or spikechoreonly when none of the above fits cleanlyepiconly for umbrella coordination issues
If secondary semantics still matter, express them in area:*, theme:*, or
the issue body instead of adding a second kind:*.
Where the work lands technically or organizationally.
This is a soft axis.
Keep area:* small and durable. Use it for stable domains, not temporary
components, one-off migrations, or incident-specific labels.
Examples:
area:apiarea:searcharea:refineryarea:orchestration
Why the work matters from a strategic or operational perspective.
This is a soft axis.
Keep theme:* sparse and long-lived. Use it for durable strategic reasons, not
short-term campaigns, quarter-specific pushes, or temporary operating language.
Examples:
theme:reliabilitytheme:governancetheme:costtheme:evaluationtheme:provenance
This is a rare exception axis, not part of the default issue shape.
Use only when built-in workflow states are insufficient.
Good examples are narrow operator states that do not belong in the main Linear status machine.
For implementation issues, the default issue shape should be:
- exactly one
repo:* - exactly one
kind:* - zero or more
area:* - zero or more
theme:*
For meta issues that are not owned by one repository, the default issue shape should be:
- no
repo:* - exactly one
kind:* - zero or more
area:* - zero or more
theme:*
For most teams, the default project shape should be:
- no project labels
For most workspaces, the default workspace shape should be:
- no workspace-level issue labels
- Use lowercase.
- Use a stable axis prefix followed by a colon.
- Keep names short and literal.
- Do not encode multiple concepts into one label.
Good:
kind:featrepo:maestrotheme:reliability
Bad:
backend-bugurgent-search-fixmaestro-and-runtime
- Every label should have a non-empty description.
- The description should be one short sentence.
- The description should state scope and intended use, not process history.
Good:
Issues that belong to the pubfi-mono repository.New capability or product behavior that is not primarily a refactor or cleanup.
Bad:
Imported from old systemTemporary label for migrationUsed sometimes for backend issues
- The same label split across workspace and team scope.
- Multiple
kind:*labels on one issue. - Forcing
repo:*onto non-repo meta work. - Growing
repo:*into package, module, or service labels. - Using project labels for issue taxonomy.
- Using labels to mirror built-in Linear fields.
- Using
area:*ortheme:*for short-lived initiatives or one-off tickets. - Creating one-off labels for a single incident or ticket.
- Keeping migration leftovers or labels that no longer drive any view or rule.
Before creating a new label, ask:
- Is this concept already covered by a built-in field?
- Is this concept already covered by an existing label?
- Will more than a handful of issues use this label over time?
- Is the label stable enough to survive refactors and org changes?
- Which surface should own this label: team-level issue labels, workspace-level issue labels, project labels, or nowhere?
- Does this belong inside
repo:*,kind:*,area:*,theme:*, the narrowstatus:*exception, or the issue body instead of creating a new default axis?
If questions 1 through 4 are not all yes, or questions 5 and 6 do not have one clear answer, do not add the label yet.
When auditing a team's labels:
- Remove scope duplication first.
- Delete or demote any workspace-level issue label that is not truly cross-team, long-lived, and semantically identical everywhere it appears.
- Remove zero-use labels next.
- Normalize every implementation issue to one
repo:*and onekind:*. - Normalize every meta issue to no
repo:*and exactly onekind:*. - Review
area:*andtheme:*only after the core axes are clean, and delete one-off soft-axis labels. - Re-justify every
status:*label as a live narrow exception, or delete it. - Confirm every label has a useful description.
- Keep project labels empty unless there is a real portfolio need.