• 日本語
  • Vivarium recipes index (v1)

    このリポジトリがホストするすべての再現の機械的に生成されたカタログインデックス。 Vivarium MCP サーバ および、レシピの一覧取得・フィルタリング・検索を行うその他のプログラマティックなツールが利用する。

    概要

    URL: https://aletheia-works.github.io/vivarium/api/recipes.json

    {
      "index": "v1",
      "contract": "v1",
      "recipes": [
        {
          "slug": "pandas-56679",
          "layer": 1,
          "project": "pandas",
          "issue": 56679,
          "title": "pandas-dev/pandas#56679",
          "page_url": "https://aletheia-works.github.io/vivarium/repro/pandas/56679/",
          "source_url": "https://github.com/aletheia-works/vivarium/tree/main/src/layer1_wasm/pandas-56679"
        },
        {
          "slug": "bash-local-shadows-exit",
          "layer": 2,
          "project": "bash",
          "issue": 0,
          "title": "bash `local` shadows command-substitution exit code",
          "page_url": "https://aletheia-works.github.io/vivarium/repro/bash/local-shadows-exit/",
          "verdict_url": "https://aletheia-works.github.io/vivarium/repro/bash/local-shadows-exit/verdict.json",
          "source_url": "https://github.com/aletheia-works/vivarium/tree/main/src/layer2_docker/bash-local-shadows-exit"
        }
      ]
    }

    トップレベルフィールド

    フィールド型必須注記
    index"v1" リテラル✅フォーマットバージョン。新しいオプションフィールドは同 v1 リビジョンとして出荷。破壊的変更は v2。
    contract"v1" リテラル✅レシピのページが公開する Contract v1 のバージョン。
    recipesレシピエントリの配列✅このリポジトリがホストするすべての再現。レイヤー順、次に slug 順にソート。

    レシピエントリフィールド

    フィールド型必須注記
    slug文字列(ケバブケース)✅src/layer{N}_*/ 以下のレシピディレクトリ名。Manifest v1 の slug と同じ規約。
    layer整数(1 | 2 | 3)✅Layer 1 = ブラウザ内 WASM。Layer 2 = Docker。Layer 3 = 第三の道。
    project文字列✅アップストリームプロジェクト名(例: "pandas"、"bash")。
    issue整数✅アップストリーム Issue 番号。アップストリームトラッカーのエントリが存在しない場合は 0。
    title文字列✅レシピ README の最初の H1 から取得した人間可読なタイトル。
    page_urlURI✅ライブ再現ページ(Layer 1: WASM ページ。Layer 2 / 3: docker-run 手順ページ)。
    page_url_jaURI⏳オプション。同じページの日本語版で、サイトの /ja/ ツリー配下にある。レシピが翻訳(src/layer*/<slug>/i18n.ja.json)を持つ場合のみ出力され、無い場合は日本語ページが存在しないことを意味する。page_url に /ja/ を挿入して導出してはならない——未翻訳のレシピでは 404 になる。2026-09-02 に追加。
    verdict_urlURI⏳Layer 2 / 3 のみ——デプロイ済みの verdict.json スナップショット。Layer 1 の verdict はページ内でライブ生成されるため静的スナップショットを持たない。
    source_urlURI✅レシピディレクトリへの GitHub リンク。
    language文字列⏳オプション。主要な実装言語の小文字表記(例: "python"、"rust"、"shell")。src/layer*_*/<slug>/ 配下のレシピごとの recipe.json から供給される。2026-05-03 リビジョンで追加。2026-05-18 リビジョンで供給元を廃止された docs/site/_data/recipe-facets.json オーバーレイからレシピごとのファイルへ移行。
    symptom文字列(ケバブケース)⏳オプション。エラー → レシピマッチャーが利用する短い症状スラッグ(例: "dtype-mismatch"、"ordering-non-transitive")。recipe.json から供給。2026-05-03 追加。
    severity文字列⏳オプション。自由形式の重大度バケット(例: "bug"、"regression"、"spec-violation"、"footgun")。recipe.json から供給。2026-05-03 追加。
    tags文字列の配列⏳オプション。マッチャーがスコア計算に使う自由形式タグリスト(例: ["sqlite3", "pragma", "foreign-keys"])。recipe.json から供給。2026-05-03 追加。
    expected_verdict文字列(enum)⏳オプション。リグレッションスイートが期待する verdict — "reproduced" または "unreproduced"。recipe.json から供給。2026-05-18 リビジョンで追加。
    expected_runtime文字列⏳オプション。レシピの verdict envelope が __VIVARIUM_RESULT__.runtime.name に報告するランタイム識別子(例: "pyodide"、"docker-snapshot")。recipe.json から供給。2026-05-18 追加。
    path_a真偽値⏳オプション。レシピページが Path A の「Try a fix」パネルを持つ場合にのみ true が出力される。コンシューマーはこれを見て、候補 fix をページに渡せるかを判断する。無い場合は持たない。recipe.json から供給。2026-09-03 追加。

    バージョニング

    バージョンはトップレベルオブジェクトの index = "v1" として記載される。

    • オプションの追加的フィールドは v1 リビジョンとして出荷される。 コンシューマーはフィーチャーデテクトする。
    • 破壊的変更(フィールド名変更、型変更、オプション → 必須)には v2 スキーマの兄弟ファイルが必要。

    現在 v2 は存在しない。

    リビジョン履歴

    日付変更内容
    2026-05-03レシピエントリにオプションの language / symptom / severity / tags フィールドを追加。レシピごとのフロントマタではなく、集中型ファセットオーバーレイ(docs/site/_data/recipe-facets.json)から供給される。後方互換 — v1 コンシューマーは無視できる。
    2026-05-18オプションの expected_verdict / expected_runtime フィールドを追加。同時に既存の language / symptom / severity / tags の供給元を、廃止された docs/site/_data/recipe-facets.json オーバーレイから、レシピごとの src/layer*_*/<slug>/recipe.json(スキーマ: recipe.schema.json)へ移行。後方互換 — v1 コンシューマーは新フィールドを無視し、既存フィールドは変更なく読み続けられる。
    2026-09-02オプションの page_url_ja(レシピ再現ページの日本語版)を追加。翻訳を持つレシピにのみ出力されるため、その存在自体が日本語ページの有無を示すシグナルになる。後方互換 — v1 コンシューマーは無視できる。
    2026-09-03オプションの path_a を追加。layer だけでは「そのページが渡された fix を実行できるか」を判断できなくなった——Layer 1 レシピはパネルに個別に opt-in する。layer === 1 で分岐していたコンシューマーはこのフィールドを読むこと。後方互換 — v1 コンシューマーは無視できる。
    2026-10-04recipe.schema.json にオプションの upstream を追加。Layer 1 レシピの baseline が固定している upstream のリリースで、毎日の upstream-bump ワークフローが読む。index には出力しないため、レシピのエントリは変わらない。
    2026-10-04recipe.schema.json にオプションの fix_candidate も追加。レシピの fix 候補ペインがソースからビルドするブランチと、固定したコミットで、同じワークフローが読む。これも index には出力しない。
    2026-10-06recipe.schema.json にオプションの upstream_pr を追加。レシピの bug を直す upstream の pull request で、毎日の retire-merged ワークフローが読み、その pull request がマージされるとレシピを削除する。index には出力しない。

    生成方法

    インデックスは docs/scripts/generate-recipes-index.ts によってビルドされ、docs/package.json の rspress dev と build スクリプトに組み込まれている。 スクリプトはレシピディレクトリを走査し、各レシピ README の最初の H1 からタイトルを取得し、 slug パターン(末尾に Issue 番号を持つ slug の場合は <project>-<digits>。 それ以外は最初のダッシュセグメント。形が異なるレシピには小さなオーバーライドマップ)から project / issue を導出する。

    出力は git でトラッキングされるため、レシピを追加する PR の diff にインデックス更新も表示される。 オプションのファセットフィールド(language / symptom / severity / tags / expected_verdict / expected_runtime)は、レシピごとの src/layer*_*/<slug>/recipe.json ファイル(スキーマ: recipe.schema.json) から読み込まれる。レシピが自身のメタデータを持つので、レシピ追加は 1 ディレクトリの変更で済む。 v1 では project フィールドは引き続き slug 由来のままにしている。

    コンフォーマンス

    recipes.json ドキュメントが v1 に準拠するのは:

    1. recipes.schema.json を検証パスする。
    2. index === "v1" かつ contract === "v1"。
    3. すべてのエントリの slug が ^[a-z0-9]+(-[a-z0-9]+)*$ に一致する。
    4. すべての Layer 2 / 3 エントリが verdict_url を含む。Layer 1 エントリはこれを省略する。

    条項 1〜3 はスキーマバリデーションで機械的に強制できる。条項 4 はスキーマの oneOf に意図的に組み込まれていない導出ルール制約だ(MCP サーバは Layer 2 / 3 エントリに verdict_url がない場合と、verdict_url が 404 を返す場合を同じように扱う—— 両方とも「スナップショットなし」としてコンシューマーに通知する)。

    関連情報

    • Contract v1 — 各レシピページが公開するランタイム verdict サーフェス。
    • Manifest v1 — 外部リポジトリが .vivarium/manifest.toml に置く アップストリーム側マニフェスト形式。このインデックスのレシピエントリは内部レシピに対応する。 外部リポジトリはここにリストされる代わりに自身のリポジトリのマニフェストを公開する。