pr-triage

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

PRトリアージ

PR变更分诊

PRの変更内容を分析し、後続のコードレビューフェーズに必要な情報を構造化して出力するスキルです。 軽量モデル(Haiku)での実行を想定しており、CI環境でのコスト最適化に寄与します。
本技能用于分析PR的变更内容,结构化输出后续代码评审阶段所需的信息。 预计使用轻量模型(Haiku)运行,有助于优化CI环境中的成本。

手順

步骤

  1. gh pr view <PR番号> --json title,body,headRefName,baseRefName,changedFiles
    でPR情報を取得
  2. gh pr diff <PR番号> --name-only
    で変更ファイル一覧を取得
  3. 差分の取得(changedFilesが15以上の場合、手順3はスキップしてファイル名とPR説明のみで分析する):
    • changedFilesが15未満の場合のみ
      gh pr diff <PR番号>
      でコード差分を取得
    • 表層チェックが必要なファイル(.ts, .js, .tsx, .jsx)が多い場合は個別に
      gh pr diff <PR番号> -- <file>
      で取得
  4. .pr-review-state.json
    が存在するか確認する(前回レビュー状態)
  5. 以下の分析を行う:
    • 変更ファイルのカテゴリ分類(added/modified/deleted)
    • 使用言語・フレームワークの検出
    • 変更カテゴリの判定(認可変更、DB変更、RLS変更、API変更、テスト変更、設定変更、スキル変更)
    • 必要なリファレンスファイルの判定
    • Minor/Suggestionレベルの表層的問題の検出(インクリメンタルモード時は変更ファイルのみ)
    • 差分の要約(200文字以内)
    • レビュー時に注目すべきポイント
  6. 分析結果を
    .pr-triage.json
    ファイルに出力する
  1. 使用
    gh pr view <PR编号> --json title,body,headRefName,baseRefName,changedFiles
    获取PR信息
  2. 使用
    gh pr diff <PR编号> --name-only
    获取变更文件列表
  3. 获取差分(当changedFiles数量≥15时,跳过步骤3,仅通过文件名和PR说明进行分析):
    • 仅当changedFiles数量<15时,使用
      gh pr diff <PR编号>
      获取代码差分
    • 若需要表层检查的文件(.ts, .js, .tsx, .jsx)较多,则单独使用
      gh pr diff <PR编号> -- <file>
      获取
  4. 确认是否存在
    .pr-review-state.json
    (上次评审状态)
  5. 执行以下分析:
    • 变更文件的类别划分(added/modified/deleted)
    • 检测使用的语言与框架
    • 判定变更类别(权限变更、DB变更、RLS变更、API变更、测试变更、配置变更、技能变更)
    • 判定所需的参考文件
    • 检测Minor/Suggestion级别的表层问题(增量模式下仅检查变更文件)
    • 差分摘要(200字以内)
    • 评审时的重点关注项
  6. 将分析结果输出至
    .pr-triage.json
    文件

インクリメンタルモード(.pr-review-state.json が存在する場合)

增量模式(存在
.pr-review-state.json
时)

前回のレビュー状態を活用してチェック範囲を最適化する:
  1. .pr-review-state.json
    last_reviewed_commit
    を取得する
  2. git diff <last_reviewed_commit>..HEAD --name-only
    で前回レビュー以降に変更されたファイルを特定する
  3. 変更のないファイル
    surface_issues
    は前回の状態からそのまま引き継ぐ(
    "carried_over": true
    を付与)。再チェックしない。
  4. 変更があったファイルのみ表層チェックを実行する
  5. 前回の
    surface_issues
    review_comments
    のうち、該当箇所が修正されたものを
    resolved_issues
    に含める
  6. 出力の
    .pr-triage.json
    "incremental": true
    "base_commit"
    "changed_since_last_review"
    "unchanged_since_last_review"
    "resolved_issues"
    フィールドを追加する
resolved_issues
のフォーマット:
json
{
  "comment_id": 12345678,
  "file": "<ファイルパス>",
  "line": 42,
  "issue": "<元の問題の説明>",
  "resolution": "fixed"
}
.pr-review-state.json
が存在しない場合は、通常のフルトリアージを実行する。
.pr-review-state.json
が不正な形式(JSONパースエラー等)の場合は、警告を出力してフルトリアージを実行する。破損した状態ファイルに基づいてインクリメンタルモードを実行してはならない。
利用上次的评审状态优化检查范围:
  1. 获取
    .pr-review-state.json
    中的
    last_reviewed_commit
  2. 使用
    git diff <last_reviewed_commit>..HEAD --name-only
    确定上次评审后变更的文件
  3. 未变更文件
    surface_issues
    直接沿用上次状态(添加
    "carried_over": true
    标记),不再重新检查
  4. 仅对已变更文件执行表层检查
  5. 将上次
    surface_issues
    review_comments
    中已修复的问题纳入
    resolved_issues
  6. 在输出的
    .pr-triage.json
    中添加
    "incremental": true
    "base_commit"
    "changed_since_last_review"
    "unchanged_since_last_review"
    "resolved_issues"
    字段
resolved_issues
格式:
json
{
  "comment_id": 12345678,
  "file": "<文件路径>",
  "line": 42,
  "issue": "<原问题描述>",
  "resolution": "fixed"
}
若不存在
.pr-review-state.json
,则执行常规全量分诊。 若
.pr-review-state.json
格式异常(如JSON解析错误),则输出警告并执行全量分诊。禁止基于损坏的状态文件执行增量模式。

必要なリファレンスの判定基準

必要参考文件的判定标准

