自分のリポジトリに統合する

// GUIDE · 統合

自分のリポジトリで Vivarium 再現を宣言・検証する。

Vivarium 本体をフォークしなくても、自分のリポジトリのルートに 1 ファイルを置き、CI ジョブを 1 つ足すだけで「私たちはこのバグの再現をホストしている」と宣言できる。アップストリーム修正の到達も同じ仕組みで自動検知される。

// 0 · 何が手に入るか

自分のリポジトリの CI に Vivarium verdict が乗る。

この統合パスでは、自分のリポジトリ(フォークではなく、ふつうのプロジェクトリポジトリ) に 2 つだけ追加します:

これだけで、対象のアップストリームバグが今でも再現するかどうかが、 自分の CI の green / red シグナルとして毎日(あるいは毎 PR で)勝手に検証されます。 アップストリームが修正を出荷した瞬間、CI が赤くなり、その瞬間が 「このバグはもう追跡しなくてよい」のシグナルになります。

Vivarium 本体のソースをコピーしません。再利用可能ワークフローが組織側で 保守されているので、こちらは uses: のリンクだけ持っておけば、 Vivarium 側の改善が自動で乗ります。

// 1 · 検証したいバグを選ぶ

既存のレシピなら、すぐ使えるスラッグを 1 つ控える。

Vivarium カタログにすでに存在するバグなら、 そのスラッグ(<project>-<issue> 形式)を控えるだけで進めます。 たとえば:

  • bash-local-shadows-exit(Layer 2 / bash)
  • pandas-56679(Layer 1 / pandas)

再現一覧 でファセット検索ができます。 自分が追跡しているエラーメッセージを起点にしたい場合は エラーからレシピを探す を使えば 候補がスコア順で出ます。

アップストリームでまだ再現が無いバグの場合は、自分のフォークでレシピ自体を作る ルートになります。手順は 自分のフォークで動かす に分けてあります。

// 2 · manifest.toml を作る

フォームに入れて生成、リポジトリにコピー。

01
スキャフォールダで生成。

対話的に埋められるフォームが マニフェスト作成 にあります。slug、layer、bug.project、bug.issue、bug.upstream_url を埋めて「生成」を押すと TOML がそのまま出ます。

02
リポジトリのルートに配置。

生成された TOML を .vivarium/manifest.toml(リポジトリのルート直下に .vivarium ディレクトリを作る)として保存します。ファイル名・パス共に固定で、それ以外の場所では認識されません。

03
スキーマ補完を効かせる(任意)。

TOML の先頭行に #:schema https://aletheia-works.github.io/vivarium/spec/manifest.schema.json が入っているはずです(スキャフォールダが付けます)。Taplo / Tombi など TOML LSP のあるエディタは、これだけで補完と検証が効きます。

手書きしてもよく、スキャフォールダはあくまで典型形を出す道具 です。仕様の正典は Manifest v1 で、verdict.schema.json も公開済みなので CI でも検証できます。

// 3 · CI に verdict ジョブを 1 つ追加する

Layer 2 / 3 は再利用可能ワークフローを uses: するだけ。

.github/workflows/check-bug.yml として以下を保存します (slug: は手順 1 で控えたものに置き換えてください):

name: vivarium-check
on:
pull_request:
schedule:
  - cron: '17 4 * * *'  # 毎日 1 回、UTC 04:17

jobs:
bash-issue:
  uses: aletheia-works/.github/.github/workflows/vivarium-verdict.yml@main
  with:
    slug: bash-local-shadows-exit

これで ghcr.io/aletheia-works/vivarium-bash-local-shadows-exit:latest がプルされ、レシピが実行され、Contract v1 準拠の verdict.json がキャプチャされ、JSON Schema で検証されます。 verdict が expected_verdict(デフォルト "reproduced")と 一致しなければジョブが赤くなります。

追跡したいバグが複数ある場合は、ジョブを並べるだけ:

jobs:
bash-issue:
  uses: aletheia-works/.github/.github/workflows/vivarium-verdict.yml@main
  with:
    slug: bash-local-shadows-exit
pandas-issue:
  uses: aletheia-works/.github/.github/workflows/vivarium-verdict.yml@main
  with:
    slug: pandas-56679

Layer 1(ブラウザ内 WASM)の再現は、verdict が DOM / JavaScript ライブで決まるため、 この再利用可能ワークフローでは検証できません。Layer 1 のリグレッション検知は Vivarium 本体の Playwright スイートが既に正式な仕組みとして担当しています。 Layer 1 をマニフェストで宣言するだけは可能で、その場合 page_url を貼り、検証はサイト側に任せる運用になります。

// 4 · 動作確認

緑が出れば「再現は今でも本物」。

01
ブランチを作って push する。

上の 2 ファイル(manifest と check-bug.yml)を 1 commit にして PR を立てます。最低限のコミットメッセージは feat(ci): subscribe to bash-local-shadows-exit verdict のような形で十分です。

02
Actions タブで vivarium-check を確認。

初回は GHCR からのイメージプルがあるので 1〜2 分かかります。完了するとジョブのアーティファクトに verdict-<slug>-<run_id> が出ます。中身が verdict.schema.json に従う JSON です。

03
スケジューラの cron 行を残す。

毎日 1 回でも回しておくと、アップストリームが修正を出荷した日に CI が赤くなり、Slack / メール / GitHub の通知でその瞬間が分かります。これがアップストリーム修正検知シグナルそのものです。

赤くなったら「壊れた」ではなく「修正された」。verdict セマンティクスが テスト的な感覚と逆向きである点は、用語集の verdict Contract v1 で改めて固定しています。

// 5 · 次の選択肢

この surface から続く線。

01
修正候補が本当に効いているか確かめたい。

ブランチで書いた fix を当てた後の verdict と、当てる前の verdict を横並びで比較する surface があります: 再現を比較する。AI エージェントが書いたパッチの検証用に作られたページで、reproduced → unreproduced への反転がそのまま「修正は効いた」のシグナルになります。

02
特定のイメージタグにピン留めしたい。

再利用可能ワークフローの image: インプットでオーバーライドできます。git-sha 付きタグや、自分のフォークで Build した GHCR イメージを差し込めます。仕様: consumer workflow のインプット表。

03
宣言だけして CI 検証は手動で回したい。

cron 行を消して workflow_dispatch: を足せば、Actions タブから手動実行のみになります。低頻度のレシピ(年単位で動かない上流)に向いた運用です。

04
カタログに無いバグを追加したい。

レシピ自体を新しく書く話なので、自分のフォークで動かす の手順から入ります。Layer 1 だけならフォーク内で完結します。

この手順がうまく動かなかった箇所は、それは integrate ガイドのバグです。 具体的にどのステップで詰まったかを Issue に残してください—— どこで詰まるかが、次のドキュメント版の優先順位を決めます。

// NEXT

用語集を読む

manifest / verdict / Layer / slug などここで出てきた用語は、用語集に固定的な意味でまとめてあります。

VIVARIUM は ALETHEIA-WORKS の一部 · GitHub でソースを見る →