@@ -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
2325The 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