Scoped, self-contained tasks for new contributors. Each entry links to a tracked GitHub
issue with acceptance criteria. See CONTRIBUTING.md for setup and
docs/rule-packs.md for core rules, framework packs, and
contribution layers.
Labels: good first issue (general) · good-first-rule (detector/rule work)
The historical v0.3 starter batch is complete, but newcomer-sized work should keep flowing
through labeled issues. Start with the live
good first issue
and good-first-rule
queues.
| Track | Good starter shape | Evidence to include |
|---|---|---|
| Contributor docs | Refresh an outdated guide, broken link, or missing cross-link. | Before/after doc links and a quick rg proving stale wording is gone. |
| Issue templates | Add fields that capture language, command, config, artifacts, or reporter surface. | Parsed template YAML and screenshots or field descriptions if needed. |
| Report examples | Add a small output snippet or fixture command for one report format. | Command, expected output excerpt, and reason the format is useful. |
| Python rules | Add one fixture or one conservative detector improvement. | A positive example, a near-miss, and a targeted detector test. |
| Reporter snapshots | Improve Markdown, PR comment, SARIF, HTML, JUnit, or JSON coverage. | Snapshot or contract test plus the generated command. |
If no listed issue fits, use the rule idea template, the false-positive template, or Discussions before starting a broad implementation.
The original contributor roadmap batch is complete. There are no open good-first implementation issues from that batch.
Statuses below are historical. Done means the GitHub issue is closed.
| # | Task | Issue | Status |
|---|---|---|---|
| 3 | Reduce naming-drift false positives on domain-rich apps |
#3 | Done |
| 4 | Configurable markers for todo-comment |
#4 | Done |
| 27 | Warn when duplicate-logic hits maxSnippets cap |
#27 | Done |
| # | Task | Issue | Status |
|---|---|---|---|
| 1 | Make the prop-drilling host-component list configurable |
#1 | Done |
| 2 | Teach large-component to recognize memo, forwardRef, and class components |
#2 | Done |
| 15 | Extend effect-complexity to useLayoutEffect / useInsertionEffect |
#15 | Done |
1. Make the prop-drilling host-component list configurable — #1 (closed)
Implemented via propDrilling.ignoreComponents, config/schema support, and detector
tests covering custom ignored components.
2. Teach large-component to recognize more component forms — #2 (closed)
memo, forwardRef, and class components are classified in
src/utils/ast.ts with fixtures in
tests/detectors/largeComponent.test.ts.
3. Reduce naming-drift false positives on domain-rich apps — #3 (closed)
namingDrift.disableBuiltInVocabulary and calibrated media fixtures reduce noise on
domain-rich apps. See src/detectors/namingDrift.ts.
4. Configurable markers for todo-comment — #4 (closed)
Custom markers, disabled defaults, and replaceDefaults are supported via config and
documented in the schema. See src/detectors/todoComment.ts.
15. Extend effect-complexity to layout/insertion effects — #15 (closed)
- Touch:
src/detectors/effectComplexity.ts,tests/detectors/effectComplexity.test.ts. - Verify: long
useLayoutEffectfires; smalluseInsertionEffectdoes not.
27. Warn when duplicate-logic truncates comparisons — #27 (closed)
- Touch:
src/detectors/duplicateLogic.ts. - Verify: exceeding
maxSnippetsemits a single clear warning.
| # | Task | Issue | Status |
|---|---|---|---|
| 5 | Add helpUri to SARIF rules |
#5 | Done |
| 6 | Snapshot test for the Markdown reporter | #6 | Done |
| 7 | Publish the config JSON schema to a stable URL | #7 | Done |
| 16 | JSON reporter contract test | #16 | Done |
| 22 | PR comment reporter for Markdown findings | #22 | Done |
5. Add helpUri to SARIF rules — #5 (closed)
In src/reporters/sarifReporter.ts, point each
rule's helpUri at its section in docs/rules.md so code-scanning links to docs.
- Touch:
src/reporters/sarifReporter.ts,tests/reporters/sarifReporter.test.ts. - Verify: every SARIF rule descriptor includes a
docs/rules.mdhelpUri.
6. Snapshot test for the Markdown reporter — #6 (closed)
Add a fixture-based test that scans examples/react and asserts the Markdown matches a
committed snapshot (normalizing the elapsed-ms line), guarding docs/example-report.md.
- Touch:
tests/reporters/markdownReporter.test.ts,docs/example-report.md. - Verify: snapshot test normalizes elapsed time and compares against the committed fixture.
7. Publish the config JSON schema to a stable URL — #7 (closed)
The schema is generated to schema/debtlens.config.schema.json
(src/config/schema.ts). Wire up hosting (e.g. GitHub Pages
or SchemaStore) and confirm the $schema URL in the init template resolves.
- Touch:
src/config/schema.ts,src/config/template.ts,schema/debtlens.config.schema.json,README.md. - Verify: config tests assert the stable raw GitHub URL and JSON resolution.
16. JSON reporter contract test — #16 (closed)
- Touch:
src/reporters/jsonReporter.ts, newtests/reporters/jsonReporter.test.ts. - Verify: parsed output includes stable
issues,summary,optionskeys.
22. PR comment reporter — #22 (closed)
Format scan results for GitHub PR comments (roadmap v0.3). Larger than a single rule tweak.
- Touch:
src/reporters/prCommentReporter.ts,src/cli/index.ts,README.md,action.yml. - Verify: reporter and CLI tests cover grouped annotations, empty state, invalid format messaging, and GitHub source links.
| # | Task | Issue | Status |
|---|---|---|---|
| 8 | Summary-only --quiet output mode |
#8 | Done |
| 9 | Respect .gitignore when resolving files |
#9 | Done |
| 10 | False-positive guidance per rule in docs | #10 | Done |
| 14 | Document --quiet in README and Action |
#14 | Done |
| 17 | Integration test for scan() on examples/react |
#17 | Done |
| 18 | Read CLI/SARIF version from package.json |
#18 | Done |
| 19 | debtlens rules command |
#19 | Done |
| 20 | Warn when scan resolves zero files | #20 | Done |
| 21 | --staged mode for pre-commit scans |
#21 | Done |
| 24 | Action: write-baseline, thresholds, max-files |
#24 | Done |
| 28 | CI smoke scan for RN and Next examples | #28 | Done |
8. Add a summary-only / --quiet output mode — #8 (closed)
Merged in PR #12. Terminal-only; prints header + summary, suppresses findings.
9. Respect .gitignore when resolving files — #9 (closed)
Optionally skip files ignored by git during a scan, in addition to the configured
exclude globs.
- Touch:
src/core/scan.ts,src/utils/git.ts,src/cli/index.ts,action.yml, config schema/types. - Verify: utility, core scan, and CLI tests cover opt-in filtering plus non-git graceful behavior.
10. Document each rule's false-positive guidance — #10 (closed)
Expand docs/rules.md with a "When this is a false positive" note per
rule, mirroring the guards in the detector tests.
14. Document --quiet in README and GitHub Action — #14 (closed)
- Touch:
README.md,action.yml.
17. Integration test for scan() — #17 (closed)
- Touch:
tests/core/scan.test.ts,examples/react/.
18. Single source of truth for version — #18 (closed)
- Touch:
src/cli/index.ts,src/reporters/sarifReporter.ts,package.json.
19. debtlens rules command — #19 (closed)
List rule ids, names, default severities, and descriptions.
20. Warn on zero files scanned — #20 (closed)
- Touch:
src/core/scan.ts,src/cli/index.ts.
21. --staged git mode — #21 (closed)
- Touch:
src/utils/git.ts,src/cli/index.ts.
24. GitHub Action input gaps — #24 (closed)
Expose write-baseline, thresholds, and max-files in action.yml.
28. CI example coverage — #28 (closed)
Scan examples/react-native and examples/next in .github/workflows/ci.yml.
| # | Task | Issue | Status |
|---|---|---|---|
| 23 | Monorepo and package-aware scanning | #23 | Done |
| 33 | Inline suppressions with required reasons | #33 | Done |
| 37 | debtlens doctor for config debugging |
#37 | Done |
| 38 | First-run adoption wizard | #38 | Done |
| 39 | Confidence-aware exit-code policy | #39 | Done |
Multi-PR or RFC efforts for future releases:
| # | Task | Layer | Issue | Status |
|---|---|---|---|---|
| 26 | Plugin API for third-party rules | scanner / extensibility | #26 | RFC closed — see docs/plugin-api-rfc.md |