Skip to content

feat: add ai-code-review / ai-paper-review caller templates#45

Merged
toshi0806 merged 2 commits into
mainfrom
add-ai-review-callers
Jun 9, 2026
Merged

feat: add ai-code-review / ai-paper-review caller templates#45
toshi0806 merged 2 commits into
mainfrom
add-ai-review-callers

Conversation

@toshi0806

Copy link
Copy Markdown
Member

概要

ワンショット ai-review reusable(#44)を配布するための caller テンプレートを追加。低速な claude-code-action 版(claude-code-review / claude-paper-review)の置き換え。

追加(scripts/callers/

caller mode 投稿 既定モデル
ai-code-review CODE inline claude-sonnet-4-6
ai-paper-review ACADEMIC 単一要約コメント claude-sonnet-4-6
  • .yml(テンプレ)+ .defaultsMODEL=claude-sonnet-4-6 / LANGUAGE=Japanese)+ .pr-note.md
  • secrets は ANTHROPIC_API_KEYGEMINI_API_KEY を両方渡す → model_code でプロバイダ切替可能
  • ai-paper-reviewsingle_comment: true*.bib,*.sty,*.cls 除外
  • README の caller テーブル更新(旧 claude-*-review は「退役予定」と明記)

検証

  • --list-callers に2件追加を確認
  • 展開後 YAML 妥当(uses: ...ai-review.yml@v1、mode=CODE/ACADEMIC、model 置換)
  • dry-run OK

このあと(退役・差し替え)

別 PR/作業で:

  1. テンプレート6リポジトリ等の claude-code-reviewai-code-reviewclaude-paper-reviewai-paper-review に差し替え(配布スクリプトで)
  2. .github 自身: claude-review.ymlai-review-self.yml に一本化
  3. 旧 reusable(claude-code-review.yml / claude-paper-review.yml)削除

Distribution presets for the one-shot ai-review reusable, replacing the
slow claude-code-action callers:
- ai-code-review: CODE mode, inline (default claude-sonnet-4-6)
- ai-paper-review: ACADEMIC mode, single summary comment, excludes
  *.bib/*.sty/*.cls
Both pass anthropic + gemini secrets so the provider can switch via
model_code. README caller table updated; old claude-*-review marked for
retirement.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

全体的に構造は明確で、callerテンプレートの設計は適切です。ただし、いくつか注意すべき点を指摘します。


on:
pull_request:
types: [opened, reopened, ready_for_review] # no synchronize: avoid re-reviewing every push

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [MEDIUM] [MEDIUM] synchronize イベントを意図的に除外していますが、これはPRに新しいコミットがプッシュされた際にレビューが再実行されないことを意味します。コードレビューの文脈では、修正後のコードが再レビューされないため、レビューの実効性が低下する可能性があります。

除外の理由はコメントに記載されていますが(avoid re-reviewing every push)、少なくとも synchronize を含めた上で、差分のみをレビューする設計の方が実用的ではないでしょうか。もし意図的な設計であれば、.pr-note.md にもその旨を明記することを推奨します。

Comment thread scripts/callers/ai-paper-review.yml Outdated
review_mode: ACADEMIC
single_comment: true
language: __LANGUAGE__
exclude_paths: "*.bib,*.sty,*.cls"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ [LOW] [LOW] exclude_paths*.bib,*.sty,*.cls が固定値としてハードコードされています。配布先リポジトリによっては除外したいファイル種別が異なる場合(例: *.tex の特定ディレクトリを除外したい等)も考えられます。

__EXCLUDE_PATHS__ のようなトークンにして .defaults ファイルでデフォルト値を設定する形にすると、配布時のカスタマイズ性が向上します。

@@ -0,0 +1,2 @@
MODEL=claude-sonnet-4-6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ [LOW] [LOW] モデル名 claude-sonnet-4-6 がハードコードされています。将来的にモデルのバージョンが更新された際(例: claude-sonnet-4-7 等)、全配布先のファイルを再配布し直す必要があります。

ai-paper-review.defaults も同様です。バージョン部分を分離するか、latest エイリアスが利用可能であればそちらの使用を検討してください。

types: [opened, reopened, ready_for_review] # no synchronize: avoid re-reviewing every push

concurrency:
group: ai-code-review-${{ github.event.pull_request.number }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ [LOW] [MEDIUM] concurrency.groupgithub.event.pull_request.number を使用していますが、同一リポジトリ内で ai-code-reviewai-paper-review の両方が設定されている場合、グループ名が異なるため問題はありません。しかし、リポジトリ名やワークフロー名を含めない場合、将来的に同一PR番号で別ワークフローとの衝突リスクは低いものの、より明示的に ${{ github.workflow }}-${{ github.event.pull_request.number }} とする方が安全です。

@claude

Address the review's [LOW]: make exclude_paths a __EXCLUDE_PATHS__ token
(default *.bib,*.sty,*.cls in .defaults) so a target repo can customize it
at distribution via --var EXCLUDE_PATHS=...
@toshi0806

Copy link
Copy Markdown
Member Author

AI レビュー指摘への対応(commit e6f33db

ai-code-review(ワンショット、28秒で pass)の4指摘を評価しました。(旧 claude-code-review の 3分24秒 fail は退役対象の遅い版で、本 PR の欠陥ではありません)

⚠️ [MEDIUM] ai-code-review.yml:9 synchronize 除外 → 意図的(維持)

毎push再レビューを避けるコスト判断(既定方針)。コメント記載済み。再レビューは @claude で。

ℹ️ [LOW] ai-paper-review.yml:29 exclude_paths ハードコード → 対応

__EXCLUDE_PATHS__ トークン化(.defaults 既定 *.bib,*.sty,*.cls)。配布時に --var EXCLUDE_PATHS=... でカスタマイズ可能に。

ℹ️ [LOW] *.defaults model ハードコード → 要相談(現状維持)

実際は .defaults既定値で、配布時に --model で上書き可能(真のハードコードではない)。ただし「モデル版更新時に再配布が要る」点は妥当な指摘。

選択肢:

  • A(現状): caller に model_code を持たせる=per-repo でモデル指定可(卒論=opus 等)。版更新は再配布
  • B: caller から model_code を外し reusable 既定(claude-sonnet-4-6)に集約=版更新は reusable 1箇所。per-repo モデルは失う

per-repo モデルの要否次第です。別途ご判断ください。

ℹ️ [MEDIUM/LOW] ai-code-review.yml:12 concurrency group → 問題なし

group 名に caller 名 prefix(ai-code-review-)が入るため ai-paper-review と衝突しません(レビュアー自身も「問題なし」と結論)。


妥当な exclude_paths を対応。model はトレードオフのため方針確認待ち。@claude 再レビュー要求済み。

@toshi0806

Copy link
Copy Markdown
Member Author

@claude exclude_paths を __EXCLUDE_PATHS__ トークン化(defaults 既定 *.bib,*.sty,*.cls、配布時 --var EXCLUDE_PATHS=... で上書き可)しました(commit e6f33db)。この対応が妥当か、他に見落としがないか再レビューしてください。

@claude

claude Bot commented Jun 9, 2026

Copy link
Copy Markdown

Claude finished @toshi0806's task in 1m 34s —— View job


再レビュー結果

  • コンテキスト確認
  • ファイル読み込み(ai-paper-review.yml, .defaults, 配布スクリプト)
  • __EXCLUDE_PATHS__ トークン化の妥当性確認
  • その他見落とし確認
  • レビュー結果投稿

__EXCLUDE_PATHS__ トークン化 — 妥当、問題なし

対応の正しさを 3 点から確認しました。

① テンプレートの YAML 的正確性

exclude_paths: "__EXCLUDE_PATHS__"   # ai-paper-review.yml:29

置換後は exclude_paths: "*.bib,*.sty,*.cls" になります。グロブ文字(*)を含む値をダブルクォートで囲んでいるのは YAML 上正しい書き方で、model_code: __MODEL__(クォートなし)との非対称性も意図的・適切です。

② 未置換トークンの安全ネット

distribute-workflow.sh:146-148 に未置換トークンチェックがあります。

leftover=$(render "$f" | grep -oE '__[A-Za-z0-9_]+__' | ...)
[[ -z "${leftover// /}" ]] || die "...unsubstituted tokens..."

.defaultsEXCLUDE_PATHS=*.bib,*.sty,*.cls が定義されているため、--var EXCLUDE_PATHS= を明示しない限り常に置換され、未置換のまま配布される心配はありません。

③ 空文字列での上書き

--var EXCLUDE_PATHS= を渡すと exclude_paths: "" になり、ai-review.yml の input デフォルト(default: "")と一致します。reusable は問題なく受け取れます。


ℹ️ 軽微な追加提案(任意)

ai-paper-review.pr-note.md に除外パスのカスタマイズ方法を記載

現在の .pr-note.md:

PR への論文自動レビュー(ワンショット・要約コメント)を有効化します。
- 動作には org シークレット ...
- 論文全体に言及するフィードバックのため ...

EXCLUDE_PATHS のカスタマイズが可能であることが PR 本文から読み取れません。以下のような一行を追加すると配布者に優しいです。

- デフォルトで `*.bib,*.sty,*.cls` を除外。変更する場合は `--var EXCLUDE_PATHS=<パターン>` で配布時に指定できます

ただし マスト対応ではありません(情報は .defaults に記載されている)。


前回指摘への最終判断

指摘 状況 判断
synchronize 除外 意図的(コメント済み) ✅ 問題なし
exclude_paths ハードコード __EXCLUDE_PATHS__ トークン化で対応済み ✅ 解決
.defaults モデル名 方針未決定(A: per-repo / B: reusable 集約) ⏳ 方針確認待ち(ブロッカーではない)
concurrency.group caller prefix 付きで衝突なし ✅ 問題なし

全体として LGTM です。 マージの判断はモデル名方針(A/B)を確定してからでも、先行してでも問題ない設計です。

@toshi0806

Copy link
Copy Markdown
Member Author

モデル方針の決定: A(per-repo モデルを維持)

caller に model_code を持たせる現行設計を採用します(変更なし):

  • 既定 claude-sonnet-4-6.defaults
  • 配布時に --model opus 等で per-repo 上書き可(卒論=opus 等の使い分けを維持)
  • トレードオフ(モデル版更新時は再配布が必要)は許容

→ レビュー指摘はすべて評価・対応済み(exclude_paths トークン化、それ以外は意図的/問題なし)。本 PR はマージ可能です。

@toshi0806 toshi0806 merged commit 848af78 into main Jun 9, 2026
@toshi0806 toshi0806 deleted the add-ai-review-callers branch June 9, 2026 01:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant