You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: restructure readme and polish community docs for reviewer audience
Reorder README to lead with Quick Start and "For EGO Reviewers" (promoted
to h2 with "Your First 10 Minutes" guide), followed by What Gets Checked
and How This Helps. Move "How This Was Built" after substance. Add "Where
to Start" section linking to key docs. Update fixture/assertion counts.
CONTRIBUTING.md: add test-before-contribute callout at top.
GOVERNANCE.md: add timeline estimate for co-maintainer onboarding.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+64-42Lines changed: 64 additions & 42 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,10 +4,6 @@ Automated pre-submission checks for GNOME Shell extensions, built from analysis
4
4
5
5
ego-lint is fully deterministic: bash + python + YAML rules. No AI at runtime, no network access, no dependencies beyond coreutils.
6
6
7
-
### For EGO Reviewers
8
-
9
-
This tool encodes the mechanical checks you already do by hand — import segregation, lifecycle symmetry, metadata validation, resource cleanup — into automated, reproducible rules. The rules are grounded in [real EGO review analysis](docs/research/) and designed to be co-owned: adding a new check is [4 lines of YAML](CONTRIBUTING.md). You are invited to shape the rules, adjust severity, and add checks for rejection patterns you see often.
10
-
11
7
## Quick Start
12
8
13
9
```bash
@@ -20,35 +16,37 @@ Exit code 0 = no blocking issues. Exit code 1 = blocking issues that will likely
20
16
21
17
Run `./ego-lint --help` for the full check list and options.
> Runs in ~2 seconds on typical extensions, ~4 seconds on large ones (11 modules). No network access.
28
31
29
-
## How This Helps the Review Queue
30
-
31
-
ego-lint automates the mechanical checks that cause the most common rejections. When developers run it before submitting, it catches issues that would otherwise require reviewer round-trips:
32
+
## For EGO Reviewers
32
33
33
-
-**Transitive import analysis** — BFS from `prefs.js` through relative imports to catch indirect Shell runtime dependencies (`gi://St`, `gi://Clutter`, etc.)
34
-
-**Cross-file resource tracking** — builds a resource graph (signals, timeouts, widgets, D-Bus, file monitors, GSettings) and detects orphans that aren't cleaned up
35
-
-**AI pattern detection** — code provenance scoring, try-catch density, impossible state guards, `typeof super.method` checks, and 40+ other heuristic signals for AI-generated code (patterns identified as common in AI-generated submissions per the [December 2025 GNOME blog post](https://blogs.gnome.org/shell-dev/2025/12/18/extensions-and-ai/))
36
-
-**Version-gated rules** — GNOME 44–50 migration rules that only fire when the extension's declared `shell-version` includes the relevant version
34
+
This tool encodes the mechanical checks you already do by hand — import segregation, lifecycle symmetry, metadata validation, resource cleanup — into automated, reproducible rules. The rules are grounded in [real EGO review analysis](docs/research/) and designed to be co-owned: adding a new check is [4 lines of YAML](CONTRIBUTING.md).
37
35
38
-
ego-lint does **not**:
36
+
### Your First 10 Minutes
39
37
40
-
- Make approval/rejection decisions
41
-
- Use AI inference or network access at runtime
42
-
- Check logic correctness or functionality
43
-
- Replace human review judgment
38
+
1. Run `./ego-lint` on an extension from your review queue
39
+
2. Compare findings against your own review notes
40
+
3. If something is wrong: [open an issue](https://github.com/ZviBaratz/gnome-extension-reviewer/issues)
41
+
4. If something is missing: add a [4-line YAML rule](CONTRIBUTING.md)
44
42
45
-
**CI integration**: Pure bash + python, exits 0/1, no network access, no dependencies beyond coreutils. Tested against 142 fixtures with 373 assertions. See [docs/ci-integration.md](docs/ci-integration.md)for GitHub Actions and GitLab CI examples.
43
+
You are invited to shape the rules, adjust severity, and add checks for rejection patterns you see often.
46
44
47
-
## How This Was Built
45
+
## Where to Start
48
46
49
-
-**Claude Code wrote the code** — scripts, rules, tests, and docs were developed using [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (Anthropic's AI coding tool). Every design decision was human-reviewed. The AI slop detection rules are based on patterns observed in real EGO rejections of AI-generated submissions.
50
-
-**Research was AI-assisted** — Discourse mining, guideline extraction, cross-source synthesis, and gap analysis were performed with Claude Code and verified against real EGO reviews on extensions.gnome.org, [gjs.guide](https://gjs.guide) requirements, and GNOME Shell GitLab history. Regression-tested against a real 11-module extension as baseline.
51
-
-**ego-lint itself is AI-free** — The output artifact is deterministic bash + python + YAML. No API calls. No network access. No model inference. AI was the development tool, not the runtime tool.
47
+
-**Adding rules**: [CONTRIBUTING.md](CONTRIBUTING.md) — 5-minute workflow for adding a check
ego-lint automates the mechanical checks that cause the most common rejections. When developers run it before submitting, it catches issues that would otherwise require reviewer round-trips:
105
+
106
+
-**Transitive import analysis** — BFS from `prefs.js` through relative imports to catch indirect Shell runtime dependencies (`gi://St`, `gi://Clutter`, etc.)
107
+
-**Cross-file resource tracking** — builds a resource graph (signals, timeouts, widgets, D-Bus, file monitors, GSettings) and detects orphans that aren't cleaned up
108
+
-**AI pattern detection** — code provenance scoring, try-catch density, impossible state guards, `typeof super.method` checks, and 40+ other heuristic signals for AI-generated code (patterns identified as common in AI-generated submissions per the [December 2025 GNOME blog post](https://blogs.gnome.org/shell-dev/2025/12/18/extensions-and-ai/))
109
+
-**Version-gated rules** — GNOME 44–50 migration rules that only fire when the extension's declared `shell-version` includes the relevant version
110
+
111
+
ego-lint does **not**:
112
+
113
+
- Make approval/rejection decisions
114
+
- Use AI inference or network access at runtime
115
+
- Check logic correctness or functionality
116
+
- Replace human review judgment
117
+
104
118
### Rules Format
105
119
106
120
Pattern rules are declared in [`rules/patterns.yaml`](rules/patterns.yaml) — adding a new check is 4 lines of YAML:
@@ -147,27 +161,6 @@ Full research: [docs/RESEARCH-SUMMARY.md](docs/RESEARCH-SUMMARY.md) | Detailed f
147
161
- Per-line `_async()` cancellable check is a heuristic — some `null` cancellable calls are valid
148
162
- Full gap list: [docs/research/gap-analysis.md](docs/research/gap-analysis.md)
149
163
150
-
## Reporting Issues
151
-
152
-
Found a false positive? Rule missing a common rejection reason? [Open an issue](https://github.com/ZviBaratz/gnome-extension-reviewer/issues) with the rule ID and a code sample. False positives in blocking rules are treated as high priority.
153
-
154
-
## Advanced: Claude Code Plugin (Optional)
155
-
156
-
ego-lint is the primary offering — it works standalone without Claude Code or any AI. The skills below are experimental extras for developers who use [Claude Code](https://docs.anthropic.com/en/docs/claude-code).
claude plugins add github:ZviBaratz/gnome-extension-reviewer
167
-
```
168
-
169
-
The four skills above use Claude to analyze extension source code via Anthropic's API. ego-lint itself makes no API calls — it's the same deterministic tool whether or not you use the plugin.
170
-
171
164
## Community
172
165
173
166
This project is looking for community co-maintainers among EGO reviewers. If you'd like to help shape the rules — add checks for rejection patterns you see often, adjust severity, or improve heuristics — open an issue or PR. See [GOVERNANCE.md](GOVERNANCE.md) for how rule decisions are made.
@@ -190,10 +183,39 @@ Self-contained improvements where reviewer expertise would be especially valuabl
190
183
191
184
Full gap list: [docs/research/gap-analysis.md](docs/research/gap-analysis.md)
192
185
186
+
## How This Was Built
187
+
188
+
- **Claude Code wrote the code** — scripts, rules, tests, and docs were developed using [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (Anthropic's AI coding tool). Every design decision was human-reviewed. The AI slop detection rules are based on patterns observed in real EGO rejections of AI-generated submissions.
189
+
- **Research was AI-assisted** — Discourse mining, guideline extraction, cross-source synthesis, and gap analysis were performed with Claude Code and verified against real EGO reviews on extensions.gnome.org, [gjs.guide](https://gjs.guide) requirements, and GNOME Shell GitLab history. Regression-tested against a real 11-module extension as baseline.
190
+
- **ego-lint itself is AI-free** — The output artifact is deterministic bash + python + YAML. No API calls. No network access. No model inference. AI was the development tool, not the runtime tool.
191
+
192
+
## Advanced: Claude Code Plugin (Optional)
193
+
194
+
ego-lint is the primary offering — it works standalone without Claude Code or any AI. The skills below are experimental extras for developers who use [Claude Code](https://docs.anthropic.com/en/docs/claude-code).
claude plugins add github:ZviBaratz/gnome-extension-reviewer
205
+
```
206
+
207
+
The four skills above use Claude to analyze extension source code via Anthropic's API. ego-lint itself makes no API calls — it's the same deterministic tool whether or not you use the plugin.
208
+
193
209
## Author
194
210
195
211
Built by [Zvi Baratz](https://github.com/ZviBaratz), author of [hara-hachi-bu](https://github.com/ZviBaratz/hara-hachi-bu) (a GNOME Shell extension for power management, submitted to EGO). Motivated by review round-trip friction — the mechanical checks that delay approval shouldn't require human time on either side. Built entirely with [Claude Code](https://docs.anthropic.com/en/docs/claude-code).
196
212
213
+
## Reporting Issues
214
+
215
+
Found a false positive? Rule missing a common rejection reason? [Open an issue](https://github.com/ZviBaratz/gnome-extension-reviewer/issues) with the rule ID and a code sample. False positives in blocking rules are treated as high priority.
216
+
217
+
**CI integration**: Pure bash + python, exits 0/1, no network access, no dependencies beyond coreutils. Tested against 144 fixtures with 378 assertions. See [docs/ci-integration.md](docs/ci-integration.md) for GitHub Actions and GitLab CI examples.
0 commit comments