reyn dogfood
チャットルーターのシナリオベース回帰テスト(FP-0036)。YAML シナリオセットで期待動作を宣言し、実システムに対して実行し、リリースをまたいで合否を追跡します。
概要
reyn dogfood run <SET_YAML> [OPTIONS]
reyn dogfood coverage [--feature-map FILE] [--json] [<SET_YAML>...]
reyn dogfood report <RUN_ID> [--json]
reyn dogfood compare <BASELINE> <CANDIDATE> [--threshold FLOAT] [--json]
reyn dogfood baseline <RUN_ID> [--label NAME]
reyn dogfood publish <RUN_ID> [--repo OWNER/REPO] [--category SLUG] [--dry-run] [--template PATH] [--batch-id N] [--topic TOPIC]
説明
reyn dogfood は構造化されたシナリオセットでチャットルーターを動かします。各シナリオは入力プロンプトと 3 つの観測面での期待動作を宣言します。
- reply — 自然言語出力(judge / substring / regex)
- events — P6 イベントログ(must_emit / must_not_emit)
- artifacts — 実行で生成されるワークスペースアーティファクト
各シナリオは 4 段階のアウトカムを返します:verified | inconclusive | refuted | blocked。アウトカムはラン間で追跡され、reyn dogfood compare で自動的に回帰を検出します。
ストレージレイアウト
.reyn/dogfood/
runs/<run_id>/
scenarios/<scenario_id>/
output.json # reply + 検証結果
events.jsonl # P6 イベントログ
artifacts/ # ワークスペーススナップショット
summary.json # 4 段階集計 + Brier スコア
baselines/<label>/ # 名前付きベースラインへのシンボリックリンク
アウトカムスケール
| アウトカム |
意味 |
verified |
全 verifier が合格。 |
inconclusive |
合否を判定できなかった(例:judge の不確かさ)。 |
refuted |
少なくとも 1 つの verifier が失敗。 |
blocked |
シナリオを実行できなかった(例:パーミッション拒否、エージェントエラー)。 |
アウトカムの順序(悪→良):blocked < refuted < inconclusive < verified
reyn dogfood run — シナリオセットの実行
YAML ファイルの全シナリオをチャットルーター経由で実行し、結果を記録します。
概要
reyn dogfood run <SET_YAML> [OPTIONS]
位置引数
| 名前 |
説明 |
SET_YAML |
シナリオセット YAML ファイルのパス(例:dogfood/scenarios/chat_router_smoke.yaml)。 |
オプション
| フラグ |
デフォルト |
説明 |
--n N |
1 |
繰り返し回数。安定性バンドには N ≥ 3 を推奨。繰り返し間の最悪ケースアウトカムが採用されます。 |
--replay FIXTURE_DIR |
— |
録音済み LLM フィクスチャを使ってリプレイモードで実行。ライブ LLM コールは発生しません。 |
--agent NAME |
default |
チャットルーターエージェント名。 |
--storage DIR |
.reyn/dogfood/runs/<run_id> |
ラン出力ディレクトリのオーバーライド。 |
--run-id RUN_ID |
(自動 UUID) |
明示的なラン ID。 |
終了コード
| コード |
意味 |
0 |
ラン完了(アウトカム分布を問わず)。 |
2 |
エラー:シナリオファイルが見つからない、依存関係が未インストール。 |
出力例
dogfood run: chat_router_smoke (3 シナリオ, n=1)
run_id : a1b2c3d4-...
verified : 2
inconclusive: 1
refuted : 0
blocked : 0
total : 3
verified % : 66.7%
Brier : 0.1200
results → .reyn/dogfood/runs/a1b2c3d4-.../summary.json
使用例
# 1 回実行
reyn dogfood run dogfood/scenarios/chat_router_smoke.yaml
# 安定性のため 5 回繰り返し
reyn dogfood run dogfood/scenarios/chat_router_smoke.yaml --n 5
# 決定論的リプレイ(LLM コストゼロ)
reyn dogfood run dogfood/scenarios/chat_router_smoke.yaml --replay dogfood/fixtures/chat_router_smoke/
reyn dogfood coverage — フィーチャーマップカバレッジ
シナリオセットでカバーされているフィーチャーマップのフィーチャーを表示します。
概要
reyn dogfood coverage [--feature-map FILE] [--json] [<SET_YAML>...]
位置引数
| 名前 |
説明 |
SET_YAML... |
0 個以上のシナリオセット YAML ファイル。省略時は dogfood/scenarios/*.yaml がデフォルト。 |
オプション
| フラグ |
デフォルト |
説明 |
--feature-map FILE |
docs/feature-map.md |
フィーチャーマップ Markdown ファイルのパス。 |
--json |
— |
カバレッジを JSON で出力。 |
使用例
# デフォルト:全シナリオセット、デフォルトフィーチャーマップ
reyn dogfood coverage
# 特定ファイル + JSON 出力
reyn dogfood coverage dogfood/scenarios/chat_router_smoke.yaml --json
reyn dogfood report — 保存済みランの結果表示
過去のランの 4 段階内訳と Brier スコアを表示します。
概要
reyn dogfood report <RUN_ID> [--json]
位置引数
| 名前 |
説明 |
RUN_ID |
ラン ID(UUID)またはランディレクトリのパス。 |
オプション
| フラグ |
説明 |
--json |
レポートを JSON で出力。 |
終了コード
| コード |
意味 |
0 |
レポート表示完了。 |
2 |
ランディレクトリが見つからない、または summary.json が欠損。 |
出力例
Run: a1b2c3d4-...
Set: chat_router_smoke
Started: 2026-05-16T10:00:00+00:00
Completed: 2026-05-16T10:02:15+00:00
verified : 2
inconclusive: 1
refuted : 0
blocked : 0
total : 3
verified % : 66.7%
Brier : 0.1200
Scenarios:
✓ simple_greeting verified
? complex_multi_turn inconclusive
✓ skill_dispatch_smoke verified
使用例
reyn dogfood report a1b2c3d4-1234-...
reyn dogfood report a1b2c3d4-1234-... --json
reyn dogfood compare — 回帰差分
候補ランをベースラインと比較します。verified 率の低下が --threshold を超えると終了コード 1 を返します。
概要
reyn dogfood compare <BASELINE> <CANDIDATE> [--threshold FLOAT] [--json]
位置引数
| 名前 |
説明 |
BASELINE |
ベースランの ID(またはパス)。 |
CANDIDATE |
候補ランの ID(またはパス)。 |
オプション
| フラグ |
デフォルト |
説明 |
--threshold FLOAT |
0.05 |
回帰アラートを発する verified 率の低下幅。デフォルト 0.05 = 5 パーセントポイント。 |
--json |
— |
比較結果を JSON で出力。 |
終了コード
| コード |
意味 |
0 |
回帰なし(または閾値以内)。 |
1 |
回帰アラート:verified 率が --threshold を超えて低下。 |
2 |
エラー:ランディレクトリが見つからない。 |
出力例
Baseline: a1b2c3d4-... (66.7% verified)
Candidate: b2c3d4e5-... (33.3% verified)
Delta: -33.4pp / threshold=-5.0pp
Result: REGRESSION ALERT
Regressed scenarios (1):
- complex_multi_turn: verified → refuted
使用例
# 2 つのランを比較
reyn dogfood compare a1b2c3d4-... b2c3d4e5-...
# 閾値を厳しくする(10pp)
reyn dogfood compare a1b2c3d4-... b2c3d4e5-... --threshold 0.10
# CI 向け:JSON 出力 + 回帰時に終了コード 1
reyn dogfood compare baseline_run candidate_run --json
# 名前付きベースラインを使用
reyn dogfood compare .reyn/dogfood/baselines/v1.2-stable b2c3d4e5-...
reyn dogfood baseline — ランを名前付きベースラインとして登録
.reyn/dogfood/baselines/<label>/ 以下に保存済みランへのシンボリックリンクを作成します。
概要
reyn dogfood baseline <RUN_ID> [--label NAME]
位置引数
| 名前 |
説明 |
RUN_ID |
ベースラインとして登録するランの ID(またはパス)。 |
オプション
| フラグ |
デフォルト |
説明 |
--label NAME |
(run_id) |
ベースラインの識別ラベル(例:v1.2-stable)。 |
終了コード
| コード |
意味 |
0 |
ベースライン作成(または上書き)完了。 |
2 |
ランディレクトリが見つからない。 |
使用例
# デフォルトラベル(= run_id)でタグ付け
reyn dogfood baseline a1b2c3d4-...
# リリースラベルでタグ付け
reyn dogfood baseline a1b2c3d4-... --label v1.2-stable
# compare で使用
reyn dogfood compare v1.2-stable b2c3d4e5-...
シナリオセット YAML フォーマット
シナリオセットは、チャットルーターシナリオのセットを宣言する YAML ファイルです:
type: dogfood_scenario_set
name: chat_router_smoke
description: チャットルーターインテントディスパッチスモークテスト
covers:
- chat-router/intent-routing
- stdlib-skill/direct_llm
scenarios:
- id: simple_greeting
covers: [chat-router/intent-routing, stdlib-skill/direct_llm]
input: "こんにちは、何ができますか?"
expected:
reply:
kind: judge
rubric:
- 高レベルで機能を説明する
- chat / skills / agents に言及する
events:
must_emit:
- { type: skill_run_spawned, count: ">=1" }
- { type: skill_run_completed, status: success }
must_not_emit:
- { type: permission_denied }
artifacts:
- { skill: direct_llm, present: true }
outcome_prediction:
verified: 0.7
inconclusive: 0.2
refuted: 0.05
blocked: 0.05
outcome_prediction により Brier スコア追跡が有効になります。各バンドへの確信度を宣言することで、フレームワークが時間経過とともにキャリブレーションを測定します。
reyn dogfood publish — バッチ Discussion を GitHub に公開
保存済みランの summary.json を読み込み、Markdown テンプレートから Discussion 本文をレンダリングし、設定された GitHub Discussions カテゴリにスレッドを作成します。
認証: GH_TOKEN または GITHUB_TOKEN 環境変数を設定してください(gh CLI と同じ規約)。--dry-run なしでどちらも未設定の場合はエラーになります。
概要
reyn dogfood publish <RUN_ID> [--repo OWNER/REPO] [--category SLUG] \
[--dry-run] [--template PATH] \
[--batch-id N] [--topic TOPIC]
位置引数
| 名前 |
説明 |
RUN_ID |
ラン ID(UUID)またはランディレクトリのパス。 |
オプション
| フラグ |
デフォルト |
説明 |
--repo OWNER/REPO |
tya5/reyn(または git remote から検出) |
Discussion を投稿する GitHub リポジトリ。 |
--category SLUG |
dogfood-batches |
Discussion カテゴリスラグ。 |
--dry-run |
— |
GitHub に投稿せずタイトルと本文を標準出力にレンダリング。 |
--template PATH |
docs/deep-dives/contributing/templates/dogfood-discussion-template.md |
テンプレートファイルのオーバーライド。 |
--batch-id N |
(summary.json から) |
バッチ番号のオーバーライド(summary.json に batch_id がない場合は必須)。 |
--topic TOPIC |
(summary.json から) |
トピック文字列のオーバーライド(summary.json に topic がない場合は必須)。 |
認証
GH_TOKEN が GITHUB_TOKEN より優先されます。トークンには write:discussion スコープ(プライベートリポジトリの場合は repo スコープ)が必要です。
export GH_TOKEN="ghp_..."
reyn dogfood publish <RUN_ID>
終了コード
| コード |
意味 |
0 |
Discussion 作成完了(または dry-run 完了)。 |
1 |
GitHub API エラー(ネットワーク、認証、GraphQL エラー)。 |
2 |
エラー:ランディレクトリが見つからない、summary.json が欠損、テンプレートが見つからない。 |
タイトル形式
Batch <N> (YYYY-MM-DD): <topic> — <verified_pct>% verified, <regressed_count> regressed
例:
Batch 27 (2026-05-17): chat router smoke + stdlib core — 75% verified, 1 regressed
出力例
Discussion created: https://github.com/tya5/reyn/discussions/42
Title : Batch 27 (2026-05-17): chat router smoke — 75% verified, 1 regressed
Number : #42
使用例
# dry-run:投稿せずにレンダリング結果を確認
reyn dogfood publish a1b2c3d4-... --dry-run
# デフォルトリポジトリ(tya5/reyn)に batch-id + topic を指定して投稿
reyn dogfood publish a1b2c3d4-... --batch-id 27 --topic "chat router smoke"
# フォークに投稿
reyn dogfood publish a1b2c3d4-... --repo acme/reyn-fork
# カスタムテンプレートを使用
reyn dogfood publish a1b2c3d4-... --template path/to/my-template.md
関連