安定インターフェース(CLI / GitHub Actions)
River Review は OSS として成長中であり、内部実装は変更される可能性があります。一方で、利用者が安心して導入できるように 安定した契約(stable contract) を定義します。
破壊的変更(breaking change)は原則として major version bump が必要です。ただし何を破壊的変更と見なすかは、後述のコンポーネント安定性ラベルと Stable Contract の列挙で決まります。Beta のサーフェスなら、Stable Contract に載っていない要素の変更は minor 以下で入ります。
安定した契約(Stable Contract)
次の要素は「外部に公開されたインターフェース」として扱います。
- スキル定義(
schemas/skill.schema.json)と、その意味論(severity/confidence など) - GitHub Actions(
runners/github-action/action.yml)のinputs / outputsと動作 - CLI(
river/river-review)のコマンド/オプション - CLI の gate 判定用の終了コード(
--fail-on/--warn-on/--gateが返す0/1/2/3) - PR コメントの idempotent 更新方式(marker)
終了コードは用途で粒度を分けています。CI がゲート結果として読む上記の値だけを Stable Contract に含めます。usage error(引数の解釈失敗)の終了コードは含めず、CLI サーフェス全体のラベルである Beta に従います。裁定の根拠は後述の「終了コードの安定性」にあります。
コンポーネント安定性ラベル
各サーフェスの現在の安定性レベルを示します。
| ラベル | 定義 |
|---|---|
| Stable | 破壊的変更にはメジャーバンプが必要。本番利用推奨 |
| Beta | マイナーバージョンで API が変わる可能性がある。非推奨化は事前通知 |
| Experimental | 予告なく変更・削除される可能性がある。評価目的での利用を推奨 |
| サーフェス | ラベル | 備考 |
|---|---|---|
| GitHub Action | Beta | v0.x のため breaking changes の可能性あり |
CLI (river コマンド) | Beta | サーフェス全体は Beta。Stable Contract に列挙した要素のみ Stable 扱い |
Skill Schema (schemas/skill.schema.json) | Beta | CI バリデーション済み、フィールド拡張の可能性あり |
Node API (runners/node-api/) | Experimental | private: true、npm 未公開 |
| Agent Skills bridge | Experimental | v0.9.0 で追加、成熟途上 |
| Riverbed Memory | Experimental | 設計フェーズ — 安定化は未定。利用前に最新の Issue を確認してください |
CLI(river)リファレンス(最小)
コマンド
river run <path>: ローカルでレビューを実行するriver doctor <path>: 設定/前提を診断し、ヒントを出すriver skills <path>: skill ベースのレビューを実行する(サブコマンドriver skills import/river skills export/river skills listで Agent Skills と相互変換)river review plan: 上流アーティファクトを解決して Review Artifact を出力する(仕様)river runs list: 保存済みレビュー実行(.river/runs/)の一覧を表示するriver runs diff <id1> <id2> [<id3>...]: 保存済みレビュー実行の差分を表示する(3 件以上指定すると振動検知も行う)river runs summary: 保存済みレビュー実行の集計を表示するriver suppression add: Riverbed Memory の suppression エントリを作成するriver eval: レビュー fixtures の評価を実行する
主なオプション
--phase <upstream|midstream|downstream>: レビューフェーズ(デフォルト:midstream)--planner <off|order|prune>: Planner モード(デフォルト:off)--dry-run: 外部 API を呼ばずに実行する--offline(別名--rules-only): API キーが設定されていても AI を呼ばず、決定論的な機械的チェックのみでレビューする(CI 不可用時に Auto-approve 判定をローカル再現する用途)--debug: デバッグ情報を出す--explain: 採用された skill / gate / config tier を人間可読で出す(stderr)--estimate: コスト見積もりのみ(レビューは実行しない)--max-cost <usd>: 見積もりが上限を超える場合に中断する--output <text|markdown|json|yaml|html>: 出力形式(GitHub Actions はmarkdownを使用、yamlは YAML 出力 を参照、htmlは自己完結型 HTML レポートで HTML 出力 を参照)--context <list>: 利用可能なコンテキスト(例:diff,fullFile)--dependency <list>: 利用可能な依存(例:code_search,test_runner)--baseline <path>: 過去のレビュー JSON(findings 配列)と比較して回帰を表示する--save: レビュー実行をプロジェクトの result store(.river/runs/)に保存する--reviewers <roles|auto>: レビュアーロールをカンマ区切りで指定、またはautoでシグナルに基づく自動選択(詳細: runner-cli-reference.md の--reviewersセクション)
終了コード
findings に基づく exit code は --fail-on / --warn-on を指定した場合のみ 0 以外になります。--fail-on を指定しない場合、findings があっても正常終了は 0 です。 なお usage error と実行エラーは、--fail-on の指定と無関係に 1 で終了します(#1709。下表の「入力不正」行に対応)。usage error には未知オプション・余剰 positional・オプション値の欠落や不正値が含まれます。
| exit code | 条件 | 説明 |
|---|---|---|
0 | --fail-on 未指定 / --advisory-only / max severity < warn rank | pass(常に 0) |
1 | --fail-on <sev> 指定かつ max severity ≥ fail rank | fail(ブロック閾値以上) |
2 | --warn-on <sev> 指定かつ max severity ≥ warn rank かつ fail rank 未満 | warn(warn 閾値以上、fail 未満) |
1 | 入力不正 / git 差分取得失敗 / スキル検証失敗 / --max-cost 超過など | エラー終了 |
severity の rank(低→高): info=0 / minor=1 / major=2 / critical=3
自己修正ループでの停止条件・発散ガード・振動検知を含む詳細な利用契約は ループ収束コントラクト を参照してください。
終了コードの安定性
終了コードは用途で 2 段階に分けて宣言します。
| 用途 | ラベル | 変更に必要な bump |
|---|---|---|
gate 判定(--fail-on / --warn-on / --gate が返す 0 / 1 / 2 / 3) | Stable | major |
| usage error(引数の解釈失敗) | Beta | CLI サーフェス全体のラベルに従う(minor で可) |
gate 判定用の終了コードは CI のジョブ成否へ直結します。閾値の意味が黙って変わると、利用者は失敗を検知できません。そのため Stable Contract に含めます。変更には major version bump が必要です。なお --gate の 3 は ESCALATE(人間の承認が必要)を表します。river review 系では、ハンドラ層の設定エラーにも 3 を割り当てています(river review plan 仕様)。
usage error の終了コードはレビュー結果を含みません。表すのは「引数が受理されなかった」ことだけです。誤用の検出漏れを塞ぐたびに検出層と粒度が動きます。そのため CLI サーフェス全体の Beta ラベルへ従わせます。実例として #1709 では、引数エラーを exit 0 から exit 1 へ横断統一しました。粒度はさらに、parse 層の 1 とハンドラ層の設定エラーの 3 へ整理されています。この一連の変更は v1.71.0(#1735)と v1.72.0(#1746)という minor リリースで入りました。
GitHub Actions(river-review)リファレンス(最小)
inputs(安定)
定義は runners/github-action/action.yml を参照してください。
phase:upstream|midstream|downstreamplanner:off|order|prunetarget: レビュー対象のリポジトリパスcomment: PR コメントを投稿するか(pull_requestのみ)dry_run: 外部 API を呼ばずに実行するかdebug: デバッグ情報を出すかestimate: コスト見積もりのみ実行するかmax_cost: 見積もりが上限を超える場合に中断するnode_version: Action 実行に用いる Node.js バージョン
outputs(安定)
comment_path: Actions runner の一時領域に出力した Markdown のパス(PR コメント投稿で使用)
PR コメントの契約(idempotent)
<!-- river-review -->marker を含むコメントを 更新 し、なければ新規作成する。- コメント本文が長すぎる場合は末尾を切り詰める(上限あり)。
バージョニング(破壊的変更の扱い)
次を変更する場合は、破壊的変更として major version bump を必要とします。
riverCLI のオプション名/意味の変更・削除- gate 判定用の終了コード(
--fail-on/--warn-on/--gateが返す0/1/2/3)の意味変更 - Action inputs / outputs の変更・削除
- スキルスキーマの必須フィールド変更、既存フィールドの意味変更
次は破壊的変更として扱いません。minor もしくは patch のリリースで入ります。
- usage error(引数の解釈失敗)の終了コードの変更(CLI サーフェス全体の Beta ラベルに従う)
Action は安定動作のため、@main ではなく リリースタグへピン留めすることを推奨します(例: @v1.22.0)。
スキーマのバージョニングポリシー
schemas/ 配下の JSON Schema は version フィールド(例: review-artifact.schema.json の "version": { "const": "1" })でバージョンを表します。
- 後方互換な追加(任意フィールドの追加、
enum値の追加など)は同一スキーマファイル内で行う。 - 破壊的変更(必須フィールド追加、既存フィールドの型/意味変更、
enum値の削除など)は次のいずれかの方針で行う。- 新しいスキーマファイルとして作成する(例:
review-artifact.v2.schema.json)。version: const "2"を割り当て、旧スキーマは最低 1 メジャーバージョン以上残置する。 - 既存スキーマで
oneOfを用いて新旧バージョンを共存させる。versionフィールドの値で分岐させ、消費者が単一の$refで複数バージョンを処理できるようにする。
- 新しいスキーマファイルとして作成する(例:
新スキーマを追加した場合は、対応するドキュメント(pages/reference/_meta.json 等)も更新してください。