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.
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 bugviagh issue createand gotcould 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: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 weekseverity: high— affects shipping users, fix in current release cycleseverity: medium— needs attention, scheduleseverity: low— nice to haveStatus:
blocked— waiting on something external (decision, upstream fix, etc.)needs-decision— needs a call from Rowan before any work happenswontfix— declined, kept for contextPer-repo area labels as needed (e.g. MailTriage might want
area: imap,area: smtp,area: ui).How dotfiles helps
scripts/setup-github-labels.sh(or similar) that applies the standard labels to a given repo viagh label create. Idempotent — running twice doesn't error on existing labels (usegh label create --forceor check-then-create).dotfiles/README.md(or somewhere) for "new repo setup": apply labels, configure issue types, set default reviewers, etc..github/ISSUE_TEMPLATE/*.ymltemplate set that can be copied into new repos to standardise issue forms.Out of scope
Triggering example
The MailTriage cache-invalidation bug (#161) was filed today as urgent affecting shipping users. With the system above it would have been:
Bugseverity: high,area: ui(orarea: replies)[v2.1.x bug]prefix neededCurrently it's typeless and unlabelled, just with the prefix-in-title workaround.