Skip to content

Commit 096fabb

Browse files
authored
chore: re-organize labels for better triage results (QwenLM#819)
* chore: re-organize labels for better triage results * fix: lint issue * fix: rename gemini to qwen, remove google auth hint * fix: remove scripts
1 parent 9d66462 commit 096fabb

File tree

6 files changed

+318
-111
lines changed

6 files changed

+318
-111
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: 'Bug Report'
22
description: 'Report a bug to help us improve Qwen Code'
3-
labels: ['kind/bug', 'status/need-triage']
3+
labels: ['type/bug', 'status/needs-triage']
44
body:
55
- type: 'markdown'
66
attributes:

.github/ISSUE_TEMPLATE/feature_request.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: 'Feature Request'
22
description: 'Suggest an idea for this project'
33
labels:
4-
- 'kind/enhancement'
5-
- 'status/need-triage'
4+
- 'type/feature-request'
5+
- 'status/needs-triage'
66
body:
77
- type: 'markdown'
88
attributes:

.github/scripts/pr-triage.sh

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,13 @@ process_pr() {
4040
fi
4141

4242
if [[ -z "${ISSUE_NUMBER}" ]]; then
43-
echo "⚠️ No linked issue found for PR #${PR_NUMBER}, adding status/need-issue label"
44-
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --add-label "status/need-issue" 2>/dev/null; then
45-
echo " ⚠️ Failed to add label (may already exist or have permission issues)"
46-
fi
47-
# Add PR number to the list
48-
if [[ -z "${PRS_NEEDING_COMMENT}" ]]; then
49-
PRS_NEEDING_COMMENT="${PR_NUMBER}"
50-
else
51-
PRS_NEEDING_COMMENT="${PRS_NEEDING_COMMENT},${PR_NUMBER}"
52-
fi
53-
echo "needs_comment=true" >> "${GITHUB_OUTPUT}"
43+
echo "ℹ️ No linked issue found for PR #${PR_NUMBER} - this is acceptable for independent contributions"
44+
# We no longer require PRs to have linked issues
45+
# Independent valuable contributions are encouraged
5446
else
5547
echo "🔗 Found linked issue #${ISSUE_NUMBER}"
5648

57-
# Remove status/need-issue label if present
49+
# Remove status/need-issue label if present (legacy cleanup)
5850
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --remove-label "status/need-issue" 2>/dev/null; then
5951
echo " status/need-issue label not present or could not be removed"
6052
fi
@@ -99,7 +91,7 @@ process_pr() {
9991
local LABELS_TO_REMOVE=""
10092
for label in "${PR_LABEL_ARRAY[@]}"; do
10193
if [[ -n "${label}" ]] && [[ " ${ISSUE_LABEL_ARRAY[*]} " != *" ${label} "* ]]; then
102-
# Don't remove status/need-issue since we already handled it
94+
# Don't remove status/need-issue since we already handled it (legacy cleanup)
10395
if [[ "${label}" != "status/need-issue" ]]; then
10496
if [[ -z "${LABELS_TO_REMOVE}" ]]; then
10597
LABELS_TO_REMOVE="${label}"
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
name: 'Check Issue Completeness'
2+
3+
on:
4+
issues:
5+
types:
6+
- 'opened'
7+
- 'edited'
8+
9+
permissions:
10+
contents: 'read'
11+
issues: 'write'
12+
13+
jobs:
14+
check-issue-info:
15+
timeout-minutes: 2
16+
if: |-
17+
${{ github.repository == 'QwenLM/qwen-code' && contains(github.event.issue.labels.*.name, 'type/bug') }}
18+
runs-on: 'ubuntu-latest'
19+
steps:
20+
- name: 'Check for Client Information'
21+
id: 'check_info'
22+
env:
23+
ISSUE_BODY: '${{ github.event.issue.body }}'
24+
run: |-
25+
echo "Checking issue body for required information..."
26+
27+
# Convert issue body to lowercase for case-insensitive matching
28+
ISSUE_BODY_LOWER=$(echo "$ISSUE_BODY" | tr '[:upper:]' '[:lower:]')
29+
30+
# Initialize flags
31+
HAS_VERSION=false
32+
HAS_OS_INFO=false
33+
HAS_AUTH_METHOD=false
34+
HAS_ABOUT_OUTPUT=false
35+
MISSING_INFO=()
36+
37+
# Check for /about command output by looking for its characteristic fields
38+
# The /about output contains: CLI Version, Git Commit, Model, Sandbox, OS, Auth Method
39+
if echo "$ISSUE_BODY_LOWER" | grep -qE 'cli version.*[0-9]+\.[0-9]+\.[0-9]+'; then
40+
HAS_ABOUT_OUTPUT=true
41+
HAS_VERSION=true
42+
fi
43+
44+
# If full /about output is not detected, check individual components
45+
if [ "$HAS_ABOUT_OUTPUT" = false ]; then
46+
# Check for version information (various formats)
47+
if echo "$ISSUE_BODY_LOWER" | grep -qE '(cli version|version|v)[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+'; then
48+
HAS_VERSION=true
49+
fi
50+
51+
# Check for OS information
52+
if echo "$ISSUE_BODY_LOWER" | grep -qE '(^os[[:space:]]|macos|windows|linux|ubuntu|debian|fedora|arch|darwin|win32|platform)'; then
53+
HAS_OS_INFO=true
54+
fi
55+
56+
# Check for Auth Method information
57+
if echo "$ISSUE_BODY_LOWER" | grep -qE '(auth method|authentication|login|qwen-oauth|api.?config|oauth)'; then
58+
HAS_AUTH_METHOD=true
59+
fi
60+
else
61+
# If /about output is present, assume it contains OS and auth info
62+
HAS_OS_INFO=true
63+
HAS_AUTH_METHOD=true
64+
fi
65+
66+
# Determine what's missing
67+
if [ "$HAS_ABOUT_OUTPUT" = false ]; then
68+
if [ "$HAS_VERSION" = false ]; then
69+
MISSING_INFO+=("Qwen Code version")
70+
fi
71+
if [ "$HAS_OS_INFO" = false ]; then
72+
MISSING_INFO+=("operating system information")
73+
fi
74+
if [ "$HAS_AUTH_METHOD" = false ]; then
75+
MISSING_INFO+=("authentication/login method")
76+
fi
77+
# Suggest providing /about output for completeness
78+
if [ "$HAS_VERSION" = false ] || [ "$HAS_OS_INFO" = false ] || [ "$HAS_AUTH_METHOD" = false ]; then
79+
MISSING_INFO+=("full output of the \`/about\` command (recommended)")
80+
fi
81+
fi
82+
83+
# Set output variables
84+
if [ ${#MISSING_INFO[@]} -eq 0 ]; then
85+
echo "info_complete=true" >> "$GITHUB_OUTPUT"
86+
echo "All required information is present."
87+
else
88+
echo "info_complete=false" >> "$GITHUB_OUTPUT"
89+
# Join array elements with comma
90+
MISSING_LIST=$(IFS=','; echo "${MISSING_INFO[*]}")
91+
echo "missing_info=$MISSING_LIST" >> "$GITHUB_OUTPUT"
92+
echo "Missing information: $MISSING_LIST"
93+
fi
94+
95+
- name: 'Comment on Issue if Information is Missing'
96+
if: |-
97+
${{ steps.check_info.outputs.info_complete == 'false' }}
98+
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7
99+
env:
100+
MISSING_INFO: '${{ steps.check_info.outputs.missing_info }}'
101+
with:
102+
github-token: '${{ secrets.GITHUB_TOKEN }}'
103+
script: |
104+
const missingInfo = process.env.MISSING_INFO.split(',');
105+
const missingList = missingInfo.map(item => `- ${item}`).join('\n');
106+
107+
const comments = await github.rest.issues.listComments({
108+
owner: context.repo.owner,
109+
repo: context.repo.repo,
110+
issue_number: context.issue.number,
111+
});
112+
113+
const botComment = comments.data.find(comment =>
114+
comment.user.type === 'Bot' &&
115+
comment.body.includes('Missing Required Information')
116+
);
117+
118+
const commentBody = `### ⚠️ Missing Required Information
119+
120+
Thank you for reporting this issue! To help us investigate and resolve this problem more effectively, we need some additional information:
121+
122+
${missingList}
123+
124+
### How to provide this information:
125+
126+
Please run the following command and paste the complete output:
127+
128+
\`\`\`bash
129+
qwen
130+
# Then in the interactive CLI, run:
131+
/about
132+
\`\`\`
133+
134+
The output should look like:
135+
\`\`\`
136+
CLI Version 0.0.14
137+
Git Commit 9a0cb64a
138+
Model coder-model
139+
Sandbox no sandbox
140+
OS darwin
141+
Auth Method qwen-oauth
142+
\`\`\`
143+
144+
Once you provide this information, we'll be able to assist you better. Thank you! 🙏`;
145+
146+
if (botComment) {
147+
await github.rest.issues.updateComment({
148+
owner: context.repo.owner,
149+
repo: context.repo.repo,
150+
comment_id: botComment.id,
151+
body: commentBody
152+
});
153+
console.log('Updated existing comment about missing information.');
154+
} else {
155+
await github.rest.issues.createComment({
156+
owner: context.repo.owner,
157+
repo: context.repo.repo,
158+
issue_number: context.issue.number,
159+
body: commentBody
160+
});
161+
console.log('Created new comment about missing information.');
162+
}
163+
164+
- name: 'Add status/need-information Label'
165+
if: |-
166+
${{ steps.check_info.outputs.info_complete == 'false' }}
167+
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7
168+
with:
169+
github-token: '${{ secrets.GITHUB_TOKEN }}'
170+
script: |
171+
await github.rest.issues.addLabels({
172+
owner: context.repo.owner,
173+
repo: context.repo.repo,
174+
issue_number: context.issue.number,
175+
labels: ['status/need-information']
176+
});
177+
console.log('Added status/need-information label.');
178+
179+
- name: 'Remove status/need-information Label if Complete'
180+
if: |-
181+
${{ steps.check_info.outputs.info_complete == 'true' }}
182+
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v7
183+
continue-on-error: true
184+
with:
185+
github-token: '${{ secrets.GITHUB_TOKEN }}'
186+
script: |
187+
try {
188+
await github.rest.issues.removeLabel({
189+
owner: context.repo.owner,
190+
repo: context.repo.repo,
191+
issue_number: context.issue.number,
192+
name: 'status/need-information'
193+
});
194+
console.log('Removed status/need-information label as information is now complete.');
195+
} catch (error) {
196+
if (error.status === 404) {
197+
console.log('Label not found on issue, nothing to remove.');
198+
} else {
199+
throw error;
200+
}
201+
}

.github/workflows/gemini-automated-issue-triage.yml renamed to .github/workflows/qwen-automated-issue-triage.yml

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,20 @@ jobs:
7171
1. Run: `gh label list --repo ${{ github.repository }} --limit 100` to get all available labels.
7272
2. Use shell command `echo` to check the issue title and body provided in the environment variables: "${ISSUE_TITLE}" and "${ISSUE_BODY}".
7373
3. Ignore any existing priorities or tags on the issue. Just report your findings.
74-
4. Select the most relevant labels from the existing labels, focusing on kind/*, area/*, sub-area/* and priority/*. For area/* and kind/* limit yourself to only the single most applicable label in each case.
74+
4. Select the most relevant labels from the existing labels, focusing on type/*, category/*, scope/*, status/* and priority/*. For category/* and type/* limit yourself to only the single most applicable label in each case.
7575
6. Apply the selected labels to this issue using: `gh issue edit ${{ github.event.issue.number }} --repo ${{ github.repository }} --add-label "label1,label2"`.
7676
7. For each issue please check if CLI version is present, this is usually in the output of the /about command and will look like 0.1.5 for anything more than 6 versions older than the most recent should add the status/need-retesting label.
7777
8. If you see that the issue doesn't look like it has sufficient information recommend the status/need-information label.
78-
9. Use Area definitions mentioned below to help you narrow down issues.
78+
9. Use Category and Scope definitions mentioned below to help you narrow down issues.
7979
8080
## Guidelines
8181
8282
- Only use labels that already exist in the repository
8383
- Do not add comments or modify the issue content
8484
- Triage only the current issue
85-
- Identify only one area/ label
86-
- Identify only one kind/ label
87-
- Identify all applicable sub-area/* and priority/* labels based on the issue content. It's ok to have multiple of these
85+
- Identify only one category/ label
86+
- Identify only one type/ label
87+
- Identify all applicable scope/*, status/* and priority/* labels based on the issue content. It's ok to have multiple of these
8888
- Once you categorize the issue if it needs information bump down the priority by 1 eg.. a p0 would become a p1 a p1 would become a p2. P2 and P3 can stay as is in this scenario
8989
- Reference all shell variables as "${VAR}" (with quotes and braces)
9090
- Output only valid JSON format
@@ -127,45 +127,55 @@ jobs:
127127
Things you should know:
128128
- If users are talking about issues where the model gets downgraded from pro to flash then i want you to categorize that as a performance issue
129129
- This product is designed to use different models eg.. using pro, downgrading to flash etc. when users report that they dont expect the model to change those would be categorized as feature requests.
130-
Definition of Areas
131-
area/ux:
132-
- Issues concerning user-facing elements like command usability, interactive features, help docs, and perceived performance.
133-
- I am seeing my screen flicker when using Gemini CLI
134-
- I am seeing the output malformed
135-
- Theme changes aren't taking effect
136-
- My keyboard inputs arent' being recognzied
137-
area/platform:
138-
- Issues related to installation, packaging, OS compatibility (Windows, macOS, Linux), and the underlying CLI framework.
139-
area/background: Issues related to long-running background tasks, daemons, and autonomous or proactive agent features.
140-
area/models:
141-
- i am not getting a response that is reasonable or expected. this can include things like
142-
- I am calling a tool and the tool is not performing as expected.
143-
- i am expecting a tool to be called and it is not getting called ,
144-
- Including experience when using
145-
- built-in tools (e.g., web search, code interpreter, read file, writefile, etc..),
146-
- Function calling issues should be under this area
147-
- i am getting responses from the model that are malformed.
148-
- Issues concerning Gemini quality of response and inference,
149-
- Issues talking about unnecessary token consumption.
150-
- Issues talking about Model getting stuck in a loop be watchful as this could be the root cause for issues that otherwise seem like model performance issues.
151-
- Memory compression
152-
- unexpected responses,
153-
- poor quality of generated code
154-
area/tools:
155-
- These are primarily issues related to Model Context Protocol
156-
- These are issues that mention MCP support
157-
- feature requests asking for support for new tools.
158-
area/core: Issues with fundamental components like command parsing, configuration management, session state, and the main API client logic. Introducing multi-modality
159-
area/contribution: Issues related to improving the developer contribution experience, such as CI/CD pipelines, build scripts, and test automation infrastructure.
160-
area/authentication: Issues related to user identity, login flows, API key handling, credential storage, and access token management, unable to sign in selecting wrong authentication path etc..
161-
area/security-privacy: Issues concerning vulnerability patching, dependency security, data sanitization, privacy controls, and preventing unauthorized data access.
162-
area/extensibility: Issues related to the plugin system, extension APIs, or making the CLI's functionality available in other applications, github actions, ide support etc..
163-
area/performance: Issues focused on model performance
164-
- Issues with running out of capacity,
165-
- 429 errors etc..
166-
- could also pertain to latency,
167-
- other general software performance like, memory usage, CPU consumption, and algorithmic efficiency.
168-
- Switching models from one to the other unexpectedly.
130+
Definition of Categories and Scopes
131+
132+
category/cli: Command line interface and interaction
133+
- Issues with interactive CLI features, command parsing, keyboard shortcuts
134+
- Related scopes: scope/commands, scope/interactive, scope/non-interactive, scope/keybindings
135+
136+
category/core: Core engine and logic
137+
- Issues with fundamental components, content generation, session management
138+
- Related scopes: scope/content-generation, scope/token-management, scope/session-management, scope/model-switching
139+
140+
category/ui: User interface and display
141+
- Issues with themes, UI components, rendering, markdown display
142+
- Related scopes: scope/themes, scope/components, scope/rendering, scope/markdown
143+
144+
category/authentication: Authentication and authorization
145+
- Issues with login flows, API keys, OAuth, credential storage
146+
- Related scopes: scope/oauth, scope/api-keys, scope/token-storage
147+
148+
category/tools: Tool integration and execution
149+
- Issues with MCP, shell execution, file operations, web search, memory, git integration
150+
- Related scopes: scope/mcp, scope/shell, scope/file-operations, scope/web-search, scope/memory, scope/git
151+
152+
category/configuration: Configuration management
153+
- Issues with settings, extensions, trusted folders, sandbox configuration
154+
- Related scopes: scope/settings, scope/extensions, scope/trusted-folders, scope/sandbox
155+
156+
category/integration: External integrations
157+
- Issues with IDE integration, VSCode extension, Zed integration, GitHub Actions
158+
- Related scopes: scope/ide, scope/vscode, scope/zed, scope/github-actions
159+
160+
category/platform: Platform compatibility
161+
- Issues with installation, OS compatibility, packaging
162+
- Related scopes: scope/installation, scope/macos, scope/windows, scope/linux, scope/packaging
163+
164+
category/performance: Performance and optimization
165+
- Issues with latency, memory usage, model performance, caching
166+
- Related scopes: scope/latency, scope/memory-usage, scope/model-performance, scope/caching
167+
168+
category/security: Security and privacy
169+
- Issues with data privacy, credential security, vulnerabilities
170+
- Related scopes: scope/data-privacy, scope/credential-security, scope/vulnerability
171+
172+
category/telemetry: Telemetry and analytics
173+
- Issues with metrics collection, logging, analytics
174+
- Related scopes: scope/metrics, scope/logging, scope/analytics
175+
176+
category/development: Development experience
177+
- Issues with build system, testing, CI/CD, documentation
178+
- Related scopes: scope/build-system, scope/testing, scope/ci-cd, scope/documentation
169179
170180
- name: 'Post Issue Analysis Failure Comment'
171181
if: |-

0 commit comments

Comments
 (0)