Skip to content

Commit 934605e

Browse files
committed
Org-wide issue templates and core label taxonomy
0 parents  commit 934605e

7 files changed

Lines changed: 324 additions & 0 deletions

File tree

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
name: Bug report
2+
description: Something is broken, incorrect, or lost data.
3+
title: "<one-line summary of what is broken>"
4+
labels: ["type:bug", "status:needs-triage"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
A good bug report is **reproducible** and pins **exactly when it happened**.
10+
Fill every required field — an issue we cannot reproduce or place in a build cannot be fixed.
11+
12+
**Security vulnerability?** Do not file it here — use this repo's private
13+
security advisory (Security tab → Report a vulnerability).
14+
15+
- type: input
16+
id: version
17+
attributes:
18+
label: Version / build tested against
19+
description: A released tag, or `main @ <short-sha>` for a source build. Never "latest".
20+
placeholder: "v0.3.0 (or main @ 8e84501a)"
21+
validations:
22+
required: true
23+
24+
- type: textarea
25+
id: summary
26+
attributes:
27+
label: Summary
28+
description: One paragraph — what is wrong, and why it matters.
29+
validations:
30+
required: true
31+
32+
- type: textarea
33+
id: repro
34+
attributes:
35+
label: Steps to reproduce
36+
description: Exact, minimal, copy-pasteable steps from a clean state. Annotate what each step returned. The single most important field.
37+
validations:
38+
required: true
39+
40+
- type: textarea
41+
id: expected
42+
attributes:
43+
label: Expected behavior
44+
validations:
45+
required: true
46+
47+
- type: textarea
48+
id: actual
49+
attributes:
50+
label: Actual behavior
51+
validations:
52+
required: true
53+
54+
- type: markdown
55+
attributes:
56+
value: |
57+
---
58+
### Severity — answer the facts, then pick the level
59+
60+
Severity is a **technical** measure of impact — **not** priority (urgency), which the
61+
maintainers set at triage. Answer honestly; the answers determine the level.
62+
63+
- type: checkboxes
64+
id: severity-facts
65+
attributes:
66+
label: What actually happened? (check all that are true)
67+
options:
68+
- label: "Acknowledged/committed data was lost, corrupted, or silently wrong"
69+
- label: "The process crashed, hung, or failed to start"
70+
- label: "A security or isolation boundary was crossed"
71+
- label: "Core functionality is broken with no acceptable workaround"
72+
- label: "A workaround exists"
73+
74+
- type: dropdown
75+
id: severity
76+
attributes:
77+
label: Proposed severity
78+
description: >
79+
SEV-1: data loss / corruption / security / crash, no workaround.
80+
SEV-2: major functionality broken, no acceptable workaround.
81+
SEV-3: feature wrong but operational and a workaround exists.
82+
SEV-4: minimal / cosmetic. Maintainers confirm or adjust at triage.
83+
options:
84+
- "SEV-1 — Critical: data loss, corruption, security, or crash; no workaround"
85+
- "SEV-2 — High: major functionality broken; no acceptable workaround"
86+
- "SEV-3 — Medium: feature wrong, but operational and a workaround exists"
87+
- "SEV-4 — Low: minimal / cosmetic"
88+
validations:
89+
required: true
90+
91+
- type: dropdown
92+
id: reproducibility
93+
attributes:
94+
label: Reproducibility
95+
options:
96+
- "Always — every attempt"
97+
- "Intermittent — some attempts"
98+
- "Seen once — could not reproduce again"
99+
validations:
100+
required: true
101+
102+
- type: input
103+
id: regression
104+
attributes:
105+
label: Last known-good version / commit (if a regression)
106+
description: The tag or short SHA where it last worked. Leave blank if unknown or never worked.
107+
validations:
108+
required: false
109+
110+
- type: textarea
111+
id: environment
112+
attributes:
113+
label: Environment & logs
114+
description: OS + arch, notable flags/config, and any relevant log lines or stack traces.
115+
validations:
116+
required: false
117+
118+
- type: checkboxes
119+
id: checks
120+
attributes:
121+
label: Before submitting
122+
options:
123+
- label: I searched existing issues and this is not a duplicate.
124+
required: true
125+
- label: I reproduced this on a released tag or a current `main` build.
126+
required: true
127+
- label: This is not a security vulnerability (those go to a private advisory).
128+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Security vulnerability (private)
4+
url: https://github.com/NodeDB-Lab/nodedb/security/advisories/new
5+
about: Report security or data-isolation issues privately. Never in a public issue.
6+
- name: Question / discussion
7+
url: https://github.com/NodeDB-Lab/nodedb/discussions
8+
about: Usage questions, design discussion, and "is this a bug?" go here first.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: Documentation issue
2+
description: Something in the docs is wrong, missing, or misleading.
3+
title: "<one-line summary>"
4+
labels: ["type:docs", "status:needs-triage"]
5+
body:
6+
- type: input
7+
id: location
8+
attributes:
9+
label: Where
10+
description: URL or file path of the doc.
11+
validations:
12+
required: true
13+
- type: textarea
14+
id: problem
15+
attributes:
16+
label: What's wrong
17+
description: What is incorrect, missing, or confusing — and what it should say.
18+
validations:
19+
required: true
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Feature request
2+
description: Propose new capability or a change to existing behavior.
3+
title: "<one-line summary of the proposal>"
4+
labels: ["type:feature", "status:needs-triage"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Proposals are judged on the **problem**, not the solution. Lead with what you can't do today.
10+
- type: textarea
11+
id: problem
12+
attributes:
13+
label: Problem
14+
description: What are you trying to do that you can't (or can only do painfully) today? Concrete, from real usage.
15+
validations:
16+
required: true
17+
- type: textarea
18+
id: proposal
19+
attributes:
20+
label: Proposed solution
21+
description: What behavior or API would solve it. Sketch the surface if relevant.
22+
validations:
23+
required: true
24+
- type: textarea
25+
id: alternatives
26+
attributes:
27+
label: Alternatives & workarounds
28+
description: What you do today instead, and why it's insufficient. Prior art welcome.
29+
validations:
30+
required: false
31+
- type: checkboxes
32+
id: checks
33+
attributes:
34+
label: Before submitting
35+
options:
36+
- label: I searched existing issues and discussions for this proposal.
37+
required: true

.github/labels.yml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# NodeDB-Lab org-wide CORE label taxonomy.
2+
# Every repo syncs these four axes so issues filter identically across the org.
3+
# Repos add their own domain labels (e.g. nodedb's engine:* / area:*) on top.
4+
#
5+
# type:* what kind of issue it is
6+
# sev:* TECHNICAL impact — reporter proposes, triage confirms
7+
# priority:* urgency/scheduling — MAINTAINERS ONLY, set at triage
8+
# status:* lifecycle
9+
10+
# ── type ──
11+
- name: "type:bug"
12+
color: "d73a4a"
13+
description: "A defect — broken, incorrect, or lost data"
14+
- name: "type:feature"
15+
color: "a2eeef"
16+
description: "New capability or behavior change"
17+
- name: "type:docs"
18+
color: "0075ca"
19+
description: "Documentation is wrong, missing, or misleading"
20+
- name: "type:question"
21+
color: "d876e3"
22+
description: "Needs clarification; may not be a defect"
23+
- name: "type:epic"
24+
color: "5319e7"
25+
description: "Tracking issue spanning multiple sub-issues"
26+
- name: "type:chore"
27+
color: "cfd3d7"
28+
description: "Build, CI, refactor, or maintenance"
29+
30+
# ── severity (technical impact — reporter proposes, triage confirms) ──
31+
- name: "sev:1-critical"
32+
color: "b60205"
33+
description: "Data loss, corruption, security, or crash; no workaround"
34+
- name: "sev:2-high"
35+
color: "d93f0b"
36+
description: "Major functionality broken; no acceptable workaround"
37+
- name: "sev:3-medium"
38+
color: "fbca04"
39+
description: "Feature wrong, but operational and a workaround exists"
40+
- name: "sev:4-low"
41+
color: "0e8a16"
42+
description: "Minimal impact / cosmetic"
43+
44+
# ── priority (MAINTAINERS ONLY — urgency, set at triage) ──
45+
- name: "priority:P0"
46+
color: "5319e7"
47+
description: "Drop everything — fix now"
48+
- name: "priority:P1"
49+
color: "5319e7"
50+
description: "Fix in the current milestone"
51+
- name: "priority:P2"
52+
color: "5319e7"
53+
description: "Scheduled, not urgent"
54+
- name: "priority:P3"
55+
color: "5319e7"
56+
description: "Backlog / someday"
57+
58+
# ── status (lifecycle) ──
59+
- name: "status:needs-triage"
60+
color: "ededed"
61+
description: "Awaiting maintainer triage (severity + priority)"
62+
- name: "status:needs-repro"
63+
color: "e99695"
64+
description: "Cannot reproduce yet — more info needed"
65+
- name: "status:confirmed"
66+
color: "0e8a16"
67+
description: "Reproduced by a maintainer"
68+
- name: "status:in-progress"
69+
color: "3becf4"
70+
description: "Actively being worked on"
71+
- name: "status:blocked"
72+
color: "000000"
73+
description: "Waiting on another issue or decision"
74+
- name: "status:wontfix"
75+
color: "ffffff"
76+
description: "Working as intended or out of scope"
77+
78+
# ── cross-cutting flags ──
79+
- name: "regression"
80+
color: "b60205"
81+
description: "Worked on an earlier build; broke since"
82+
- name: "good first issue"
83+
color: "7057ff"
84+
description: "Good for newcomers"
85+
- name: "help wanted"
86+
color: "008672"
87+
description: "Extra attention is needed"

.github/workflows/labels.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: Sync labels
2+
3+
# Keeps this repo's labels identical to .github/labels.yml (the org core set).
4+
on:
5+
push:
6+
branches: [main]
7+
paths: [".github/labels.yml"]
8+
workflow_dispatch:
9+
10+
permissions:
11+
issues: write
12+
13+
jobs:
14+
sync:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
- uses: crazy-max/ghaction-github-labeler@v5
19+
with:
20+
yaml-file: .github/labels.yml
21+
skip-delete: true
22+
dry-run: false

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# .github — NodeDB-Lab org defaults
2+
3+
Organization-wide community-health defaults. GitHub applies the files here to
4+
**every public repo in `NodeDB-Lab` that does not define its own**.
5+
6+
## What's here
7+
8+
- **`.github/ISSUE_TEMPLATE/`** — default issue forms (bug, feature, docs) + chooser
9+
config. A repo with its own `.github/ISSUE_TEMPLATE/` overrides these — the
10+
flagship [`nodedb`](https://github.com/NodeDB-Lab/nodedb) ships a richer,
11+
engine-aware bug form.
12+
- **`.github/labels.yml`** — the org **core** label taxonomy (`type:` / `sev:` /
13+
`priority:` / `status:` + flags). Labels do **not** auto-propagate on GitHub, so
14+
each repo syncs this via its own `labels` workflow. Repos add domain labels
15+
(e.g. `engine:*`, `area:*`) on top.
16+
- **`.github/workflows/labels.yml`** — the sync workflow.
17+
18+
## Standard
19+
20+
The reporting and severity standard these files enforce — SEV-1…4, severity vs
21+
priority, the triage protocol — is defined once in the team data room
22+
(`office/team/issue-standard.md`). This repo is the machine-enforced copy; if the
23+
two ever drift, the standard wins.

0 commit comments

Comments
 (0)