Skip to content

Set up consistent GitHub issue types + labels across HokuNZ repos #9

@rowan

Description

@rowan

What

Standardise the issue-classification setup across the HokuNZ repos so issues can be filed with a consistent type (Bug / Feature / Task / etc.) and a small set of agreed labels (severity, area, status). Hold the canonical config in dotfiles so it's reproducible across repos.

Trigger

Hit this today on HokuNZ/MailTriage while filing #161: tried to apply --label bug via gh issue create and got could not add label: 'bug' not found. The repo has no defined labels at all. Worked around it with a [v2.1.x bug] prefix in the title and a "Severity: High" callout in the body, but that's a workaround, not a system.

The deeper miss: GitHub introduced issue types (a typed classification separate from labels) in 2024. Bug / Feature / Task / etc. as first-class enum values rather than free-form strings. None of the repos currently have these configured — every issue is "untyped."

What's worth doing

Issue types (GitHub-org level)

Configure at the HokuNZ org level (Settings → Issue types) so all repos under HokuNZ inherit the same typing. Initial set:

  • Bug — something broken
  • Feature — new capability
  • Task — work that isn't bug-or-feature (refactor, docs, infrastructure)
  • Question — discussion / decision-needed (closes once decided)

Labels (per-repo, but consistent)

Labels handle orthogonal axes that types don't — severity, status, area, version. Suggested baseline labels for every repo:

Severity (for Bug-typed issues):

  • severity: critical — production-affecting, ship a fix this week
  • severity: high — affects shipping users, fix in current release cycle
  • severity: medium — needs attention, schedule
  • severity: low — nice to have

Status:

  • blocked — waiting on something external (decision, upstream fix, etc.)
  • needs-decision — needs a call from Rowan before any work happens
  • wontfix — declined, kept for context

Per-repo area labels as needed (e.g. MailTriage might want area: imap, area: smtp, area: ui).

How dotfiles helps

  • A scripts/setup-github-labels.sh (or similar) that applies the standard labels to a given repo via gh label create. Idempotent — running twice doesn't error on existing labels (use gh label create --force or check-then-create).
  • A documented checklist in dotfiles/README.md (or somewhere) for "new repo setup": apply labels, configure issue types, set default reviewers, etc.
  • Optionally: a .github/ISSUE_TEMPLATE/*.yml template set that can be copied into new repos to standardise issue forms.

Out of scope

  • Migrating existing untyped issues to the new typing system. One-off cleanup; can happen as repos get touched naturally.
  • Branch protection / merge rules. Different concern, separate issue if needed.

Triggering example

The MailTriage cache-invalidation bug (#161) was filed today as urgent affecting shipping users. With the system above it would have been:

  • Type: Bug
  • Labels: severity: high, area: ui (or area: replies)
  • Title: just the descriptive part, no [v2.1.x bug] prefix needed

Currently it's typeless and unlabelled, just with the prefix-in-title workaround.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions