Skip to content

Commit dede6d5

Browse files
committed
chore: update GFIC guidelines
Signed-off-by: exploreriii <[email protected]>
1 parent e6c5f04 commit dede6d5

File tree

1 file changed

+77
-146
lines changed

1 file changed

+77
-146
lines changed
Lines changed: 77 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,199 +1,130 @@
11
# Good First Issue — Candidate Guidelines
22

3-
This document explains the purpose of the **`good first issue: candidate`** label, when to use it, and when an issue should be promoted to a full **Good First Issue**.
3+
This document defines the purpose and usage of the **`good first issue: candidate`** label, and explains when and how an issue may be promoted to a full **Good First Issue (GFI)**.
4+
5+
The candidate label exists to protect the quality and trustworthiness of **Good First Issues** by ensuring issues are **fully specified, low-risk, and mechanically solvable** before being promoted.
6+
7+
---
48

59
## Table of Contents
610

7-
- [Why We Use a "Candidate" Label](#-why-we-use-a-candidate-label)
8-
- [When to Use the Candidate Label](#️-when-to-use-good-first-issue-candidate)
9-
- [What a Candidate Is NOT](#-what-a-candidate-is-not)
10-
- [Promoting a Candidate to GFI](#-promoting-a-candidate-to-gfi)
11-
- [Workflow Summary](#-workflow-summary)
12-
- [Important Considerations](#important-considerations)
11+
- [Why We Use a Candidate Label](#why-we-use-a-candidate-label)
12+
- [When to Use `good first issue: candidate`](#when-to-use-good-first-issue-candidate)
13+
- [What a Candidate Is NOT](#what-a-candidate-is-not)
14+
- [Promoting a Candidate to GFI](#promoting-a-candidate-to-gfi)
1315

1416
---
1517

16-
## 🎯 Why We Use a "Candidate" Label
18+
## Why We Use a Candidate Label
1719

1820
Labeling an issue as a **Good First Issue (GFI)** signals to new contributors that the issue is:
1921

20-
-**Well-scoped** — clear boundaries and deliverables
21-
-**Low risk** — minimal chance of breaking changes
22-
-**Clearly defined** — unambiguous requirements
23-
-**Ready to be picked up** — with minimal guidance needed
22+
- ✅ Small and well-scoped
23+
- ✅ Low risk
24+
- ✅ Fully specified
25+
- ✅ Safe for first-time contributors
26+
- ✅ Ready to be picked up without interpretation or initiative
27+
28+
However, **many issues are not ready for that label immediately**.
29+
30+
They might have:
31+
- ❗ Incomplete documentation
32+
- ❗ Uncertainty if they are in fact a good first issue
2433

25-
However, **not all issues start in that state**.
2634

2735
The **`good first issue: candidate`** label exists to:
2836

2937
| Purpose | Description |
30-
|---------|-------------|
31-
| 🚫 **Avoid premature labeling** | Prevent issues from being labeled as GFIs before they're ready |
32-
| 🔍 **Allow refinement time** | Give maintainers space to clarify scope and requirements |
33-
| 📊 **Set accurate expectations** | Ensure new contributors know exactly what to do |
34-
| 📋 **Create a clear pipeline** | Establish a workflow for curating high-quality GFIs |
38+
|--------|-------------|
39+
| 🚫 Avoid premature labeling | Prevent partially defined or misclassified issues from being advertised as GFIs |
40+
| 🧭 Enforce quality standards | Ensure GFIs meet strict “no interpretation required” criteria |
41+
| 🛠 Allow refinement time | Give maintainers space to fully specify scope and solution |
42+
| 📋 Create a clear pipeline | Establish a safe promotion path to GFI |
3543

36-
This approach helps us prioritize **quality over quantity** when advertising beginner-friendly work.
44+
The candidate label is **not a softer GFI** — it is a **holding state**.
3745

3846
---
3947

40-
## 🏷️ When to Use `good first issue: candidate`
48+
## When to Use `good first issue: candidate`
4149

42-
Apply the **candidate** label when an issue:
50+
Apply the **candidate** label when you believe the issue is a good first issue, not documented enough, or have some doubt with its difficulty:
4351

44-
### Fits the General Criteria
52+
### Appears Potentially Suitable as a GFI
4553

46-
- *Might* be suitable as a GFI based on initial assessment
47-
- Fits within the [allowed categories](./good_first_issues_guidelines.md#allowed-categories) of GFI work
48-
- Appears to be small in scope and low risk
54+
- The change is *likely* small, localized, and low risk
55+
- The issue fits within the **allowed GFI categories** (docs, examples, typing, small mechanical edits)
56+
- The issue is *not* exploratory and does *not* require design decisions
4957

50-
### ⏳ Still Needs Work
58+
Suitability can be assessed [here](https://github.com/hiero-ledger/hiero-sdk-python/blob/main/docs/maintainers/good_first_issues_guidelines.md)
5159

52-
- **Needs clarification** — requirements are ambiguous or incomplete
53-
- **Needs refinement** — scope could be narrowed or better defined
54-
- **Needs confirmation** — maintainer review required to verify suitability
55-
- **Needs acceptance criteria** — clear success conditions not yet defined
60+
### ✅ Requires Some Refinement
5661

57-
### 📝 Example Scenarios
62+
One or more of the following is still missing:
5863

59-
| Scenario | Why Use Candidate? |
60-
|----------|-------------------|
61-
| User reports a documentation gap | Needs scoping to determine exact changes required |
62-
| Bug in example code identified | Need to confirm it's isolated and straightforward to fix |
63-
| Type annotation improvement suggested | Need to verify it doesn't affect runtime behavior |
64-
| Test assertion missing | Need to confirm it extends existing tests only |
64+
- ❗ Explicit step-by-step instructions
65+
- ❗ Clearly defined acceptance criteria
6566

66-
---
67-
68-
## 🚦 What a Candidate Is NOT
67+
### ✅ Difficulty is Uncertain
6968

70-
The **candidate** label should **NOT** be used for:
69+
Use the `good first issue: candidate` label when you believe it is a Good First Issue but are not sure
7170

72-
### ❌ Large or Cross-Cutting Changes
71+
- ✅ Requires maintainer approval
7372

74-
Issues that span multiple modules, packages, or require architectural understanding.
73+
Check by reading good first issue guidelines [here](https://github.com/hiero-ledger/hiero-sdk-python/blob/main/docs/maintainers/good_first_issues_guidelines.md)
7574

76-
### ❌ Core Protocol or SDK Logic
75+
If easy issues are not 'Good First Issues' are in fact 'beginner' issues.
7776

78-
Changes to:
79-
- `to_proto` / `from_proto` methods
80-
- Serialization/deserialization logic
81-
- Network or wire-level behavior
77+
## What a Candidate Is NOT
8278

83-
### ❌ Exploratory or Investigative Work
79+
The **candidate** label must **NOT** be used for issues that clearly do not qualify as GFIs.
8480

85-
Issues where the solution path is unclear or requires research.
81+
### ❌ Not for Issues Requiring Decisions
8682

87-
### ❌ Blocked Issues
83+
If a contributor must decide:
84+
- *what* to change
85+
- *how* something should behave
86+
- *what* is correct or expected
8887

89-
Issues that depend on external decisions, other PRs, or upstream changes.
88+
→ the issue is **not** a candidate.
9089

91-
---
90+
### ❌ Not for Core or Behavioral Changes
9291

93-
> ⚠️ **Important:** If an issue clearly does *not* meet GFI criteria, it should **not** be labeled as a candidate either. The candidate label is for issues that *might* qualify, not for issues that definitely won't.
94-
95-
---
92+
Do **not** use the candidate label for changes involving:
9693

97-
## ✨ Promoting a Candidate to GFI
94+
- SDK or protocol behavior
95+
- Public APIs or contracts
96+
- `to_proto` / `from_proto` logic
97+
- Serialization, deserialization, or networking
9898

99-
A candidate should be promoted to a full **Good First Issue** when:
99+
### ❌ Not for Exploratory or Blocked Work
100100

101-
### Readiness Checklist
101+
- Investigations or debugging tasks
102+
- Issues dependent on other PRs or decisions
103+
- Work requiring domain or protocol knowledge
102104

103-
- [ ] **Clear description** — the problem and solution are well-defined
104-
- [ ] **Scoped appropriately** — changes are localized and low-risk
105-
- [ ] **Acceptance criteria defined** — clear conditions for success
106-
- [ ] **Documentation linked** — relevant guides are referenced
107-
- [ ] **No blockers** — no dependencies on other work
108-
- [ ] **Maintainer approved** — a maintainer has reviewed and confirmed suitability
109-
110-
### Promotion Process
111-
112-
1. **Review the candidate issue** against [GFI guidelines](./good_first_issues_guidelines.md)
113-
2. **Add missing details** — clarify requirements, add acceptance criteria
114-
3. **Remove `good first issue: candidate`** label
115-
4. **Add `Good First Issue`** label
116-
5. **Optionally notify** in comments that the issue is ready for contributors
117-
118-
---
119-
120-
## 📊 Workflow Summary
121-
122-
```
123-
┌─────────────────────────────────────────────────────────────┐
124-
│ Issue Created │
125-
└─────────────────────────────────────────────────────────────┘
126-
127-
128-
┌─────────────────────────────────────────────────────────────┐
129-
│ Initial Assessment by Maintainer │
130-
│ │
131-
│ Is this potentially a Good First Issue? │
132-
│ │
133-
│ • Small scope? │
134-
│ • Low risk? │
135-
│ • Fits allowed categories? │
136-
└─────────────────────────────────────────────────────────────┘
137-
138-
┌───────────────┼───────────────┐
139-
│ │ │
140-
▼ ▼ ▼
141-
┌────────┐ ┌──────────┐ ┌──────────┐
142-
│ No │ │ Maybe │ │ Yes │
143-
└────────┘ └──────────┘ └──────────┘
144-
│ │ │
145-
▼ ▼ ▼
146-
┌─────────────────┐ ┌───────────────┐ ┌───────────────┐
147-
│ Label normally │ │ Label as │ │ Label as │
148-
│ (not GFI) │ │ `candidate` │ │ Good First │
149-
│ │ │ │ │ Issue │
150-
└─────────────────┘ └───────────────┘ └───────────────┘
151-
152-
153-
┌─────────────────┐
154-
│ Refine & Review │
155-
│ │
156-
│ • Add details │
157-
│ • Define scope │
158-
│ • Set criteria │
159-
└─────────────────┘
160-
161-
162-
┌─────────────────┐
163-
│ Promote to GFI │
164-
│ when ready │
165-
└─────────────────┘
166-
```
105+
> ⚠️ If an issue clearly does *not* meet GFI criteria, **do not label it as a candidate**.
106+
> The candidate label is for issues that *might* qualify after refinement — not for issues that never will.
167107
168108
---
169109

170-
## Important Considerations
110+
## Promoting a Candidate to GFI
171111

172-
### Why This Matters
112+
A candidate may be promoted to a full **Good First Issue** only when **all** of the following are true.
173113

174-
1. **Good First Issues are automatically promoted** by GitHub and Hiero, making them highly visible to potential contributors worldwide
114+
### ✅ Readiness Checklist
175115

176-
2. **New contributors trust the GFI label** — they expect issues to be ready and achievable
116+
- [ ] The problem is clearly described
117+
- [ ] The solution is **explicitly specified**
118+
- [ ] The change is small, localized, and low risk
119+
- [ ] The issue touches a single file or clearly defined location
120+
- [ ] Acceptance criteria are defined and objective
121+
- [ ] No interpretation or initiative is required
177122

178-
3. **Poorly scoped GFIs waste contributor time** — and can discourage future contributions
123+
### 🔁 Promotion Process
179124

180-
4. **Quality GFIs build community** — successful first contributions lead to long-term contributors
181-
182-
### Best Practices
183-
184-
| Do | Don't |
185-
|----|-------|
186-
| ✅ Use candidate for uncertain issues | ❌ Rush issues to GFI status |
187-
| ✅ Take time to refine candidates | ❌ Label obviously unsuitable issues as candidates |
188-
| ✅ Add clear acceptance criteria before promotion | ❌ Promote candidates without review |
189-
| ✅ Link to relevant documentation | ❌ Assume contributors know the codebase |
190-
191-
---
125+
1. Review the issue against the **Good First Issue Guidelines** [here](https://github.com/hiero-ledger/hiero-sdk-python/blob/main/docs/maintainers/good_first_issues_guidelines.md)
126+
2. Add missing details, steps, and acceptance criteria
127+
3. Remove the `good first issue: candidate` label
128+
4. Add the **Good First Issue** label
192129

193-
## Additional Resources
194130

195-
- [Good First Issue Guidelines](./good_first_issues_guidelines.md) — what qualifies as a GFI
196-
- [Contributing Guide](../../CONTRIBUTING.md) — how to contribute
197-
- [DCO Signing Guide](../sdk_developers/signing.md) — commit signing requirements
198-
- [Discord Community](../discord.md) — get help from the community
199-
- [Community Calls](https://zoom-lfx.platform.linuxfoundation.org/meetings/hiero?view=week) — weekly office hours

0 commit comments

Comments
 (0)