Skip to content

Commit d32f14a

Browse files
authored
docs: update Good First Issue instructions (hiero-ledger#1466)
Signed-off-by: Abhijeet Saharan <abhijeetsaharan2236@gmail.com> Signed-off-by: Abhijeet <abhijeetsaharan2236@gmail.com>
1 parent 5246fc6 commit d32f14a

3 files changed

Lines changed: 245 additions & 170 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ This changelog is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.
101101
- Added prompt for coderabbit to review `Query` and it's sub-classes.
102102

103103
### Changed
104+
- Align Good First Issue and Good First Issue — Candidate guidelines with the Hiero C++ SDK for clarity and consistency.(#1421)
104105
- Refactored `file_info_query.py` to use `print(info)` instead of manual formatting (#1451)
105-
106106
- Enable CodeRabbit walkthrough mode by default to improve PR review visibility (#1439)
107107
- Move assignment guards to be directly inside the gfi and beginner auto assign
108108
- Remove the commented out blocks in config.yml (#1435)
Lines changed: 109 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,171 @@
1-
# Good First Issue — Candidate Guidelines
1+
# Good First Issue — Candidate Guidelines
2+
**Hiero Python SDK**
23

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+
## How to Use This Document
45

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+
This guide is intended to support **maintainers and issue creators** who use the
7+
**`good first issue: candidate`** label.
68

7-
---
9+
It provides shared language and guidance to help:
10+
11+
**Issue creators:**
12+
- Flag issues that *might* be a good starting point for new contributors
13+
- Identify where additional clarity or detail is needed
14+
- Prepare issues for promotion to a full Good First Issue
815

9-
## Table of Contents
16+
**Maintainers:**
17+
- Protect the quality and trustworthiness of Good First Issues
18+
- Give issues time to be refined before promotion
1019

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)
20+
This document is not a strict rulebook, and it is not meant to limit what kinds of contributions are welcome.
21+
All contributions are valuable to the Hiero project.
22+
23+
The **candidate** label simply helps ensure that Good First Issues offer a smooth and confidence-building first experience.
1524

1625
---
1726

18-
## Why We Use a Candidate Label
27+
## What the Candidate Label Is For
28+
29+
The **`good first issue: candidate`** label is used to mark issues that *appear* suitable for first-time contributors, but may still need a bit more clarity, polish, or confirmation before being promoted to a full **Good First Issue (GFI)**.
1930

20-
Labeling an issue as a **Good First Issue (GFI)** signals to new contributors that the issue is:
31+
It provides a safe “holding state” where maintainers can refine the issue without prematurely advertising it as ready for new contributors.
2132

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
33+
The candidate label is **not** a softer or lower-quality GFI — it is a **preparation stage**.
2734

28-
However, **many issues are not ready for that label immediately**.
35+
---
36+
37+
## Why This Label Exists
2938

30-
They might have:
31-
- ❗ Incomplete documentation
32-
- ❗ Uncertainty if they are in fact a good first issue
39+
Some issues look small and approachable, but may still be missing:
3340

41+
- Clear step-by-step instructions
42+
- Explicit file paths or locations
43+
- Well-defined acceptance criteria
44+
- Confidence about difficulty or scope
3445

35-
The **`good first issue: candidate`** label exists to:
46+
The candidate label helps signal:
3647

37-
| Purpose | Description |
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 |
48+
> “This issue is close — it just needs a little more detail before it’s ready.”
4349
44-
The candidate label is **not a softer GFI** — it is a **holding state**.
50+
This protects the credibility of the Good First Issue label and helps ensure a positive experience for new contributors.
4551

4652
---
4753

4854
## When to Use `good first issue: candidate`
4955

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:
56+
Apply the **candidate** label when an issue appears suitable for a Good First Issue, but is **not fully ready yet**.
5157

52-
### Appears Potentially Suitable as a GFI
58+
### ✅ Potentially a Good First Issue
5359

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
60+
The issue likely qualifies because:
5761

58-
Suitability can be assessed [GFIC Guidelines](https://github.com/hiero-ledger/hiero-sdk-python/blob/main/docs/maintainers/good_first_issues_guidelines.md)
62+
- The change appears small, localized, and low risk
63+
- The task fits within allowed GFI categories (documentation, examples, typing, or small mechanical edits)
64+
- The issue does not require exploration, investigation, or design decisions
5965

60-
### ✅ Requires Some Refinement
66+
Suitability can be evaluated using the
67+
68+
[**Good First Issue Guidelines**](./good_first_issues_guidelines.md)
69+
70+
---
71+
72+
### ✅ Needs Refinement Before Promotion
6173

6274
One or more of the following is still missing:
6375

64-
- Explicit step-by-step instructions
65-
- ❗ Clearly defined acceptance criteria
76+
- Explicit step-by-step implementation instructions
77+
- Clear and objective acceptance criteria
6678

67-
### ✅ Difficulty is Uncertain
79+
At this stage, the issue may include partial notes, rough ideas, or reminders for maintainers to clarify later — and that’s okay.
80+
81+
---
6882

69-
Use the `good first issue: candidate` label when you believe it is a Good First Issue but are not sure
83+
### ✅ Difficulty Is Uncertain
7084

71-
- ✅ Requires maintainer approval
85+
Use the candidate label when:
7286

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)
87+
- The issue *seems* easy, but you are not fully confident
88+
- The scope or effort needs maintainer confirmation
7489

75-
If easy issues are not 'Good First Issues' are in fact 'beginner' issues.
90+
The candidate stage allows time to confirm that the issue is truly appropriate for first-time contributors.
91+
92+
If an issue turns out to be more complex, it is usually better labeled as a **Beginner Issue** instead of a GFI.
93+
94+
---
7695

7796
## What a Candidate Is NOT
7897

79-
The **candidate** label must **NOT** be used for issues that clearly do not qualify as GFIs.
98+
The candidate label is intended for issues that are potential Good First Issues but may need additional detail or scoping to be fully beginner-friendly.
8099

81100
### ❌ Not for Issues Requiring Decisions
82101

83102
If a contributor must decide:
84-
- *what* to change
85-
- *how* something should behave
86-
- *what* is correct or expected
87103

88-
→ the issue is **not** a candidate.
104+
- *What* should change
105+
- *How* something should behave
106+
- *What* is correct or expected
107+
108+
Then the issue is **not** a candidate.
109+
110+
---
89111

90112
### ❌ Not for Core or Behavioral Changes
91113

92-
Do **not** use the candidate label for changes involving:
114+
Do not use the candidate label for issues involving:
93115

94-
- SDK or protocol behavior
95-
- Public APIs or contracts
96-
- `to_proto` / `from_proto` logic
97-
- Serialization, deserialization, or networking
116+
- SDK or protocol behavior
117+
- Public APIs or contracts
118+
- `to_proto` / `from_proto` logic
119+
- Serialization, deserialization, or networking
120+
121+
---
98122

99123
### ❌ Not for Exploratory or Blocked Work
100124

101-
- Investigations or debugging tasks
102-
- Issues dependent on other PRs or decisions
103-
- Work requiring domain or protocol knowledge
125+
Avoid using the candidate label for:
126+
127+
- Investigations or debugging tasks
128+
- Issues blocked on other PRs or decisions
129+
- Work requiring domain or protocol knowledge
104130

105-
> ⚠️ If an issue clearly does *not* meet GFI criteria, **do not label it as a candidate**.
131+
> ⚠️ If an issue clearly does *not* meet Good First Issue criteria,
132+
> do **not** label it as a candidate.
106133
> The candidate label is for issues that *might* qualify after refinement — not for issues that never will.
107134
108135
---
109136

110-
## Promoting a Candidate to GFI
137+
## Promoting a Candidate to Good First Issue
111138

112-
A candidate may be promoted to a full **Good First Issue** only when **all** of the following are true.
139+
An issue should only be promoted to a full **Good First Issue** once it is clearly ready for first-time contributors.
113140

114141
### ✅ Readiness Checklist
115142

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
143+
Before promoting an issue to Good First Issue, consider checking whether:
144+
145+
- [ ] The problem is clearly described and easy to understand for someone new to the project.
146+
- [ ] The solution is **explicitly specified**
147+
- [ ] The change is small, localized, and low risk
148+
- [ ] The issue touches a single file or clearly defined location
149+
- [ ] Acceptance criteria are objective and complete
150+
- [ ] No interpretation, investigation, or initiative is required
151+
152+
---
122153

123154
### 🔁 Promotion Process
124155

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
156+
1. Review the issue against the [**Good First Issue Guidelines**](./good_first_issues_guidelines.md)
157+
2. Add missing details, steps, and acceptance criteria
158+
3. Remove the `good first issue: candidate` label
159+
4. Apply the **Good First Issue** label
160+
161+
There is no rush — taking the time to refine an issue is part of creating a welcoming and supportive community.
162+
163+
---
164+
165+
## The Big Picture
166+
167+
The **Good First Issue — Candidate** label helps make the Hiero Python SDK accessible and friendly for everyone — especially new contributors.
129168

169+
All contributions are welcome.
170+
This label simply helps highlight the best place to begin.
130171

0 commit comments

Comments
 (0)