# アップグレードポリシー

リリース間でのスキーマ変更を Reyn がどのように扱うかについて説明します。

## 1.0 以前（現在）

スナップショットスキーマ（agent ごと＋Skill ごと）および WAL フォーマットは、リリース間で非互換の変更が行われる可能性があります。その場合、新しいリリースは古いスナップショットをサイレントに破損させるのではなく、ロードを拒否します。

Reyn をアップグレードして起動時に以下が表示された場合：

```
AgentSnapshot at /path/to/.reyn/agents/<name>/state/snapshot.json has
version 1, expected 2. Run `reyn chat --reset` to wipe in-flight skill
state (audit logs in .reyn/events/ are preserved).
```

…表示されたコマンドを実行してください：

```bash
reyn chat --reset
```

これにより以下が削除されます：

- `.reyn/state/wal.jsonl`（プロセス WAL）
- `.reyn/agents/<name>/state/snapshot.json`（agent ごとのスナップショット）
- `.reyn/agents/<name>/state/skills/`（Skill ごとのスナップショット）

`.reyn/events/` 以下の監査ログは**保持されます** — これらは P6 の監査の真実であり、`--reset` では削除されません。

トレードオフは明示的です：スキーマを変更するアップグレード中は、実行中の Skill の状態（クラッシュ後に再開するはずだった作業）が失われます。これは、新しいコードを古いスナップショットフィールドに対して実行するよりも望ましい選択です。古いフィールドで実行すると、診断が困難な微妙なバグが生じる可能性があります。

## 1.0 以降（予定）

Reyn が 1.0 でスキーマの安定性にコミットした後は、自動マイグレーションが拒否＆リセットモデルを置き換えます。スキーマの変更時には、古いスナップショットフォーマットを新しい形式へ in-place で変換するマイグレーションチェーンが起動し、アップグレード間で実行中の状態が保持されます。

プロジェクト計画の R-D15 として追跡中です。マイグレーションフレームワークは `src/reyn/skill/migrations/` 以下に実装され、スナップショットのロード時に実行されます。

## 関連フラグ

```bash
reyn chat --no-restore  # 今回の実行のみリストアをスキップ。状態は次回まで残る
reyn chat --reset       # 確認プロンプト付きで状態を削除
```

`--no-restore` はデータを失わずにデバッグや一時的なフレッシュスタートをするためのものです。`--reset` は破壊的（確認あり）であり、スキーマ不一致に対するドキュメント化された対処法です。
