Skip to content

Commit 701cfc7

Browse files
committed
New bug template
1 parent 8dfca01 commit 701cfc7

2 files changed

Lines changed: 225 additions & 0 deletions

File tree

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
name: Skill bug or improvement
2+
description: Report a bug, suggest an improvement, or propose a scope change for an existing skill.
3+
title: "[Skill issue] <skill name> — <short summary>"
4+
labels:
5+
- skill-issue
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Thanks for helping us improve an existing skill! Use this form for **existing** skills only.
11+
If you want to propose a brand-new skill, use the *Skill proposal* template instead.
12+
13+
Fill out the short fields below, then describe the issue in detail at the end.
14+
15+
- type: input
16+
id: skill_name
17+
attributes:
18+
label: Which skill?
19+
description: Name of the existing skill (e.g. `local-ai-use`, `local-ai-app-integration`). One issue per skill, please.
20+
placeholder: e.g. local-ai-use
21+
validations:
22+
required: true
23+
24+
- type: dropdown
25+
id: issue_kind
26+
attributes:
27+
label: What kind of issue is this?
28+
description: |
29+
Pick the option that best matches what you're reporting. The fields below are tailored to each kind. A matching label (`bug`, `improvement`, `scope`) will be applied automatically when the issue is created.
30+
- **Improvement** — the skill works, but its strategy/instructions should change.
31+
- **Bug** — the skill is broken, gives wrong output, or fails to fire when it should.
32+
- **Scope** — the skill's scope should grow, shrink, or shift.
33+
- **Something else** — none of the above.
34+
options:
35+
- "Improvement — existing skill should behave differently"
36+
- "Bug — existing skill is broken"
37+
- "Scope — scope of existing skill should change"
38+
- "Something else"
39+
validations:
40+
required: true
41+
42+
- type: textarea
43+
id: improvement_details
44+
attributes:
45+
label: "Improvement: how should the skill's strategy change?"
46+
description: Only fill in if you picked **Improvement**. Suggest concretely how the skill's strategy, instructions, or behavior should change, and why.
47+
placeholder: |
48+
e.g. The skill currently always uses SD-Turbo at 512x512. It should pick a larger size when
49+
the user asks for a "wallpaper" or "poster" because the current default looks pixelated.
50+
51+
- type: textarea
52+
id: bug_details
53+
attributes:
54+
label: "Bug: what is broken, and how do we reproduce it?"
55+
description: |
56+
Only fill in if you picked **Bug**. Cover:
57+
- What you asked the agent to do.
58+
- What you expected the skill to do.
59+
- What actually happened (full agent output / error message helps).
60+
- Minimal reproduction steps.
61+
placeholder: |
62+
Steps to reproduce:
63+
1. ...
64+
2. ...
65+
Expected: ...
66+
Actual: ...
67+
68+
- type: textarea
69+
id: scope_details
70+
attributes:
71+
label: "Scope: how should the scope change?"
72+
description: |
73+
Only fill in if you picked **Scope**. Describe how the scope of this skill should change to be more useful — should it be **decreased**, **increased**, or **shifted**? Be specific about which triggers/use cases to add or remove.
74+
placeholder: |
75+
e.g. Decrease scope: stop firing on plain chat questions about local models — only fire
76+
when the user actually asks to generate an image, transcribe audio, or speak text.
77+
78+
- type: textarea
79+
id: other_details
80+
attributes:
81+
label: "Something else: describe the issue"
82+
description: Only fill in if you picked **Something else**. Describe what's going on and what you'd like to see happen.
83+
84+
- type: markdown
85+
attributes:
86+
value: |
87+
---
88+
### Environment
89+
90+
The fields below are **required for Improvement, Bug, and Something else** so we can reproduce what you saw.
91+
For **Scope** issues you can leave them blank.
92+
93+
- type: input
94+
id: system
95+
attributes:
96+
label: System / hardware
97+
description: The machine you ran the agent on. Include the AMD product name and key accelerator(s) if relevant.
98+
placeholder: e.g. AMD Ryzen™ AI Max+ 395, or MI300X server, or Ryzen 9 7950X + Radeon RX 7900 XTX
99+
100+
- type: input
101+
id: os
102+
attributes:
103+
label: Operating system and version
104+
placeholder: e.g. Windows 11 23H2, Ubuntu 24.04, macOS 14.5
105+
106+
- type: dropdown
107+
id: agent
108+
attributes:
109+
label: Which agent did you use?
110+
description: The coding agent / assistant that loaded the skill.
111+
options:
112+
- "Cursor"
113+
- "Claude Code"
114+
- "Claude Desktop"
115+
- "Codex CLI"
116+
- "GitHub Copilot"
117+
- "Other (describe in details below)"
118+
119+
- type: input
120+
id: model
121+
attributes:
122+
label: Which model?
123+
description: The underlying LLM the agent was using when the skill ran.
124+
placeholder: e.g. Claude Opus 4.7, GPT-5.5, Sonnet 4.6
125+
126+
- type: textarea
127+
id: anything_else
128+
attributes:
129+
label: Anything else?
130+
description: Logs, screenshots, links to related issues/PRs, or extra context that didn't fit above.
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
name: Label skill issues
2+
3+
on:
4+
issues:
5+
types: [opened, edited]
6+
7+
permissions:
8+
issues: write
9+
10+
jobs:
11+
label:
12+
if: >-
13+
contains(github.event.issue.labels.*.name, 'skill_proposal') ||
14+
contains(github.event.issue.labels.*.name, 'skill-issue')
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Apply kind/path labels based on issue form answers
18+
uses: actions/github-script@v7
19+
with:
20+
script: |
21+
const body = context.payload.issue.body || "";
22+
const { owner, repo } = context.repo;
23+
const issue_number = context.payload.issue.number;
24+
const currentLabels = context.payload.issue.labels.map(l => l.name);
25+
const templateLabels = currentLabels;
26+
27+
// Map a single form question to a mutually-exclusive label group.
28+
// - section: heading text from the issue form (matched case-insensitively)
29+
// - groupLabels: every label managed by this rule (used to clear stale ones)
30+
// - pick(answer): returns the label to apply, or null to apply none
31+
async function applyGroup({ section, groupLabels, pick }) {
32+
const re = new RegExp(`###\\s*${section}\\s*\\n+([^\\n]+)`, "i");
33+
const match = body.match(re);
34+
if (!match) {
35+
core.info(`No "${section}" section found; skipping.`);
36+
return;
37+
}
38+
const answer = match[1].trim();
39+
core.info(`[${section}] detected answer: ${answer}`);
40+
41+
const labelToAdd = pick(answer);
42+
if (!labelToAdd) {
43+
core.info(`[${section}] answer did not map to a label; none applied.`);
44+
}
45+
46+
const stale = groupLabels.filter(
47+
l => l !== labelToAdd && currentLabels.includes(l)
48+
);
49+
for (const name of stale) {
50+
core.info(`[${section}] removing stale label: ${name}`);
51+
try {
52+
await github.rest.issues.removeLabel({
53+
owner, repo, issue_number, name,
54+
});
55+
} catch (err) {
56+
core.warning(`Could not remove label ${name}: ${err.message}`);
57+
}
58+
}
59+
60+
if (labelToAdd && !currentLabels.includes(labelToAdd)) {
61+
core.info(`[${section}] adding label: ${labelToAdd}`);
62+
try {
63+
await github.rest.issues.addLabels({
64+
owner, repo, issue_number, labels: [labelToAdd],
65+
});
66+
} catch (err) {
67+
core.warning(`Could not add label ${labelToAdd}: ${err.message}. Make sure the label exists in the repo.`);
68+
}
69+
}
70+
}
71+
72+
if (templateLabels.includes("skill_proposal")) {
73+
await applyGroup({
74+
section: "Where should this skill live\\?",
75+
groupLabels: ["incubated", "imported"],
76+
pick: (answer) => {
77+
if (/^Path A\b/i.test(answer)) return "incubated";
78+
if (/^Path B\b/i.test(answer)) return "imported";
79+
return null;
80+
},
81+
});
82+
}
83+
84+
if (templateLabels.includes("skill-issue")) {
85+
await applyGroup({
86+
section: "What kind of issue is this\\?",
87+
groupLabels: ["bug", "improvement", "scope"],
88+
pick: (answer) => {
89+
if (/^Improvement\b/i.test(answer)) return "improvement";
90+
if (/^Bug\b/i.test(answer)) return "bug";
91+
if (/^Scope\b/i.test(answer)) return "scope";
92+
return null;
93+
},
94+
});
95+
}

0 commit comments

Comments
 (0)