article-review-panel は何をしますか?
バージョン: 1.0
技術記事のドラフトの隣に、最大3つのレビューファイルを生成します。各ファイルは異なる専門家ペルソナが執筆します:ドメイン専門家(技術的主張の正確性)、編集者(構成、明確さ、読者層、プラットフォーム適合性)、統計家(データが結論を裏付けているか)。各ファイルは共通の「Good / Wrong / Needs more explanation」形式を使用するため、著者はすぐに修正に取り組めます。真実の源泉は、ドラフトのフォルダ内にある生データ、スクリプト、メモであり、ドラフト自体の要約ではありません。
重要なルール(最初にお読みください)
- 何かを書く前にフォルダ全体を読むこと。 ドラフト、そのメモ、初稿コメント、関連記事、ベンチマークスクリプト、生の結果ファイル。ドラフトだけを読んだレビューは、ドラフトがデータを誤って引用しているのを見逃します。
- ドラフトに記載されているすべての数値を検証すること。 生データから再計算するか、未検証とマークします。ファイルと値を引用してください:
results_gc.json: 173 → 166 MB。 - 「Wrong」は間違いを意味し、スタイル上の好みではありません。 フォルダ内に証拠のない主張、データと矛盾する数値、分析が裏付けていない結論、プラットフォームで正しく表示されない文章。好みの問題は「Needs more explanation」に分類します。
- すべての「Wrong」項目には具体的な修正案を添付すること: 代替文言、主張をテストするコマンド、削除提案。
- 各レンズは自分の担当範囲に留まること。 他のファイルを相互参照する(「技術的正確性については
REVIEW-…-JVM.mdを参照」)ことで、知見の重複を避けます。 - 統計レンズ:目視ではなく分析すること。 生データに対して
scripts/paired_stats.pyを実行します。信頼区間と最小検出効果の数値なしに「ノイズ」や「効果なし」と結論づけてはいけません。 - 文字数制限を尊重すること。 ドラフトの文字数をプラットフォーム制限(LinkedIn:3,000文字)と照らし合わせ、追加する各項目に何を削減する必要があるかを示します。
- 機密情報にフラグを立てること。 内部名、チケットID、ホスト名、顧客情報、本番データは、コマンス/法務の承認が必要であることを指摘します。制限されたデータ(メンバー情報、クレーム、健康情報、資格情報)をレビューや検索に含めてはいけません。
事前読み取りテーブル
| ソース | パス | 抽出するもの |
|---|---|---|
| ドラフト | ユーザーが指定したファイル | すべての事実的主張、すべての数値、すべてのコマンド、フック(最初の約210文字)、CTA、文字数 |
| 著者メモ | *.md 関連ファイル(データメモ、初稿コメント、関連記事) | 著者自身の注意点や修正点でドラフトが省略したもの;関連記事間で繰り返されるテキスト |
| ベンチマークスクリプト | *.py、*.sh、フォルダ内のDockerfile | 実行順序(ランダム化?ブロック化?)、各メトリクスが実際に測定するものとサンプリングタイミング |
| 生の結果 | *.json、*.csv、*.log | 再計算する数値;ペアリングのブロックサイズ |
| ドメインレンズガイド | references/domain-lens.md | ドメインチェックリスト;JVMセクションが実際のドメイン例 |
| 編集レンズガイド | references/editorial-lens.md | プラットフォームルール(LinkedInマークダウン、折り返し、制限)と構造チェックリスト |
| 統計レンズガイド | references/statistics-lens.md | 分析レシピと標準的な方法論的フラグ |
| 過去の教訓 | ~/.claude/skill-memory/article-review-panel.md(なければ作成) | 以前の実行からのフィードバック;ドラフト作成前に適用する |
ワークフロー
フェーズ1. 棚卸し
フォルダをリストアップします。ドラフトとすべてのメモ、スクリプト、結果ファイルを読みます。ドラフトの文字数をカウントします。主張リストを作成します:各数値と各事実的主張を、その行とともに記録します。
フェーズ2. レンズの選択
デフォルトでは3つすべてを使用します。ユーザーが指定したレンズのみ実行します(「統計家として振る舞って」)。ドメインレンズでは、ユーザーから分野(「JVM」「Kubernetes」「Postgres」)を取得するか、ドラフトから推測して選択した分野を伝えます。
フェーズ3. 検証
各主張を生データから再計算します。ベンチマークの場合は、以下を実行します:
python3 ${CLAUDE_SKILL_DIR}/scripts/paired_stats.py --file <results.json> --list
python3 ${CLAUDE_SKILL_DIR}/scripts/paired_stats.py --file <results.json> \
--block-size <variants per round> --pair <A>:<B> [--pair ...] --metrics <m1,m2>
定性的な主張(「起動しない」「無視される」)の証拠をフォルダ内で検索します。証拠がない場合は「Wrong:未検証」とし、テストコマンドを添付します。
フェーズ4. レンズごとに1ファイルを作成
ドラフトのフォルダに書き込み、ファイル名はREVIEW-<ドラフトのステム>-<レンズ>.mdとします。レンズはJVM/<ドメイン>、EDITORIAL、STATISTICSとします。以下の出力形式とreferences/内のレンズガイドに従います。
フェーズ5. 採点と報告
クリーンなコンテキストで評価サブエージェントを実行し(evals.md、ドラフト、レビューファイルのみを渡す)、evals.mdを実行します。すべての失敗を修正し、再採点します。その後、ユーザーに報告します:各レンズについて1行で最上位の「Wrong」項目とファイルパスを伝えます。ユーザーから得た新しい教訓は~/.claude/skill-memory/article-review-panel.mdに追加します(最新が先頭;なければ作成します)。
出力形式
# Review of <ドラフトファイル>: <レンズ名>
Reviewer view: <ペルソナ>. <何を何に対してチェックしたか。>
## Verdict
<2~4文:公開可能か、最も強い点、修正必須の数。>
## Good
- **<太字の主張>.** <証拠、ファイルと数値付き。>
## Wrong: <公開前に修正必須 | データから結論が導けない>
### 1. <欠陥の一文説明>
<ドラフトの記述、データが示すこと、なぜ重要か。>
Suggested fix: <代替文言、コマンド、または削除>。
## Needs more explanation
### N. <トピック>
<不足している内容と推奨される一文。>
## Smaller points
- **<ラベル>:** <1~2文>。
統計ファイルでは、ヘッダーの後にHow the analysis was doneセクションを追加し、最後にRecommended re-runsリストを追加します。
実際の例
入力:
act like an experienced JVM engineer and review POST-1-DEFAULT-CDS-EN.md in ~/aot-exploration/linkedin-cds, then an editor, then a statistician
Claudeの手順:
- 投稿、
DADOS-POST.md、初稿コメント、投稿2、bench*.py、results*.jsonを読みます。3,000文字中2,623文字とカウント。 - ドメインレンズ:ZGCが
classes_nocoops.jsaをマッピングすることを確認;AOTCacheに言及したファイルがないため、「JVMが起動しない」という主張はテストコマンド付きでWrongとフラグ。 - 編集レンズ:87文字のフックが折り返し位置より上に収まる;4つのバッククォート付きコマンドはLinkedInでそのまま表示される(Wrong)。
- 統計レンズ:ラウンドループ内で
random.shuffle(order)を確認したため、paired_stats.py --block-size 12を実行。プールされたシフトは−2.1% [−3.2%, −1.5%]であり、「それはノイズだ」はWrong。+2%はペアになっていない中央値を比較したもの。 - 3つの
REVIEW-POST-1-*.mdファイルを作成し、evals.mdで採点し、報告します。
出力(統計ファイル、抜粋):
### 1. "Startup time: −4% to +2%. That's noise." is not what the data say
| Setup | Paired shift | 95% CI | Faster with CDS | Exact p |
|---|---|---|---|---|
| Serial | −69 ms | [−104, −49] | **10/10** | **0.002** |
| **Pooled, 50 pairs** | **−2.1%** | **[−3.2%, −1.5%]** | **39/50** | n/a |
The correct conclusion is "a real but small effect: about 2%, or 20–70 ms",
not "noise".
この実行の完全な3ファイル出力はreferences/examples.mdにまとめられています。
参考ファイル
references/domain-lens.md: ドメイン専門家チェックリスト;JVM/CDS/AOTの実践例。references/editorial-lens.md: 編集者チェックリストとLinkedInプラットフォームルール。references/statistics-lens.md: 分析レシピと標準的な方法論的フラグ。references/examples.md: CDS投稿の実行結果、項目ごと。evals.md: 合格/不合格チェック。配信前にクリーンコンテキストの評価エージェントで実行。~/.claude/skill-memory/article-review-panel.md: 教訓ログ、最新が先頭、このマシン専用(memory.md参照)。ドラフト作成前に読むこと。
スクリプト
scripts/paired_stats.py: 標準ライブラリのみを使用したペアA/B分析(正確Wilcoxon、符号反転、Hodges-Lehmann、ブートストラップ信頼区間、MDE、プールシフト、ドリフトと順序チェック)。--listでバリアントとメトリクスを表示;--self-testで8つのチェックを実行。
このスキルを使用すべきでない場合
- コード、ブランチ、PRのレビュー。diegourban:gh-pr-review、diegourban:branch-review、または/code-reviewを使用してください。
- コードベースの実際の動作確認。diegourban:fact-checkerを使用してください。
- 記事自体の作成や書き直し。直接会話を行ってください;このスキルはレビューのみ行います。
- デッキやスライド。ユーザーが明示的に依頼した場合のみこのスキルで内容をレビューし、作成にはcreate-slide-deckを使用してください。