From 68bcd08b7f55f1da2207c2db9bc6e085f3ddc7c1 Mon Sep 17 00:00:00 2001 From: Justin McLean Date: Sun, 28 Jun 2026 20:59:55 +1000 Subject: [PATCH] feat(mentoring): add good-first-issue-sweep skill and eval suite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the magpie-good-first-issue-sweep skill, which sweeps the open issue backlog for GFI candidates using the G1–G7 suitability rubric (scope, self-containment, code pointer, effort, security, architectural, deprecation). Classifies each issue as READY / NEAR-MISS / SKIP; proposes labels only after explicit maintainer confirmation; detects and flags prompt-injection attempts in issue bodies without acting on them. Ships a six-case eval suite for Step 2 (classify) covering: clean READY, NEAR-MISS missing a code pointer, NEAR-MISS with vague scope, SKIP for security-sensitive content, SKIP for an architectural decision, and a SKIP that overrides an embedded injection instruction. Generated-by: Claude (Opus 4.7) --- .agents/skills/magpie-good-first-issue-sweep | 1 + .claude/skills/magpie-good-first-issue-sweep | 1 + .github/skills/magpie-good-first-issue-sweep | 1 + docs/labels-and-capabilities.md | 1 + skills/good-first-issue-sweep/SKILL.md | 307 ++++++++++++++++++ .../good-first-issue-sweep | 1 + .../evals/good-first-issue-sweep/README.md | 26 ++ .../fixtures/case-1-ready/expected.json | 7 + .../fixtures/case-1-ready/report.md | 25 ++ .../expected.json | 7 + .../report.md | 20 ++ .../expected.json | 7 + .../case-3-near-miss-vague-scope/report.md | 14 + .../case-4-skip-security/expected.json | 7 + .../fixtures/case-4-skip-security/report.md | 21 ++ .../case-5-skip-architectural/expected.json | 7 + .../case-5-skip-architectural/report.md | 21 ++ .../case-6-injection-ignored/expected.json | 7 + .../case-6-injection-ignored/report.md | 22 ++ .../step-2-classify/fixtures/output-spec.md | 25 ++ .../step-2-classify/fixtures/step-config.json | 4 + .../fixtures/user-prompt-template.md | 5 + .../spec-loop/specs/good-first-issue-sweep.md | 113 +++++++ 23 files changed, 650 insertions(+) create mode 120000 .agents/skills/magpie-good-first-issue-sweep create mode 120000 .claude/skills/magpie-good-first-issue-sweep create mode 120000 .github/skills/magpie-good-first-issue-sweep create mode 100644 skills/good-first-issue-sweep/SKILL.md create mode 120000 skills/good-first-issue-sweep/good-first-issue-sweep create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/README.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-1-ready/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-1-ready/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-2-near-miss-no-code-pointer/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-2-near-miss-no-code-pointer/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-3-near-miss-vague-scope/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-3-near-miss-vague-scope/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-4-skip-security/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-4-skip-security/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-5-skip-architectural/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-5-skip-architectural/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-6-injection-ignored/expected.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/case-6-injection-ignored/report.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/output-spec.md create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/step-config.json create mode 100644 tools/skill-evals/evals/good-first-issue-sweep/step-2-classify/fixtures/user-prompt-template.md create mode 100644 tools/spec-loop/specs/good-first-issue-sweep.md diff --git a/.agents/skills/magpie-good-first-issue-sweep b/.agents/skills/magpie-good-first-issue-sweep new file mode 120000 index 00000000..39333654 --- /dev/null +++ b/.agents/skills/magpie-good-first-issue-sweep @@ -0,0 +1 @@ +../../skills/good-first-issue-sweep \ No newline at end of file diff --git a/.claude/skills/magpie-good-first-issue-sweep b/.claude/skills/magpie-good-first-issue-sweep new file mode 120000 index 00000000..916fb3e7 --- /dev/null +++ b/.claude/skills/magpie-good-first-issue-sweep @@ -0,0 +1 @@ +../../.agents/skills/magpie-good-first-issue-sweep \ No newline at end of file diff --git a/.github/skills/magpie-good-first-issue-sweep b/.github/skills/magpie-good-first-issue-sweep new file mode 120000 index 00000000..916fb3e7 --- /dev/null +++ b/.github/skills/magpie-good-first-issue-sweep @@ -0,0 +1 @@ +../../.agents/skills/magpie-good-first-issue-sweep \ No newline at end of file diff --git a/docs/labels-and-capabilities.md b/docs/labels-and-capabilities.md index 3ec3af28..2ffaae44 100644 --- a/docs/labels-and-capabilities.md +++ b/docs/labels-and-capabilities.md @@ -146,6 +146,7 @@ Capabilities for every skill currently in | `pairing-multi-agent-review` | `capability:review` | | `pr-management-mentor` | `capability:review` | | `good-first-issue-author` | `capability:review` *(authors a newcomer-ready good first issue — contributor mentoring on the supply side)* | +| `good-first-issue-sweep` | `capability:review` *(sweeps the open issue backlog for GFI candidates; scores each against the G1–G7 rubric and proposes the label on maintainer confirmation)* | | `mentoring-welcome` | `capability:review` *(drafts a first-contact orientation comment for first-time contributors on issues and PRs)* | | `issue-fix-workflow` | `capability:fix` | | `audit-finding-fix` | `capability:fix` | diff --git a/skills/good-first-issue-sweep/SKILL.md b/skills/good-first-issue-sweep/SKILL.md new file mode 100644 index 00000000..08e30a3d --- /dev/null +++ b/skills/good-first-issue-sweep/SKILL.md @@ -0,0 +1,307 @@ +--- +name: magpie-good-first-issue-sweep +mode: Mentoring +description: | + Sweep the open `` backlog for existing issues that + could be labelled as good first issues. Score each candidate against + the G1–G7 suitability rubric (scope, self-containment, code pointer, + small effort, no security sensitivity, no architectural decision, no + deprecation decision) and classify it as READY (propose the GFI + label), NEAR-MISS (surface specific edits to make it GFI-ready), or + SKIP (not suitable). Applies labels only after explicit maintainer + confirmation; never edits issue bodies without the maintainer's + direction. +when_to_use: | + Invoke when a maintainer says "find good first issues in the backlog", + "which open issues could a newcomer pick up", "label existing issues + as good first issue", or "curate the backlog for newcomers". Also + useful before a mentoring push or contributor-growth sprint when the + team wants to stock the on-ramp queue from existing work. Skip when + the goal is to draft a brand-new issue from a known gap — use + `good-first-issue-author` for that. Ask before running if + `/good-first-issue-config.md` is absent. +argument-hint: "[--component