triage-frontend-issues について
triage-frontend-issues は、Sentry の sentry/javascript プロジェクト向けの課題トリアージスキルです。対応不要なノイズを慎重に判定し、アーカイブ前に承認を求め、不確実なものや実際の不具合の可能性があるものはスキップします。
主な機能
- 01対象を sentry/javascript に限定
- 02アーカイブ・スキップ・人による確認に分類
- 03アーカイブ前に承認を要求
- 04再発時までのアーカイブと理由の指定
- 05担当済み・未解決以外の課題をスキップ
活用シーン
- 01未解決のフロントエンド課題キューの確認
- 02個別の JavaScript 課題のアーカイブ可否を評価
- 03ノイズ候補と人の確認が必要な課題を区別
MCP 対応
認証済みの mcp.sentry.dev の Sentry MCP サーバーを使って課題を検索・取得し、承認済みの課題を更新します。必要なツールは search_issues、get_sentry_resource、update_issue です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ getsentry/ skills --skill triage-frontend-issuesインストール後、Claude Code で/triage-frontend-issuesを入力して読み込まれたか確認します。
同梱ファイルreferences/archive-criteria.mdSPEC.md
詳細
フロントエンドのイシューをトリアージする
sentry/javascript のイシューキューから、対応不要なノイズをアーカイブします。アーカイブのみを行い、必ず untilEscalating を使用し、必ず理由を記載してください。コード内で対応可能に見えるイシュー、または自信を持って分類できないイシューはスキップしてください。
厳守事項
以下のルールはほかの指示より優先されます。緩和しないでください。
- プロジェクトの範囲。
organizationSlug=sentry、プロジェクトスラッグjavascriptのみを操作してください。別のプロジェクトのトリアージを求められた場合は、停止してユーザーに確認してください。 - アーカイブのみ。 許可されているステータス変更は
status=ignoredのみです。解決、解決の取り消し、割り当て、削除、またはステータス以外のフィールドの一括更新は絶対に行わないでください。 - 必ず
untilEscalatingを使用。ignoreMode=untilEscalatingを使用してください。forever、forDuration、untilOccurrenceCount、untilUserCountは絶対に使用しないでください。別のモードを求められた場合は停止し、ユーザー自身でそのイシューをアーカイブするよう伝えてください。このスキルでは、エスカレーションしないアーカイブは実行しません。 - 必ず
reasonを含める。reasonは、references/archive-criteria.mdのカテゴリ名を含む、簡潔で事実に基づいた文にしてください(例:「サードパーティライブラリのノイズ — echarts の内部処理。コード内で対応不可」)。 - 未解決キュー以外のイシューには絶対に触れない。
statusがresolved、ignored、またはreprocessingのものはスキップしてください。 - 確認なしでアーカイブしない。 完全な計画を作成してユーザーに提示し、明示的な承認を待ってから
update_issueを呼び出してください。1回の承認が適用されるのは、表示した計画のみです。新しいバッチには新たな承認が必要です。 - 判断に迷ったらスキップ。 自分たちのコードに実際のバグがある可能性が十分に考えられるイシューは、アーカイブしないでください。計画では
needs-humanとして提示し、1行のメモを添えてください。
前提条件
mcp.sentry.dev経由で Sentry MCP が認証済みであること。必要なツール:search_issues、get_sentry_resource、update_issue。update_issueが利用できない場合は停止し、Sentry MCP サーバーの認証をユーザーに依頼してください。
入力
$ARGUMENTS は次のいずれかです。
| 入力形式 | 意味 |
|---|---|
Sentry のイシュー URL(https://sentry.sentry.io/issues/JAVASCRIPT-…) | その単一のイシューをトリアージします。 |
イシューの短縮 ID(JAVASCRIPT-…) | その単一のイシューをトリアージします。 |
Sentry のイシュークエリ(コロンを含む。例:is:unresolved firstSeen:-24h) | 検索クエリとして使用します。 |
| 空 | デフォルトのトリアージキューを使用します:is:unresolved is:unassigned firstSeen:-7d。並び順は new、上限は 50 です。 |
$ARGUMENTS が曖昧な場合は、検索する前にユーザーに確認してください。
ワークフロー
1. キューを読み込む
単一イシューが入力された場合:
get_sentry_resource(url=<issue-url>)またはget_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=<shortId>)を呼び出します。Projectが javascript フロントエンドプロジェクトであることを確認してください。そうでない場合は停止します。
クエリまたはデフォルトが入力された場合:
search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=<query>, sort='new', limit=50)を呼び出します。- 続いて、各結果に対して並列に
get_sentry_resourceを呼び出し、culprit、substatus、assignee、スタックフレームのヒントを取得します(検索結果には一部のフィールドが含まれていません)。
イシューについて、次のいずれかに該当する場合は直ちにスキップしてください。
statusがunresolvedではない(すでにアーカイブ済み、解決済み、または再処理中)。assignedToに人が設定されている(すでに担当者がいます)。assignedToにfrontend/issues以外のチームが設定されており、イシューがそのチーム固有のものに見える(担当チームにトリアージを任せてください)。
2. 各課題を分類する
カテゴリの分類体系、判定のヒューリスティクス、例については、references/archive-criteria.md を参照してください。候補となる各課題について、次のいずれかを判定します。
| 判定 | 意味 |
|---|---|
archive | 文書化されたカテゴリに該当します。理由にカテゴリ名を含めてください。 |
skip | コードに実際のバグがある可能性があるか、証拠が不十分です。アーカイブしないでください。 |
needs-human | ノイズのように見えるものの、カテゴリに明確に当てはまらない場合、または件数が異常に多い場合です。ユーザーの確認用にフラグを付けてください。 |
評価では、次のシグナルをこの順に重視してください。
- Sentry SDK 以外で最上位のフレーム。 アプリ内で最上位のフレームが
node_modules/、chrome-extension://、サードパーティのホスト、または<unknown>にある場合、アーカイブすべき有力なシグナルです。 - タイトルのパターン。 タイトルだけで判別できるアーカイブ対象は多数あります(基準のリファレンスを参照)。
- 件数の多さだけで除外しないでください。 件数が多い(イベント数 10k 以上、ユーザー数が数千人)課題でも、最上位のフレームがサードパーティのものであればアーカイブに値する場合があります。件数の多さだけでアーカイブを強制することもありません。
- 発生時期。 30 日以上前の単発イベントで、再発がないものは通常ノイズです。
- 顧客組織の分布。 イベントの発生元が 1 つの顧客サブドメインのみの場合(
customerDomain.subdomainタグを確認)、顧客環境に起因するノイズである可能性が高いです。
3. 計画を作成する
ユーザーには、次の正確な形式で Markdown テーブルを 1 つ出力します。
## Triage plan — sentry/javascript (<N> candidates)
| # | Issue | Title | Volume | Decision | Category | Reason |
|---|-------|-------|--------|----------|----------|--------|
| 1 | [JAVASCRIPT-XXXX](url) | TypeError: ... | 12e/3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |
| 2 | [JAVASCRIPT-YYYY](url) | <unknown> | 4945e/123u | needs-human | — | High volume, no title — please review before archiving. |
| 3 | [JAVASCRIPT-ZZZZ](url) | ZodError: ... | 360e/132u | skip | — | Schema validation failure in our code; looks actionable. |
続けて件数を N archive / M skip / K needs-human の形式でまとめます。最後に次の内容を出力します。
Reply `apply` to archive the N issues marked `archive`, `apply N,M,...` to archive a subset, or `cancel` to take no action.
4. 承認後に適用する
ユーザーが apply(または apply <subset>)と返信した場合:
承認されたセットの各課題について、次を呼び出します。
update_issue(
organizationSlug='sentry',
issueId=<shortId>,
status='ignored',
ignoreMode='untilEscalating',
reason=<category-tagged reason from the plan>,
)
これらを並列ではなく、順番に実行します。呼び出しに失敗した場合は、失敗を記録して残りの課題の処理を続け、手順 5 で失敗した ID を報告してください。
ユーザーが cancel と返信した場合、または計画の変更を依頼した場合は、update_issue を呼び出さないでください。「行 2 を skip に変更して」のように編集を依頼された場合は、計画を作り直して再確認してください。
5. 報告する
適用後、次を出力します。
## Triage report
- Archived: N
- Skipped: M
- Needs human review: K
- Failures: F (with issue IDs)
<details><summary>Archived issues</summary>
- JAVASCRIPT-XXXX — <reason>
- ...
</details>
復旧
update_issueの呼び出しが 1 件失敗した場合は、失敗を記録して残りの課題の処理を続けてください。最後に失敗した ID を報告してください。- アーカイブが誤っていたことにユーザーが気づいた場合、ユーザーは Sentry で自分でアーカイブを解除できます。このスキルが自動的に自らの操作を取り消すことはありません。
- ユーザーが途中で「この修正を加えて計画を作り直して」と依頼した場合は、以前の計画が引き続き適用されると見なさず、最初から計画を作り直してください。
理由の例(この文体を使用)
サードパーティライブラリのノイズ — echarts のツールチップ。コード内で対処できる問題ではありません。ブラウザー API の権限に関するノイズ — Clipboard の writeText がユーザーエージェントに拒否されました。顧客環境のプロキシによる干渉 — 200 のレスポンスがエラーとして扱われました(企業プロキシからの HTML ボディ)。一時的なバックエンド 5xx — /api/0/organizations/.../events-meta/ の InternalServerError。バックエンドの一時的な障害です。テスト/合成イベント — スモークテストまたはセキュリティプローブであり、本番トラフィックではありません。プロジェクト違い — Prisma/Python のエラーがフロントエンドプロジェクトに誤って振り分けられています。単発の偶発事象 — イベント 1 件、ユーザー 1 人。30 日以上再発していません。ブラウザー拡張機能のノイズ — 拡張機能が注入したグローバル変数(DarkReader/WeixinJSBridge)に関する ReferenceError。