Branch-fix verdict パイプライン

コントリビューターが提供したブランチフィックス Docker イメージの Contract v1 verdict をキャプチャし、 デプロイ済みの元の verdict と並べてサイドバイサイド比較を提供する workflow_dispatch GitHub Actions ワークフロー。

ワークフローは .github/workflows/branch-fix-verdict.yml に配置されている。

5 行の呼び出し例

gh workflow run branch-fix-verdict.yml \
  --repo aletheia-works/vivarium \
  -f slug=bash-local-shadows-exit \
  -f branch_image=ghcr.io/contributor/bash-fix:branch-x \
  -f expected_verdict=unreproduced

実行ページには Markdown 比較サマリーがレンダリングされ、キャプチャした verdict は branch-fix-verdict-<slug>-<run_id> という名前のワークフローアーティファクトとして ダウンロードまたはプログラム的なフェッチ用にアップロードされる。

インプット

インプット必須デフォルト目的
slug文字列src/layer2_docker/ 以下のレシピスラッグ(例: bash-local-shadows-exit)。スラッグはワークフローのチェックアウト時にツリー内に存在しなければならない。タイポがあればワークフローは早期に失敗する。
branch_image文字列検証する Docker イメージ参照(例: ghcr.io/contributor/foo-fix:branch-x)。ランナーが認証なしにプルできなければならない。プライベートレジストリサポートは追加作業。
expected_verdict選択肢(reproduced|unreproducedunreproducedbranch-fix イメージに対してコントリビューターが期待する verdict。unreproduced(バグが再現されない)が典型的な「修正が機能している」答えだ。ワークフローの最終ステップはキャプチャした verdict がこれと一致するかアサートし、一致しない場合はゼロ以外で終了する。
original_image文字列(空)オプションのオーバーライド。デフォルトではワークフローは GitHub Pages からデプロイ済みの元の verdict をフェッチする——イメージを再実行するより安価で、ギャラリーが提供するものと同一だ。original_image を指定すると代わりにそのイメージから再キャプチャする。特定のタグへの比較をアンカーしたいときやプライベートフォークのテストに有用。

Verdict セマンティクス(リマインダー)

reproduced はこの実行でアップストリームバグが再現されたことを意味する。 unreproduced は再現されないことを意味する。 完全な説明は Contract v1: Verdict セマンティクス を参照。

元の verdict が reproduced のレシピに対して、成功した branch-fix は verdict を unreproduced に反転させることが期待される。元の verdict がすでに unreproduced (アップストリームの修正検知イベントを追跡するセンチネルページ)のレシピに対しては、 コントリビューターはこのワークフローをほとんど必要としない。

アーティファクト

ワークフローは 30 日保持のディレクトリアーティファクトを branch-fix-verdict-<slug>-<run_id> という名前でアップロードする。 バンドルには以下が含まれる:

ファイルソース注記
branch-fix-verdict.jsonbranch_image からライブキャプチャ。常に存在。Contract v1 に準拠し verdict.schema.json に対して検証パスする。
original-verdict.jsonデフォルト: https://aletheia-works.github.io/vivarium/repro/<project>/<issue_path>/verdict.json からフェッチ(recipes.json 内エントリの page_urlverdict.json を付加した形)。original_image を指定した場合: そのイメージからキャプチャ。デプロイ済みの Pages スナップショットが 404 を返す場合(例: まだライブサイトにない新しいレシピ)は省略。

R.3 比較ページ UI はこのバンドル構造を正確に消費する。 このようにファイルに名前を付けることで、R.2 が R.3 のプログラミング対象となる ワイヤーフォーマットにコミットする。

比較サマリー

ワークフローは $GITHUB_STEP_SUMMARY に Markdown テーブルを書き込む (実行ページで確認できる):

originalbranch-fix
verdict(例)reproduced(例)unreproduced
exit code(例)0(例)1

続いて expected_verdict アサーションの「期待通り」/ 「期待と不一致」を 1 行で記述する。Markdown サマリーはワークフロー実行ページ上の at-a-glance ビューだ。サイドバイサイド比較サーフェスが必要なら、ワークフローのアーティファクト zip を 比較ページ に file-drop または paste で渡す。 どちらにしてもアーティファクトが真実のソースだ。

このパイプラインがしないこと

  • branch-fix イメージのビルド。 コントリビューターはランナーがプルできるレジストリに 自分でビルドして公開することが期待される。イメージはこのパイプラインの入力境界だ。
  • Layer 1 (WASM) 再現の検証。 Layer 1 の verdict はブラウザによってページ内で ライブ生成される。スワップできる Docker イメージは存在しない。
  • ホスト型ランナーでの Layer 3 (rr replay) 再現の検証。 GitHub ホスト型 Ubuntu ランナーは rr replay を駆動できない。 Layer 3 branch-fix 検証には CPUID フォールティングを公開する セルフホストランナーが必要だ。
  • プライベートレジストリへの認証。 v1 では提供されたイメージ参照が 匿名でプル可能であることを前提とする。

関連情報

  • 比較ページ — このパイプラインのアーティファクトバンドルを 消費する R.3 のサイドバイサイド UI(file-drop、URL パラメータ、JSON paste の 3 経路)。
  • Contract v1 — このパイプラインが出力・消費する verdict サーフェス。
  • verdict.schema.json — バンドルの両エントリが検証に使用するスキーマ。
  • Consumer workflow — コンシューマーリポジトリの CI で Vivarium レシピを検証するための兄弟再利用可能ワークフロー。
  • Layer 2 カタログinputs.slug に使用できるスラッグ。