Skip to content

Commit ce409ca

Browse files
committed
chore: update GFI guidelines with beginner level
Signed-off-by: exploreriii <133720349+exploreriii@users.noreply.github.com>
1 parent ec903c7 commit ce409ca

1 file changed

Lines changed: 79 additions & 150 deletions

File tree

docs/maintainers/good_first_issues_guidelines.md

Lines changed: 79 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -5,223 +5,146 @@ This document defines what we **do** and **do not** consider a *Good First Issue
55
## Table of Contents
66

77
- [Purpose](#purpose)
8-
- [Allowed Categories](#allowed-categories)
9-
- [Small, Focused Source Changes](#-small-focused-source-changes)
10-
- [Typing Improvements](#-typing-improvements)
11-
- [Refactors of Existing Examples](#-refactors-of-existing-examples)
12-
- [Documentation Improvements](#-documentation-improvements)
13-
- [Print and Output Clarity](#️-print-and-output-clarity-examples-only)
14-
- [Functional Improvements to Examples](#️-functional-improvements-to-examples)
15-
- [Test Improvements](#-test-improvements-additive-only)
16-
- [What We Do NOT Consider Good First Issues](#-what-we-do-not-consider-good-first-issues)
8+
- [What We Consider Good First Issues](#what-we-consider-good-first-issues)
9+
- [Small, Focused Source Changes](#small-focused-source-changes)
10+
- [Typing Improvements](#typing-improvements)
11+
- [Refactors of Existing Examples](#refactors-of-existing-examples)
12+
- [Documentation Improvements](#documentation-improvements)
13+
- [Print and Output Clarity](#print-and-output-clarity-examples-only)
14+
- [Functional Improvements to Examples](#functional-improvements-to-examples)
15+
- [Test Improvements](#test-improvements)
16+
- [What Is NOT a Good First Issue](#-summary-what-is-not-a-good-first-issue)
1717
- [Maintainer Guidance](#-maintainer-guidance)
18+
- [Additional Resources](#additional-resources)
19+
1820

1921
---
2022

2123
## Purpose
2224

2325
The goal of a Good First Issue is to:
2426

25-
- **Help new contributors get onboarded successfully** — providing a clear, achievable starting point
26-
- **Build confidence with a meaningful but low-risk contribution** — ensuring success without overwhelming complexity
27-
- **Reduce maintainer overhead during first-time contributions** — making review and guidance straightforward
27+
-**Help new contributors get onboarded successfully** by providing a clear, achievable starting point.
28+
29+
Good First Issues are often a contributor’s **first interaction with open source** and are intended to help them learn our workflow with confidence.
30+
31+
32+
## What We Consider Good First Issues
2833

29-
These issues are intentionally:
34+
Good First Issues are intentionally:
3035

3136
- ✅ Small
3237
- ✅ Low risk
3338
- ✅ Easy to review
3439
- ✅ Safe for first-time contributors
3540

36-
---
37-
38-
## Allowed Categories
39-
40-
### 🧵 Small, Focused Source Changes
41+
Importantly, they have:
4142

42-
Limited, localized changes to existing source files that do not alter public behavior or SDK contracts.
43+
- ✅ A **very clear, explicitly described, or provided solution**
44+
-**No requirement to interpret code behavior or make design decisions**
4345

44-
#### Allowed
45-
46-
- Adding or improving simple string helper functions
47-
- Implementing or improving `__str__` or `__repr__` methods
48-
- Fixing or clarifying edge cases in existing utility functions
49-
50-
#### Examples
51-
52-
- Improve formatting of a `__repr__` output
53-
- Make a string helper more robust or readable
54-
- Clarify handling of empty or `None` inputs in a utility function
46+
Below are examples that we consider good first issues:
5547

5648
---
49+
### Small, Focused Source Changes
5750

58-
### 🧩 Typing Improvements
51+
> ⚠️ **Note:** In most cases, changes to `src` functionality are **not** Good First Issues.
52+
> This category applies only when the change is **purely mechanical and fully specified**.
5953
60-
Improvements to type annotations that increase correctness or clarity without changing runtime behavior.
54+
#### Allowed (rare, explicit cases only)
6155

62-
#### Allowed
63-
64-
- Adding missing return type hints
65-
- Fixing incorrect or overly broad type annotations
66-
- Resolving basic type conflicts flagged by type checkers
56+
- Very small, explicitly described edits to existing code
57+
- Changes that do **not** require understanding how the code is used elsewhere
6758

68-
#### Examples
59+
#### Not Allowed
6960

70-
- Change `-> Any` to a more specific return type
71-
- Fix mismatched return types in conditional branches
72-
- Tighten a `Dict[str, Any]` to a more precise type
61+
- Any change that requires deciding *how* something should behave
62+
- Any change that affects public behavior or SDK contracts
7363

7464
---
7565

76-
### 🔄 Refactors of Existing Examples
66+
### Typing Improvements
7767

78-
Refactors that improve clarity, structure, or readability of **existing examples only**.
68+
Typing changes must be **fully specified** and **mechanical**.
7969

8070
#### Allowed
8171

82-
- Refactoring an example for clarity or readability
83-
- Extracting repeated logic into helper functions
84-
- Renaming variables to be more descriptive
85-
86-
#### Allowed Directions
72+
- Adding missing return type hints **when the expected type is explicitly stated**
73+
- Fixing incorrect or overly broad type annotations **when the correct type is provided**
8774

88-
- Split a large example into smaller, named functions
89-
- Combine a split example back into a single monolithic function for simplicity
75+
#### Not Allowed
9076

91-
> ⚠️ **Note:** This category applies **only** to existing examples.
92-
> Creating new examples is **out of scope** for GFIs.
77+
- Inferring correct types by interpreting code
78+
- Large or cross-file typing refactors
79+
- Resolving complex type-system issues
9380

9481
---
9582

96-
### 📚 Documentation Improvements
83+
### Documentation Improvements
9784

98-
Improvements to documentation that clarify intent or behavior without changing functionality.
99-
100-
#### Includes
101-
102-
- Module-level docstrings
103-
- Function and method docstrings
104-
- Inline comments that explain *why* (not what) code does something
105-
106-
#### Examples
107-
108-
- Clarify a confusing or outdated docstring
109-
- Add explanation for non-obvious behavior
110-
- Improve wording or structure for readability
111-
112-
---
113-
114-
### 🖨️ Print and Output Clarity (Examples Only)
115-
116-
Improvements to output clarity in example code.
85+
Documentation tasks must be **explicitly scoped** and **instruction-driven**.
11786

11887
#### Allowed
11988

120-
- Improving clarity of `print()` statements
121-
- Making output more descriptive or user-friendly
122-
- Standardizing message formatting (prefixes, spacing, context)
89+
- Remaing variable names when new names are provided
90+
- Fixing identified typos or grammar issues
91+
- Making explicitly provided changes to docstrings, comments or print statements
92+
- Splitting a large example into smaller functions
93+
- Combining a split example into a single function
12394

124-
#### Examples
95+
#### Not Allowed
12596

126-
- Replace ambiguous prints like `"Done"` with meaningful context
127-
- Add explanatory text before printing values
128-
- Make output ordering easier to follow
97+
- Writing new documentation
98+
- Adding docstrings or comments that require interpreting code behavior
99+
- Deciding *what* should be documented or printed
100+
- Deciding which steps should exist
129101

130102
---
131103

132-
### ⚙️ Functional Improvements to Examples
133-
134-
Small functional improvements that better illustrate **existing behavior** in examples.
135-
136-
#### Allowed
137-
138-
- Adding missing steps that improve understanding
139-
- Improving ordering or structure of example code
140-
- Clarifying error-handling paths
104+
### Test Improvements
141105

142-
#### Examples
106+
> ⚠️ Most test-related work belongs in **Beginner or Intermediate Issues**.
143107
144-
- Add an explicit setup step that was previously implied
145-
- Improve error-handling clarity in an example
146-
- Make control flow easier to follow
108+
#### Allowed (rare, explicit cases only)
147109

148-
---
110+
- Adding a clearly specified assertion to an existing test
111+
- Small mechanical edits with no test-design decisions
149112

150-
### 🧪 Test Improvements (Additive Only)
151-
152-
Small, additive improvements to **existing** tests.
153-
154-
#### Allowed
155-
156-
- Adding specific assertions to existing tests
157-
- Extending tests to cover an obvious edge case
158-
- Improving test names or failure messages
159-
160-
#### Examples
161-
162-
- Add an assertion for a previously untested branch
163-
- Improve test failure messages for clarity
164-
165-
> ⚠️ Tests must extend **existing test files**.
166-
> Creating new test suites or frameworks is **out of scope**.
167-
168-
---
169-
170-
## 🚫 What We Do NOT Consider Good First Issues
171-
172-
The following types of changes are **explicitly out of scope** for GFIs.
173-
174-
---
175-
176-
### ❌ New Examples
177-
178-
- Creating entirely new examples
179-
- Adding new example files or workflows
180-
181-
These require deeper understanding of intended usage patterns.
182-
183-
---
184-
185-
### ❌ New Unit or Integration Tests
113+
#### Not Allowed
186114

187115
- Creating new test files
188-
- Designing new test strategies or frameworks
189-
190-
Test creation often requires broader architectural context.
116+
- Designing new test cases
117+
- Extending coverage based on interpretation
191118

192119
---
193120

194-
### ❌ Core DLT or Protocol Logic
121+
## 🚫 Summary: What Is NOT a Good First Issue
195122

196-
- Changes to `to_proto` / `from_proto`
197-
- Modifying serialization or deserialization logic
198-
- Any change affecting network or wire-level behavior
199-
200-
These areas are sensitive and require domain expertise.
123+
- ❌ Issues without a clearly defined or provided solution
124+
- ❌ Tasks requiring interpretation, investigation, or initiative
125+
- ❌ Changes to `src` functionality that affect behavior
126+
- ❌ Creating new examples, tests, or documentation
127+
- ❌ Work spanning multiple files or subsystems
201128

202129
---
203130

204-
### ❌ Cross-Cutting or Architectural Changes
205-
206-
- Refactors spanning multiple modules or packages
207-
- Changes requiring understanding of multiple subsystems
208-
- Performance optimizations or concurrency changes
131+
### Rule of Thumb
209132

210-
These are better suited for experienced contributors.
133+
> If a contributor must **decide what to do**,
134+
> it is **not** a Good First Issue.
211135
212136
---
213137

214138
## 📌 Maintainer Guidance
215139

216-
When evaluating whether to label an issue as a Good First Issue, consider:
217-
218140
### Label as GFI if the issue:
219141

220142
- ✅ Touches a **single file or module**
221143
- ✅ Has **clear, well-defined scope**
222144
- ✅ Requires **no domain or protocol knowledge**
223145
- ✅ Can be **reviewed quickly**
224146
- ✅ Has **low risk of breaking changes**
147+
- ✅ Has a **clear step-by-step solution**
225148

226149
### Do NOT label as GFI if the issue:
227150

@@ -230,13 +153,19 @@ When evaluating whether to label an issue as a Good First Issue, consider:
230153
- ❌ Requires **domain or protocol knowledge**
231154
- ❌ Could have **unintended side effects**
232155
- ❌ Needs **extensive review or testing**
156+
- ❌ Requires initiative or interpretation to solve
157+
158+
Instead, these are better suited as **Beginner Issues**.
159+
160+
---
233161

234162
### Important Reminders
235163

236-
1. **Good First Issues are promoted automatically** by GitHub and Hiero, making them highly visible to new contributors
237-
2. **Quality over quantity** — we prefer fewer, clearly safe GFIs over many ambiguous ones
238-
3. **Clear acceptance criteria** — every GFI should have well-defined success conditions
239-
4. **Link to documentation** — include relevant guides to help contributors succeed
164+
1. **Good First Issues are promoted automatically** by GitHub and Hiero, making them highly visible
165+
2. **Good First Issues are self-assigned** (via `/assign`), so they must be achievable by anyone
166+
3. **Quality over quantity** — prefer fewer, clearly safe GFIs
167+
4. **Clear acceptance criteria** — every GFI should define what “done” means
168+
5. **Link to documentation** — include relevant guides to help contributors succeed
240169

241170
---
242171

0 commit comments

Comments
 (0)