以下の条件に該当する場合のみ、対応するリファレンスを
required_references
に含める:
  • TypeScript/JavaScript ファイルの変更あり →
    typescript-best-practices.md
  • 認証・認可に関わるコード変更あり(auth, permission, role, session, token等のキーワード) →
    authorization-review-general.md
  • PostgreSQL RLS に関わる変更あり(RLS, row level security, policy等のキーワード) →
    authorization-review-postgres-rls.md
  • SKILL.md ファイルの変更あり →
    skill-review.md
  • CI環境でのGitHub投稿が必要 →
    github-pr-review-actions.md
    (常に含める)
仅当满足以下条件时,将对应参考文件纳入
required_references
  • 存在TypeScript/JavaScript文件变更 →
    typescript-best-practices.md
  • 存在与认证/授权相关的代码变更(包含auth, permission, role, session, token等关键字) →
    authorization-review-general.md
  • 存在与PostgreSQL RLS相关的变更(包含RLS, row level security, policy等关键字) →
    authorization-review-postgres-rls.md
  • 存在SKILL.md文件变更 →
    skill-review.md
  • 需要在CI环境中向GitHub提交内容 →
    github-pr-review-actions.md
    (始终包含)

表層チェック項目(Minor/Suggestion)

表层检查项目(Minor/Suggestion)

差分を確認し、以下の問題を検出する(該当するもののみ):
  • any
    型の使用(TypeScript)
  • var
    キーワードの使用(TypeScript/JavaScript)
  • 空のインターフェイス定義
  • マジックナンバーの使用
  • 命名規則違反(camelCase/PascalCase/UPPER_CASE)
  • テストの未追加(新規ファイルがあるのにテストファイルがない)
检查差分,检测以下问题(仅列出符合的项):
  • 使用
    any
    类型(TypeScript)
  • 使用
    var
    关键字(TypeScript/JavaScript)
  • 空接口定义
  • 使用魔法数字
  • 命名规则违反(camelCase/PascalCase/UPPER_CASE)
  • 未添加测试(新增文件但无对应测试文件)

出力フォーマット

输出格式

.pr-triage.json
に以下のJSON構造で出力すること:
json
{
  "pr_number": 123,
  "incremental": false,
  "base_commit": "<前回レビュー時のコミットSHA(インクリメンタル時のみ)>",
  "summary": "<変更の概要(1-2文)>",
  "files": {
    "added": ["<追加ファイルパス>"],
    "modified": ["<変更ファイルパス>"],
    "deleted": ["<削除ファイルパス>"]
  },
  "changed_since_last_review": ["<前回から変更があったファイル(インクリメンタル時のみ)>"],
  "unchanged_since_last_review": ["<前回から変更がないファイル(インクリメンタル時のみ)>"],
  "languages": ["<検出された言語>"],
  "frameworks": ["<検出されたフレームワーク>"],
  "change_categories": {
    "has_auth_changes": false,
    "has_db_changes": false,
    "has_rls_changes": false,
    "has_api_changes": false,
    "has_test_changes": false,
    "has_config_changes": true,
    "has_skill_changes": true
  },
  "required_references": ["<必要なリファレンスファイル名>"],
  "surface_issues": [
    {
      "severity": "Minor|Suggestion",
      "file": "<ファイルパス>",
      "line": 15,
      "issue": "<問題の説明>",
      "suggestion": "<改善案>",
      "carried_over": true
    }
  ],
  "resolved_issues": [
    {
      "comment_id": 12345678,
      "file": "<ファイルパス>",
      "line": 42,
      "issue": "<元の問題の説明>",
      "resolution": "fixed"
    }
  ],
  "diff_summary": "<差分の要約(200文字以内)>",
  "estimated_complexity": "low|medium|high",
  "focus_areas": ["<レビュー時の注目ポイント>"]
}
重要:
  • テキスト出力は最小限にし、
    .pr-triage.json
    の出力に集中してください。
需按照以下JSON结构输出至
.pr-triage.json
json
{
  "pr_number": 123,
  "incremental": false,
  "base_commit": "<上次评审时的提交SHA(仅增量模式)>",
  "summary": "<变更概要(1-2句话)>",
  "files": {
    "added": ["<新增文件路径>"],
    "modified": ["<变更文件路径>"],
    "deleted": ["<删除文件路径>"]
  },
  "changed_since_last_review": ["<上次评审后变更的文件(仅增量模式)>"],
  "unchanged_since_last_review": ["<上次评审后未变更的文件(仅增量模式)>"],
  "languages": ["<检测到的语言>"],
  "frameworks": ["<检测到的框架>"],
  "change_categories": {
    "has_auth_changes": false,
    "has_db_changes": false,
    "has_rls_changes": false,
    "has_api_changes": false,
    "has_test_changes": false,
    "has_config_changes": true,
    "has_skill_changes": true
  },
  "required_references": ["<所需参考文件名>"],
  "surface_issues": [
    {
      "severity": "Minor|Suggestion",
      "file": "<文件路径>",
      "line": 15,
      "issue": "<问题描述>",
      "suggestion": "<改进方案>",
      "carried_over": true
    }
  ],
  "resolved_issues": [
    {
      "comment_id": 12345678,
      "file": "<文件路径>",
      "line": 42,
      "issue": "<原问题描述>",
      "resolution": "fixed"
    }
  ],
  "diff_summary": "<差分摘要(200字以内)>",
  "estimated_complexity": "low|medium|high",
  "focus_areas": ["<评审时的重点关注项>"]
}
注意:
  • 尽量减少文本输出,专注于输出
    .pr-triage.json