Skip to content

Add a proper label taxonomy — needs triage, priority, status, upstream, and area labels #774

@HaleTom

Description

@HaleTom

Summary

This repo currently has only the 9 default GitHub labels (bug, documentation, duplicate, enhancement, good first issue, help wanted, invalid, question, wontfix). For a project with 250+ open issues and community contributors, this is insufficient for triage, prioritization, or tracking upstream contributions.

This issue proposes a label taxonomy based on patterns from Node.js, Rust, Go, Bun, Deno, Next.js, and React — adapted for MiMo-Code's specific needs as a fork of opencode.

Proposed labels

Keep existing (9 labels)

Label Color Description
bug d73a4a Something isn't working
documentation 0075ca Improvements or additions to documentation
duplicate cfd3d7 This issue or pull request already exists
enhancement a2eeef New feature or request
good first issue 7057ff Good for newcomers
help wanted 008672 Extra attention is needed
invalid e4e669 This doesn't seem right
question d876e3 Further information is requested
wontfix ffffff This will not be worked on

Add: Type (4 labels)

Label Color Description
confirmed bug b60205 Reproduced and confirmed
regression e11d48 Used to work, now broken
crash b60205 Runtime crash / segfault / panic
performance e99695 Performance issue

Add: Status (5 labels)

Label Color Description
needs triage CC767F Needs initial review and labeling
needs investigation fef2e2 Confirmed, needs root cause analysis
needs repro fef9c3 Needs a minimal reproduction
blocked b3312d Blocked on another issue, PR, or upstream
stale ededed No activity for 30+ days

Add: Resolution (2 labels)

Label Color Description
working as designed 0e8a16 Not a bug — behavior is correct
backlog fbca04 Acknowledged, low priority

Add: Priority (4 labels)

Label Color Description
P0: critical b60205 Security, data loss, or crash affecting many users
P1: high e11d48 Major functionality broken, no workaround
P2: medium fbca04 Bug with workaround, or significant feature request
P3: low c5def5 Nice-to-have, minor polish, edge case

Priority defaults to P2: medium if no priority label is set. Only maintainers should set P0/P1.

Add: Upstream / Fork coordination (2 labels)

Label Color Description
upstream: cherry-pick candidate 1d76db Fix exists here; should be contributed to opencode
upstream: needs assessment 0d447d May exist in opencode; needs assessment before cherry-pick

Why two upstream labels instead of one: Early in a fork's life, nearly everything is a cherry-pick candidate because the codebases haven't diverged much. As they diverge, assessing whether a fix applies upstream becomes more effort. The upstream: needs assessment label marks "we should check if this is relevant to opencode" without committing to cherry-picking it. The upstream: cherry-pick candidate label marks "we've confirmed this fix should go upstream."

This pattern is modeled on React's meta-exported label (marking issues synced from Meta's internal fork) and Go's CherryPickCandidate/CherryPickApproved system. As MiMo-Code diverges further from opencode, the upstream: needs assessment label will see more use and upstream: cherry-pick candidate will become rarer.

Add: Area (initial set — extend as needed)

Label Color Description
area:tui c5def5 Terminal UI
area:server c5def5 Server / backend / API
area:models c5def5 Model providers, routing, configuration
area:install c5def5 Package manager (bun install equivalent)
area:config c5def5 Configuration, settings, AGENTS.md
area:platform bfd4f2 OS-specific or platform-specific issues

Tier 2: Roadmap and release communication (4 labels)

These follow best practice from projects like Rust (tracking issues, release-notes), Node.js (version labels, semver labels), and Go (release-blocker). They communicate roadmap intent and ensure release documentation coverage:

Label Color Description
release-notes bfdadc Should be mentioned in release notes
tracking d4c5f9 Tracking issue or meta-issue for a feature
v0.1.x bfd4f2 Affects v0.1.x release line
v0.2.x bfd4f2 Affects v0.2.x release line

Issue workflow

Issues follow a state machine from triage to resolution. Labels are the state markers:

stateDiagram-v2
    [*] --> New: Issue opened
    New --> Triaged: needs triage (auto-applied)
    Triaged --> Needs_Repro: bug + needs repro
    Triaged --> Confirmed_Bug: confirmed bug
    Triaged --> Enhancement: enhancement
    Triaged --> Question: question
    Triaged --> Duplicate: duplicate
    Triaged --> Invalid: invalid
    Triaged --> Wontfix: wontfix
    Triaged --> Working_as_Design: working as designed
    Triaged --> Backlog: backlog
    Needs_Repro --> Confirmed_Bug: repro provided
    Needs_Repro --> Stale: no response 30d
    Confirmed_Bug --> Needs_Investigation: needs investigation
    Needs_Investigation --> PR_Open: fix in progress
    PR_Open --> Closed: fix merged
    Enhancement --> Backlog: acknowledged, low priority
    Enhancement --> PR_Open: accepted, work starts
    Stale --> Closed: auto-close after 60d
    Backlog --> PR_Open: prioritized
Loading

Priority is orthogonal to state — a P0: critical confirmed bug still goes through needs investigationPR openclosed, but it gets faster attention at each transition.

Users should not self-assign priority labels. CI should auto-apply needs triage to every new issue. See #585 for automation recommendations (Dosu for initial triage, CodeRabbit for PR review).

Who sets labels

Label type Who sets it How
needs triage CI (auto) Applied to every new issue automatically
Type (bug, enhancement, question) Submitter (via template) + maintainer review Issue templates pre-set type; maintainers refine
Priority (P0P3) Maintainers only Never set by submitters
Status (needs repro, confirmed bug, etc.) Maintainers + CI CI can auto-confirm bugs with repro steps
Resolution (duplicate, wontfix, etc.) Maintainers only
Area (area:*) CI suggestion + maintainer confirmation Dosu or similar tool suggests area labels; maintainer confirms
Upstream (upstream:*) Maintainers only Requires assessment of upstream applicability

Total label count

Category Count
Existing (kept) 9
Type (new) 4
Status (new) 5
Resolution (new) 2
Priority (new) 4
Upstream (new) 2
Area (new) 6
Tier 2: Roadmap (new) 4
Total 36

For comparison: Bun has 144 labels, Rust has 861, React has 76, Node.js has 202, Deno has 122. At 36 labels, this is deliberately lean — enough structure for triage, not enough to be overwhelming.

Implementation

This can be done with a single script using the GitHub API. Labels are purely additive — no existing labels are renamed or deleted.

See #585 for the companion automation (auto-labeling, triage bot, PR review) needed to prevent maintainer burnout with this label system.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions