Skip to content
Back to skills

Strict Triage

ASecurity

This skill should be used when triaging an inbound GitHub issue from a maintainer perspective — applying a 9-item checklist to decide a verdict (READY / NEEDS_INFO / DUP / CLOSE), surfacing classification disagreements with existing labels, and producing a draft response plus gh command suggestions. Parallel to strict-review but for issues, not code.

  • 14 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
documentationgobashgitapidocumentation

Works with

  • terminal
  • api

Security analysis

A100/100

Scanned October 19, 2026

npx -y skills add Lee-W/maigo --skill strict-triage --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Strict Triage?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Strict Triage
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lee-w-strict-triage/badge)](https://www.skillsdirectory.com/skills/lee-w-strict-triage)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: strict-triage
description: This skill should be used when triaging an inbound GitHub issue from a maintainer perspective — applying a 9-item checklist to decide a verdict (READY / NEEDS_INFO / DUP / CLOSE), surfacing classification disagreements with existing labels, and producing a draft response plus gh command suggestions. Parallel to strict-review but for issues, not code.
---

<!-- mkdocs-include-start -->

# Strict Triage

**Owner Agent**: Soyo (Reviewer)
**Consumers**: [`/maigo:triage-issue`](https://github.com/Lee-W/maigo/blob/main/commands/triage-issue.md) step 3

## Core stance: default NEEDS_INFO

**Verdict starts at NEEDS_INFO.** Maintainer time is the scarce resource.
An issue with missing info or unclear scope wastes the next contributor who
picks it up. "Looks reasonable at a glance" must not become "wasted three
contributors before we realized scope was wrong" — the checklist is the
guardrail.

These do **not** count as enough to upgrade to READY:

- "感覺像是 bug 吧" — without repro steps, you can't tell
- "之前有人問過類似的" — without the prior issue # linked, the next contributor will re-investigate
- "我猜作者意思是 X" — issue body is the source of truth; if it's ambiguous, ask

## The 9-item triage checklist

Every triage must walk through every item. Output explicitly marks `[x]` or `[ ]` per item.

1. **Specific title** — Title points at a concrete behaviour or feature, not "doesn't work" / "請新增功能" / "壞了"
2. **Repro steps (bug only)** — If classified as bug: numbered or bulleted steps a maintainer can run. Skip with `[—]` if not bug.
3. **Expected vs actual (bug only)** — Both sides stated; "it crashes" without "what should have happened instead" doesn't count. Skip with `[—]` if not bug.
4. **Environment info (bug only)** — Version / OS / runtime / relevant config. Skip with `[—]` if not bug.
5. **No obvious duplicate** — Raana's grep / linked-issue scan did not surface a same-bug / same-request issue. If one was found, must reference its `#N`.
6. **In project scope** — Belongs in this repo, not an upstream dep / unrelated tool / fork-only concern.
7. **Has actionable next step** — A maintainer could write a 1-line response that moves it forward (ask X, label as Y, assign to Z, close as W). "Interesting thought" with no path forward fails this.
8. **Follows issue template** — If `.github/ISSUE_TEMPLATE/` exists in the repo, the relevant sections are filled. Missing template → `[ ]` and call out which sections are blank.
9. **Signal not buried** — Discussion / "+1" / "me too" comments do not overwhelm the original report. If they do, summarise the core in your draft response so future readers don't have to dig.

Any `[ ]` blocks READY — verdict downgrades to NEEDS_INFO / DUP / CLOSE per the table below.

## Classification (parallel to checklist, always required)

Tomori's triage rubric (`.maigo/issue/<id>/rubric.md`, one per issue) includes
a `## Category` line — one of
`bug` / `feature` / `question` / `documentation` / `other`. Soyo's output **always
echoes Tomori's classification** and adds a `disagreement` line if existing
GitHub labels point at a different category:

```
## Classification
- Tomori's call: bug
- Existing labels: [enhancement]
- Disagreement: ⚠️ labels say enhancement but body describes a regression after upgrade — recommend re-label as bug
```

If no existing labels → just print `- Existing labels: (none)`.
If Tomori's call matches labels → just print `- Aligned with existing labels` and move on.

Classification is **not** part of the 9-item checklist — it is an orthogonal
output axis. An issue can be `[x]` on all 9 items and still have a label
disagreement worth surfacing.

## Verdict semantics

| Verdict | When | Required output additions |
|---|---|---|
| **READY** | All 9 `[x]` (or `[—]` for items 2–4 if not bug) AND no classification disagreement | Suggested labels to **add** (good-first-issue if applicable); suggested assignee if you can infer one from CODEOWNERS or recent contributors |
| **NEEDS_INFO** | Items 1–4 partial | Specific bullet list of what's missing; **polite** draft asking for it (don't dump 9 questions — pick the 2–3 that unlock the rest) |
| **DUP** | Item 5 fails OR Tomori flagged a likely dup in rubric | Link the original `#N`; draft `close as duplicate of #N` with a one-line note on which one survives |
| **CLOSE** | Items 6 or 7 fail (out of scope / not actionable) | Draft close reason naming the specific item that failed; if `question` category, suggest moving to Discussions instead of close |

**Don't combine verdicts.** An issue cannot be "NEEDS_INFO and also a DUP" — pick the most actionable one (DUP wins, because asking for info is wasted work if the answer is "see #N").

## Draft response rules

- **One paragraph max.** Maintainer pastes this, doesn't edit it down.
- **Cite line numbers / sections of the issue body** so the author knows you read it.
- **No "thanks for filing!"** opening fluff. Skip straight to the substance.
- **End with a concrete ask or a concrete next step** — never an open question with no scaffolding.
- **Polite but not soft** — same stance as `strict-review`'s reviewer voice (calm, polite, doesn't retreat on the standard).

## gh command suggestions

For each verdict, provide one or more `gh` commands the maintainer can paste:

| Verdict | 建議操作 |
|---|---|
| READY | `gh issue edit <N> --add-label <X>`(每個 suggested label 一條) |
| NEEDS_INFO | issue 連結 + 純內文回覆 block(見下);`gh issue edit <N> --add-label needs-info`(若有此 label) |
| DUP | issue 連結 + 純內文回覆 block;`gh issue close <N> --reason "not planned"` |
| CLOSE | issue 連結 + 純內文回覆 block(close reason);`gh issue close <N> --reason "not planned"`(或 `--reason "completed"`) |

**Reply 慣例(NEEDS_INFO / DUP / CLOSE 的回覆部分)**:不用 `gh issue comment --body-file -`——改給 **issue 連結 + 純內文 fenced code block**,maintainer 在 GitHub 網頁直接貼上送出:

```markdown
https://github.com/<owner>/<repo>/issues/<N>

````
<draft response above>
````
```

**Label / close 操作(READY / DUP / CLOSE 的 label 與 close 部分)**:這些沒有純文字等價物,仍用 `gh` 指令草稿(maintainer 自己貼到 terminal 執行)。

**Skill does not run these commands.** Suggest them; maintainer pastes them.
Reply 走「連結 + 純內文 block」慣例;label / close 走 gh 指令——對齊
[`/maigo:address-comments`](https://github.com/Lee-W/maigo/blob/main/commands/address-comments.md) 的新分流。

## Output format

```markdown
## Verdict
READY | NEEDS_INFO | DUP | CLOSE

## Classification
- Tomori's call: <bug | feature | question | documentation | other>
- Existing labels: <list, or "(none)">
- <"Aligned with existing labels" | "Disagreement: ⚠️ <one-line reason>">

## Checklist
- [x] specific title
- [ ] repro steps — missing: 沒寫怎麼觸發
- [—] expected vs actual — skipped (not bug)
- [—] environment info — skipped (not bug)
- [x] no obvious duplicate — Raana grep cleared
- [x] in project scope
- [ ] actionable next step — author 提了想法但沒提怎麼驗收
- [x] follows issue template
- [x] signal not buried

## Suggested labels
- Add: `needs-info`, `question`
- Remove: `bug` (Tomori reclassified as question)

## Draft response
作者的描述提到 X 不如預期,但沒看到怎麼觸發——能補一段 minimal repro 嗎?
具體想看:(1) 哪個指令 / API 呼叫,(2) 跑出來實際 output 與你期待 output 的差。
有的話可以直接進開發;沒有的話我們會先標 needs-info 等補上再回來看。

## Reply
https://github.com/<owner>/<repo>/issues/<N>

````
<draft response above>
````

## Suggested gh commands
```bash
gh issue edit <N> --add-label needs-info --remove-label bug
```

## What's good (optional)
- 作者引用了相關 PR #123 的 commit hash,幫忙縮小了範圍
```

## Re-triage (when issue updated)

When the author replies with more info or a new comment lands:

- Walk through the previous round's `[ ]` items one by one
- New info clearing a `[ ]` → check it off; if all 9 now pass → verdict can upgrade
- Verdict can downgrade too (new comment reveals scope creep → CLOSE)
- "I think they answered it" without quoting the specific reply doesn't clear an item — quote it

## What this skill does NOT cover

- Running the actual gh commands (skill produces drafts, maintainer pastes)
- Code-level review of any attached patches (that's [`strict-review`](https://github.com/Lee-W/maigo/blob/main/skills/strict-review/SKILL.md))
- Reproducing bugs (no Taki in triage flow — if maintainer decides "yes worth pursuing", switch to `/maigo:go`)
- Classifying issues that are clearly spam or off-topic — just close, no checklist needed

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.