コンテンツにスキップ

レビューコンピュート(コホート、軸、決定論的 diff)

PR のレビュータブに映るのは、レビューパイプラインが動作している間はそのライブの 進捗であり、動作が終わればパイプラインが公開した成果物と、そこに付いたアクション です。1 つのタブが 2 つの状態を取るのは、同じものの 2 つの時点だからです。これは 既定のタブではありません。誰かが要求するまで PR にレビューは存在しないため、それを 開くのは AIに質問です。

そのタブの背後で、cc_server はファイルのコホートを構築し、決定論的な軸を実行し、 それらを review_studio.* の RPC オペレーション(cohorts、blastRadius、 cohortImpact、ciSignals、dependencyDiffs、setContractDecision、 approveVisual、compute と、それぞれの watch* 版)として提供します。 pr.reviewStudio という名前が残る永続化済みレイアウトも、この同じレビュータブを 開きます。

レビュータブでは:

  • 統合エージェントは publish_artifact で通常の会話成果物を公開するため、タブは チャットバブルが開くのと同じ成果物ビューアを通してそれをレンダリングします — レビュー専用の成果物システムのコピーは存在しません。
  • 指摘はその横のレールに並び、判定はダッシュボードのヘッダーではなく、成果物の上の 細いバーに乗ります。
  • PR の head がレビューより先に進むと、レビューが古くなったことを示すバナーが 表示されます。

流れについては AI レビューを使う を、 それに対する操作については PR のレビューとマージ を 参照してください。

コホートは、PR の変更ファイルを、内容から導かれたバケット — 意味の上でひとまとまりに なるファイルの集まり — にグループ化し、影響度で順位付けするため、最もリスクの高い グループから読むことになります。コホートは head SHA が変わるたびに再計算され、 まるごと置き換えられます。各コホートは push をまたいでも安定したキーを持つため、 要約とレビューの進捗は rebase を越えて生き残ります。

リポジトリがコードインデックスされていない場合、コホートはパスによるグループ化に フォールバックします。リポジトリをインデックスするには、 設定 → ワークスペース → リポジトリを使います — 各リポジトリの行には コードをインデックスアクションがあり、index_code パイプラインを実行し、その場で 進行状況を報告します。

コードグラフがパースするのは、同梱の文法を持つ言語だけです(Dart、JS/TS、PHP、 Python、Rust、Zig、C/C++、Go、Java、Ruby、C#、Swift、Kotlin、R、Assembly、 MATLAB、Ada)。それ以外の言語のリポジトリは、何度インデックスしても意味論的な コホートを生成できません。

エージェントは set_cohort_summary でコホートの markdown 要約を記録し、 add_review_diagram で構造化されたウォークスルー図を添付できます — 型付きの シーケンス、エンティティリレーション、ステートマシンのオブジェクトであり、 mermaid テキストではありません。すべてのエッジは実際のコードグラフと照合され、 グラフが裏付けられないエッジは、事実として描画されるのではなく未検証としてマーク されます。

コントラクトの軸が diff を取るのは、明示的なスペックファイルだけです。6 つの 既定の名前 — openapi.yaml、openapi.yml、openapi.json、swagger.yaml、 swagger.yml、swagger.json — に加えて、名前に openapi または swagger を 含み、.yaml、.yml、.json のいずれかで終わる変更ファイルにも一致します。 ハンドラーコードから推測されたコントラクトは対象外であり、GraphQL スキーマの diff は 取りません。

各変更は分類され — エンドポイント、パラメーター、スキーマ、レスポンスの追加、削除、 変更 —、重大度を持ちます:breaking(エンドポイントやパラメーターの削除、型の 厳格化、新しい必須パラメーター)、非破壊的(追加のみ)、または情報提供です。却下 された変更はコントラクトゲートを失敗させ、未決定のままの breaking 変更も同じです。 breaking だが承認済みの場合は警告になり、breaking 変更がなければパスします。 **派生(参考)**とマークされた diff は決してゲートしません。

変更の承認または却下は review_studio.setContractDecision です。

PR が Widgetbook アプリのある Flutter リポジトリで UI コンポーネントを変更すると、 コンピュートパスは、PR の base と head のワークツリーでヘッドレスの flutter test ゴールデンパスを使って変更前後のコンポーネントをレンダリングし、そのピクセルを diff します。

changed または removed とマークされたスナップショットは、承認されるまで ビジュアルゲートを保留します。unchanged、added、approved の スナップショットはゲートを解除します。利用不可には 4 つの理由のいずれかがあります: ホストに Flutter SDK がない、リポジトリに Widgetbook アプリがない、ゴールデン テスト可能なユースケースがない、またはゴールデンハーネスのエラーです。

意図した変更の承認は review_studio.approveVisual です。

軸 駆動するもの
正確性 レビュアーエージェント(トークン)
セキュリティ レビュアーエージェント(トークン)
テストギャップ レビュアーエージェント(トークン)
ビジュアル 決定論的(ゴールデンハーネス)
API コントラクト 決定論的(スペック diff)

3 つのトークン軸は、リードエージェントが finalize_review を呼び出したときに記録 されます。2 つの決定論的な軸は、コンピュートパスによって記録されます。

各軸は次のいずれかを報告します:

状態 意味
Pass 実行され、ブロックするものは見つからなかった
Warn 実行され、ブロックしない懸念がある
Fail 実行され、ブロックする問題が見つかった
Partial 実行されたが完了できず、結果は不完全
Unavailable まったく実行できなかった

ゲート対象の軸を解除できるのは pass と warn だけです。Partial と unavailable は fail とは意図的に区別されており、どちらもゲートを解除しません。

軸は Ship、Hold、Block に集約され、軸は判定をより厳しくすることしか できません — 決して格下げされることはありません。失敗したゲート対象の軸は Block を強制し、partial または unavailable の軸は少なくとも Hold を 強制します。つまり、ブロックする軸が実行できなかった場合、その軸は判定を引き留め ます。証拠がないことは、決してゲートをグリーンにしません。

レビュータブに表示される判定は、finalize_review が投稿した判定です。