Crowi PR Received (外部 PR の triage と対応)
SkillDev toolsA skill that standardizes the workflow when an external GitHub PR arrives: triage → classification → response decision → (post-approval) response/merge. Never checks out or runs scripts from others' code—triage is completed solely via remote diffs through gh, and all outward-facing operations such a
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Crowi PR Received (外部 PR の triage と対応) skill
What this skill tells your AI
The instructions your AI receives, as published by crowi/crowi in .claude/skills/crowi-pr-received/SKILL.md and read by ahel’s review.
v2 は sotarok の main 直コミット中心で開発しており、外部 PR は例外イベント。来たときの
対応を場当たりにしないための手順。公開ポリシーの正本は CONTRIBUTING.md(外向き) —
この skill はその maintainer 側の実行手順(内向き)で、両者は整合させて保守する。
起動例
/crowi-pr-received 914
/crowi-pr-received 914 --integrate # 取り込み決定済みの PR の Phase 4 だけ実行
鉄則(すべての分類に先立つ)
- PR をそのまま merge しない。取り込む場合も必ず Phase 4 の隔離経路を通す。
- full diff レビュー完了までは一切のスクリプト実行禁止。
pnpm installだけでなくpnpm test/build/devもリポジトリ内コードを実行する(jest/turbo/biome の config、postinstall 等、実行面は install に限らない)。triage は gh の remote read だけで完結させ、checkout しない。 pnpm-lock.yamlを触る PR は内容が何であれ最大警戒(lockfile poisoning: package.json が無害でも lockfile の resolved URL を悪性 tarball に差し替える定番手口)。.github/workflows/の変更はカテゴリ問わず取り込まない(secrets 窃取の王道経路)。 workflow 変更が必要な提案は内容だけ参考にし、自前で書く。- merge / close / comment / label 等の外向き操作は必ず sotarok の承認後。この skill が自動で行うのは読み取りとドラフト作成まで。
- どの分類でも 1 週間以内に何か返す(放置が最も評判を損なう)。
Phase 1: triage(checkout なし・gh のみ)
gh pr view <n> --json title,author,createdAt,additions,deletions,changedFiles,body
gh pr view <n> --json files --jq '.files[].path'
gh pr diff <n> # remote diff を読む。これが triage の唯一の情報源
# 作者の横断活動(spam シグナルの客観判定)
gh api 'search/issues?q=author:<login>+type:pr&sort=created&order=desc&per_page=10' \
--jq '.items[] | "\(.created_at | .[0:10]) \(.repository_url | sub(".*repos/"; "")) \(.title)"'
spam シグナル: 同一タイトル PR の複数リポジトリ横断撒布 / 事前 issue・相談なし / アカウントの活動が撒布 PR のみ。1 つでも該当したら分類判断に反映(即 spam 断定ではない)。
分類(複合する場合は最も厳しい方を適用):
| 分類 | 判定基準 |
|---|---|
| spam | 横断撒布・実体のない変更・contributor 実績稼ぎ |
| deps / lockfile | package.json / pnpm-lock.yaml / .npmrc の bump・変更 |
| workflows | .github/workflows/ を含む |
| docs / typo | ドキュメント・コメントのみ |
| i18n(新 locale) | 新しい言語の追加(訳文更新は docs 寄りで判断) |
| bugfix | 既存挙動の修正を主張 |
| feature | 新機能・挙動追加 |
| security | 脆弱性修正を主張(または明らかにそれに触れる) |
Phase 2: 分類別チェックリスト
spam
- 対応: close(丁寧に・理由明記)。議論しない。テンプレ「close-spam」。
deps / lockfile
- 対応: 原則 close。依存管理は内部判断で行う(テンプレ「close-deps」)。
- lockfile を触っていたら diff の resolved / integrity 差分を必ず目視(取り込まない場合でも 攻撃かどうかは把握しておく — 攻撃なら GitHub に報告)。
workflows
- workflow 部分は絶対に取り込まない(鉄則 4)。それ以外の部分に価値があれば該当分類で 再評価し、「workflow 変更は受けられない」旨を応答に含める。
docs / typo
- 本物で安価なら取り込み候補(Phase 4 へ)。spam シグナルありなら close。
i18n(新 locale)
- 新 locale は差分の受け入れではなく恒久的な製品コミットメント(以後すべての新規 文字列でその locale が腐っていく + 品質を maintainer が検証できない)。
- 受け入れ条件: 実ユーザー需要の証拠 + その locale の継続メンテ意思の 2 点。
- 既定の対応: conditional accept — テンプレ「conditional-accept-locale」で 「実際に Crowi を使っているか / locale を継続メンテする意思があるか」を問う。 約 2 週間無反応なら丁寧に close(需要とメンテナが揃えば歓迎、と扉は開けておく)。
bugfix
- 不具合の実在をコードから裏取りする(PR の主張を鵜呑みにしない。再現条件・ 根本原因を該当コードで確認)。
- 実在し、かつ当該変更が本質的な解決か判定(症状の隠蔽・場当たりなら不採用)。
- 妥当 → Phase 4 で取り込み。妥当でない/別解が正しい → 参考として受け取り close、 必要なら spec 化して自前修正(その場合の authorship 規律は Phase 4 参照)。
feature
- その機能が Crowi に必要かは sotarok の製品判断 — 判断材料(何を解決するか・ 誰の需要か・保守コスト)を整理して提示し、判断を仰ぐ。勝手に進めない。
- 必要と判断されたら、その実装手段が Crowi にとって良いかを検討。
- 良い → ある程度参考にしつつ取り込み方を設計(Phase 4)。
- 悪い → 機能要望として記録し close(テンプレ「close-feature」。要望自体への感謝を明記)。
security
- 公開 PR での脆弱性修正は公開開示になっている。private 報告(
SECURITY.md/ GitHub Security Advisories)へ誘導し、PR は close。修正は自前で行い、報告者に クレジットを付与する。 - 「セキュリティ修正」を装って backdoor を仕込む手口も既知 — security を名乗る PR ほど diff を厳しく読む。
Phase 3: 推奨 + 応答ドラフト → 承認ゲート
分類・チェック結果・推奨(merge 経路 / conditional accept / close)・**応答文ドラフト
(英語)**をまとめて提示し、sotarok の承認を待つ。承認後に gh pr comment /
gh pr close 等を実行する。文面テンプレは templates.md(この skill ディレクトリ)を
ベースに、PR の具体に合わせて調整する。
Phase 4: 取り込み経路(取り込み決定後のみ)
git fetch origin pull/<n>/head:pr-<n>(fetch のみ。この時点でも checkout しない)。- full diff を再確認(
git diff main...pr-<n>)。lockfile / workflows / config 類の 変更が紛れていないか最終チェック。 - 実行が必要な検証は gw worktree に隔離して行う(main worktree では実行しない):
- 初回 install は
pnpm install --ignore-scriptsから。scripts 実行が必要になったら その必要性を diff で確認してから通常 install。 - 実
.envを渡さない。QA が要る場合は per-run 隔離 DB 機構(crowi-qa §6.4 の QA 専有インスタンス)を使い、共有 dev の秘密・データに触れさせない。
- 初回 install は
- 通常の統合品質ゲート(type-check / test / lint、contract 変更なら check:openapi)を通す。
- authorship 規律:
- 相手のコードを実質そのまま使う → PR を通常 merge するか、cherry-pick で author を保持する(コードの出所を消さない)。
- 参考にしつつ自前で書き直す → close 時に thanks + 参考にした旨を明記し、 commit message でも PR 番号に言及する。
- 「close してコードだけ使う」形に見える取り込みは絶対にしない。
- merge / push は従来どおり sotarok の指示を待つ。
CONTRIBUTING.md との関係
外部向けの期待値(feature は issue 先行 / deps bump は受けない / 新 locale の条件 /
security は private 報告)は CONTRIBUTING.md が正本。この skill の分類・条件を変える
ときは CONTRIBUTING.md も同じ commit で更新する(ドリフトさせない)。
Signals
- GitHub stars
- 1k
- Forks
- 165
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
crowi-pr-received- Source
- github.com/crowi/crowi