# Issue #22: 「遷移ルール変更がNodeに波及しない」価値の明示

## 優先度: 中

## 概要

Output Model Patternの重要なメリットである「パイプラインの遷移ルールを変更しても、Nodeの実装に影響がない」という価値がTUTORIAL.mdで明示されていない。

## 現状の問題

### TUTORIAL.md Step 6 の記載（L319-327）

```markdown
typed_pipeline は:
1. 各ノードの inputs/output を見て
2. 自動的に依存関係を解決
3. 正しい順序で実行
```

**問題**: 「依存関係の自動解決」の仕組みは説明されているが、それが**ユーザーにとって何が嬉しいのか**が明確でない。

### 伝わっていない価値

```python
# この構成が...
typed_pipeline(fetch_users, generate_report)

# こう変わっても...
typed_pipeline(fetch_users, transform_users, generate_report)

# generate_reportの実装は一切変更不要！
```

**「遷移ルールの変更がNodeに波及しない」**というメリットが明示されていない。

### 従来のパターンとの対比が不足

```python
# ❌ 従来（引数渡し）: パイプライン変更でNode実装も変更が必要
def generate_report(users):  # 直前のNodeからの引数
    ...

# パイプラインにtransform_usersを追加
# → generate_reportの引数も変更が必要になる可能性

# ✅ Railway: Contractだけを見る
@node(inputs={"users": UsersFetchResult}, output=ReportResult)
def generate_report(users: UsersFetchResult) -> ReportResult:
    ...

# パイプラインの構成が変わっても、
# UsersFetchResultを生成するNodeがあれば動作する
```

## 期待する状態

ユーザーがTUTORIALを読んだ後、以下を理解している:

1. Nodeは「自分の入出力Contract」だけを知っていればよい
2. パイプラインの全体構成（遷移ルール）には依存しない
3. パイプライン構成を変更してもNode実装の修正は不要

## 実装計画

### 1. TUTORIAL.md Step 6 に追加

`railway/cli/init.py` の `_create_tutorial_md()` 内、Step 6 セクションに以下を追加:

```markdown
### 6.3 遷移ルールからの独立

**従来の問題:**
```python
# ❌ 従来: パイプライン構成を変えるとNodeも修正が必要
def process(data_from_previous_node):  # 前のNodeに依存
    ...
```

**Railwayの解決:**
```python
# ✅ Railway: Contractだけを見る
@node(inputs={"users": UsersFetchResult}, output=ReportResult)
def generate_report(users: UsersFetchResult) -> ReportResult:
    ...
```

**パイプライン構成を変更しても、Nodeは影響を受けません:**

```python
# 構成1: シンプル
typed_pipeline(fetch_users, generate_report)

# 構成2: 間にNodeを追加
typed_pipeline(fetch_users, filter_users, generate_report)

# 構成3: 並列処理を追加
typed_pipeline(fetch_users, enrich_users, generate_report)

# ↑ どの構成でも generate_report の実装は同じ！
# 「UsersFetchResultを受け取る」という契約だけを守ればよい
```

**メリット:**
- パイプラインのリファクタリングが安全
- Nodeの単体テストが安定（構成に依存しない）
- チーム開発でNodeを独立して開発可能
```

### 2. README.md にも反映（任意）

「Why Railway?」セクションに追加:

```markdown
| 観点 | 従来 | Railway |
|------|------|---------|
| パイプライン変更時 | Node修正が必要な場合あり | Node修正不要 |
```

## 受け入れ条件

- [ ] TUTORIAL.md Step 6 に「遷移ルールからの独立」セクションを追加
- [ ] 従来パターンとの対比を明示
- [ ] 具体的なコード例で価値を説明
- [ ] 「Nodeは入出力Contractだけを知ればよい」というメッセージを明確に

## 修正対象ファイル

1. `railway/cli/init.py`
   - `_create_tutorial_md()` 関数内のStep 6セクション

2. `readme.md`（任意）
   - 「Why Railway?」セクションの比較表

## 関連

- Output Model Pattern（ADR-001）
- Issue #07 TUTORIAL体験再設計（完了済み/2/）
- DependencyResolver の設計思想
