Proposal: replace our 111 labels with ~20 plain tags #11170
Replies: 8 comments 5 replies
|
I like it Renaming A-release should be fine as long as we carefully coordinate it. |
|
I agree with this proposal. There's a couple of extra things we should take into account if we want to assign priorities to issues on our backlog:
For the "type" label, github already has some type fields and you can add extra ones The "Flow" section, might overlap with the Engineering board and how we use various different columns but I will let @natalieesk comment on this one |
|
|
It is important that we use labels properly. When creating issues, the prompts we're using (which we should all use) can mostly identify the correct labels which reduces friction. I will update our existing prompts with the new labels once we've made this decision. |
|
We also need a 'needs-issue' label. This is being used for automating issue creation from an existing PR. |
|
For Area - do people find these useful? "devops" is definitely required, but what do the other labels add to the issue? Do they help people decide what to pick up? Are they for us or external people? Are they useful for filtering? Let's think about what the labels are there to achieve - what is the value they are adding or problem they are solving. |
|
I think we should also maintain the same labels across all repos. So, 'security', 'external' etc. |
|
We have some issues which can probably just be completed by AI because they're very simple. We'll still review them of course. Should we add a label for that too? |


Uh oh!
There was an error while loading. Please reload this page.
TL;DR
Our label system has decayed: 111 labels, of which 20 have never been used, 21 are dormant, and at least 6 are duplicates of each other. More importantly, we don't apply them: 30% of open issues and ~60% of recently merged PRs carry no labels at all, priority labels cover 11% of the backlog (with
P-Criticalon zero open items), andS-needs-triageis a 49-deep queue whose oldest member is from 2022.I propose we delete ~86 labels and replace the prefix families (
A-,C-,P-,S-,I-,NU-) with a small set of plain-English tags, bitcoin-core-style. The full audit data and migration plan are below.Why bother
C-documentationvsA-docs,C-enhancementvsC-featurevsC-suggestion).P-Low/P-OptionalwhileP-Criticalsits unused — the opposite of what a priority signal should look like.C-benchmarklooks like a category but triggers a workflow;S-ci-fail-*look like statuses but are bot dedup keys. Touching the wrong label can start or cancel a multi-hour GCP run.The proposed set — 20 human labels
bug·enhancement·docs·securityconsensus·network·state·rpc·devops·testsurgenttriage·blocked·trackingblockedrequires a comment saying blocked-on-whatgood first issue·help wanteddo-not-merge·run-stateful-tests·release·skip-changelogPlus a few near-machine labels humans rarely touch:
dependencies,benchmark,extra-reviews,external-contribution, and a rollingnu-7(one label per active network upgrade, deleted ~2 releases after activation). Fiveci-fail-*labels remain as bot-only dedup keys on auto-filed CI issues.Notable deletions: the entire
I-impact family (18 labels — severity moves into issue text;securitycovers the sharp end), the 5-levelP-family (collapses tourgent), all historic NU labels (Genesis through NU-6.1), and every duplicate/stray.Severity-out-of-labels is the biggest philosophical change — it's how bitcoin core operates, and our data says the
I-family was applied to ~10% of issues anyway, so filtering on it was never reliable.What the automation audit found (the careful part)
I audited every label reference in our automation before proposing this. The exact-name dependencies:
A-releaseis wired into five systems (pr-gate, tests-unit'scheck-no-git-dependencies, release.yml's validation,.release-plz.tomlwhich auto-applies it, checkpoint-update) — and failures are silent (if:conditions just go false). Renaming it toreleaserequires one atomic PR touching all of them, tested on a fork first. If the release owners prefer zero risk here, keepingA-releaseas the single legacy name is a fine fallback — please weigh in.^P-Critical,^P-(Optional|Low)). Plan:urgentreplaces the critical rule, and the low-priority rule switches toauthor~=dependabot— which is what frees us to delete the wholeP-family.ci-fail-*dedup keys all get updated in the same PR. Branch-protection rulesets key on check names, not labels — no risk there.labeledevents, and the GCP workflow lacks the fix(ci): stop Mergify label events from cancelling required PR Gate runs #11164 concurrency protection — we'll run any backlog migration when no stateful runs are in flight.Migration plan
A-releaserename.C-bug→bug,A-consensus→consensus, ...) — GitHub renames preserve attachments, so existing issues inherit the new names. Every survivor gets a one-line description. The issue templates and the Mergify/dependabot priority rules must be updated in the same window (templates silently skip nonexistent labels; theP-deletion needs Mergify keying onauthor~=dependabotfirst) — that's a small, low-risk PR.A-release→release,C-benchmark→benchmark,S-ci-fail-*→ci-fail-*) — one atomic PR, fork-tested. Skippable entirely: keeping the legacy names costs us a handful of prefixed stragglers and nothing else.Questions for the team
A-release→release(atomic PR, fork-tested), or keep the legacy name?I-severity family — any filter/report you actually run on it?mempoolout ofstate)?If there are no blocking objections in a week, we can start with step 2, which is trivially reversible.
All reactions