# ExitContract 設計 - 実装計画

**作成日**: 2026-01-28
**対象バージョン**: v0.12.2
**分類**: 破壊的変更

---

## 目的

終端ノードが返す `ExitContract` をワークフローの最終結果とすることで:
- 冗長な抽象化を削除（`DagRunnerResult`, `ExitOutcome`, `Exit`, `EXIT_CODES`）
- 型安全性を向上
- API をシンプル化

## Issue 一覧

| Issue # | タイトル | 依存 | 優先度 |
|---------|----------|------|--------|
| #34 | executor の YamlTransform 適用 | - | P0 |
| #35 | ExitContract 基底クラス追加 | - | P0 |
| #36 | dag_runner・codegen の ExitContract 対応 | #35 | P0 |
| #37 | 不要コード削除 | #36 | P1 |
| #38 | リリース準備（ドキュメント・マイグレーション・E2E） | #37 | P1 |

## 依存グラフ

```
#34 executor（独立・バグ修正）

#35 ExitContract
 │
 └─► #36 dag_runner・codegen
      │
      └─► #37 不要コード削除
           │
           └─► #38 リリース準備
```

## Issue 詳細

### #34: executor の YamlTransform 適用（バグ修正）
- `apply_migration()` が `yaml_transforms` を適用していない問題を修正
- `railway update` で YAML 自動変換が動作するようにする

### #35: ExitContract 基底クラス追加
- `ExitContract` 基底クラス作成（`railway/core/exit_contract.py`）
- `exit_code` の自動導出機能（`success.*` → 0、それ以外 → 1）
- `DefaultExitContract` フォールバック用クラス作成
- テスト・エクスポート追加

### #36: dag_runner・codegen の ExitContract 対応
- `dag_runner()` の返り値を `ExitContract` に変更
- `_is_exit_node()` 終端ノード判定関数追加（純粋関数）
- `_derive_exit_state()` exit_state 導出関数追加（純粋関数）
- `exit_codes` パラメータ削除
- `Exit` クラス削除（`Exit.GREEN`, `Exit.code()` 等）
- `DagRunnerResult` クラス削除
- codegen から `Exit Enum`, `EXIT_CODES` 生成削除
- `run()` / `run_async()` の返り値変更

### #37: 不要コード削除
- `ExitOutcome` クラス削除
- `NodeDefinition.exit_code` 属性削除
- parser から `exit_code` パース削除
- 未使用エクスポート削除（`make_state`, `make_exit` 等）
- `validate_contract` を internal に移動

### #38: リリース準備
- ドキュメント更新（readme.md, TUTORIAL.md, transition_graph_reference.md）
- v0.12.1 → v0.12.2 マイグレーション定義
- E2E テスト更新

## TDD 方針

各 Issue は以下のフェーズで実装:

1. **Red**: 失敗するテストを先に作成
2. **Green**: テストが通る最小実装
3. **Refactor**: コード品質向上

## 関数型パラダイム

- 全てのデータ型は `frozen=True`（イミュータブル）
- 副作用のない純粋関数を優先
- 型アノテーション必須

## 関連 ADR

- [ADR-004: Exit ノードの設計と例外処理](../../docs/adr/004_exit_node_design.md) - v0.12.0 の設計
- [ADR-005: ExitContract による dag_runner API 簡素化](../../docs/adr/005_exit_contract_simplification.md) - v0.12.2 の改善（**本 Issue 群の設計根拠**）

---

*5 Issues / 破壊的変更リリース*
