一键导入
issue-triage
Fetch open GitHub issues and generate a triage report with quick wins and recommended groupings. Use when asked to triage issues.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Fetch open GitHub issues and generate a triage report with quick wins and recommended groupings. Use when asked to triage issues.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
End-to-end workflow for adding a new tree-sitter language to big-code-analysis. Wires up the grammar crate, regenerates the language enum, implements Checker/Getter/Alterator/metrics, adds per-metric tests, updates docs, then runs simplify-rust, rust-optimize, and audit-tests. Does NOT commit — leaves the working tree dirty for final user review.
Audit a Rust crate in the big-code-analysis workspace for logic errors, complexity, bugs, security issues, and code smells. Operates at the crate level via `cargo -p`. Use when asked to audit or review a crate.
Audit a single Rust source file in the big-code-analysis workspace for logic errors, complexity, bugs, security issues, and code smells. Use when asked to audit or review a specific file.
Audit naming quality in a crate or directory for misleading, inconsistent, or unclear names. Use when asked to audit or review naming.
Audit test suites for tests that pass trivially, mask bugs, or assert the wrong thing. Finds tests designed to pass rather than designed to catch regressions.
Fix multiple GitHub issues on an integration branch. Issues touching different crates run in parallel worktrees; issues sharing a crate or affecting cross-language code run sequentially. Each goes through fix, simplify, review, and remediation before merging. Use when asked to fix several issues at once.
| name | issue-triage |
| description | Fetch open GitHub issues and generate a triage report with quick wins and recommended groupings. Use when asked to triage issues. |
Generate a triage report for open GitHub issues. Read-only — no issue creation, modification, or closing.
Argument: $ARGUMENTS
<crate-name> → filter to issues whose title starts with that crate name
(one of big-code-analysis, big-code-analysis-cli,
big-code-analysis-web, big-code-analysis-py)<language> → filter to issues whose title or body references a
specific language module (e.g., python, rust, java)gh issue list --label <missing> returns empty rather than erroring, so
querying a non-existent label silently filters it out. This skill is
read-only — do not create labels. Detect which expected labels are
missing and surface them instead:
have="$(gh label list --limit 200 --json name --jq '.[].name')"
for l in bug enhancement documentation refactor security upstream-grammar; do
printf '%s\n' "$have" | rg -qx "$l" || echo "missing label: $l"
done
List any missing labels in the report's caveats section (issues carrying
them cannot be grouped by label, and a maintainer or issue-plan run
must provision them). low-priority is provisioned by issue-plan.
The --label flag only supports AND, so query each label separately and
merge with jq:
(
gh issue list --state open --label bug --limit 200 --json number,title,labels,body
gh issue list --state open --label enhancement --limit 200 --json number,title,labels,body
gh issue list --state open --label refactor --limit 200 --json number,title,labels,body
gh issue list --state open --label documentation --limit 200 --json number,title,labels,body
gh issue list --state open --label security --limit 200 --json number,title,labels,body
gh issue list --state open --label upstream-grammar --limit 200 --json number,title,labels,body
) | jq -s '
add
| unique_by(.number)
| [ .[] | select([ .labels[].name ] | any(. == "low-priority") | not) ]
'
If $ARGUMENTS is a crate name, further filter to titles matching
<crate-name>: or <crate-name>( (case-insensitive prefix). If
$ARGUMENTS is a language name, filter to issues whose title or body
mentions that language.
Save the filtered list. Record the count — this is "Issues analyzed: N".
Titles can mislead. For each issue, ensure you have the full body text
(already fetched in Step 1 via --json ... body).
Skim each body for:
For each issue, evaluate against these criteria.
language_*.rslib.rs re-exports, public
traits, or shapes of Metrics / FuncSpace / language enums)=X.Y.Z)language_*.rs files (cross-language
sweep) — this is mechanical but voluminous, not a quick win*.snap) across many languagesupstream-grammar label (cannot be fixed locally without
coordination with an upstream tree-sitter project)Err on the side of NOT classifying as a quick win. When in doubt, put it in Remaining Issues.
Two-pass approach.
Group mechanically by the crate name prefix in the title (e.g.,
big-code-analysis:, big-code-analysis-cli:). A group requires 2+
issues.
Look for cross-cutting connections:
halstead, cognitive,
cyclomatic, etc. across different language moduleslanguage_*.rsparser.rs, node.rs, spaces.rs, checker.rs, or getter.rsA theme group requires 2+ issues. Do NOT force groupings — if issues are genuinely independent, leave them in Remaining Issues.
Every fetched issue MUST appear in exactly one section: Quick Wins, a Group row, or Remaining Issues.
## Issue Triage Report
**Scope**: all issues | <crate-name> | <language>
**Issues analyzed**: N
**Date**: YYYY-MM-DD
### Quick Wins
| # | Title | Why it's a quick win |
|---|-------|----------------------|
| #XX | ... | ... |
### Recommended Groupings
| Group | Issues | Rationale |
|-------|--------|-----------|
| ... | #XX, #YY | ... |
### Remaining Issues
| # | Title | Notes |
|---|-------|-------|
| #ZZ | ... | ... |
---
**Quick wins**: #X, #Y, #Z
**Grouped**: [#A, #B], [#C, #D], #E
The last two lines are copyable summary lines for sprint planning.
If a section has no entries, keep the header and write "None" in the table body.
low-priority label never
appear.