# 自己リカバリ機構 — Clone-Jarvis 設計書

## 目的

**「失敗しても自分でリカバリーする、ミスがあっても自分でミスかどうか判断できる」**（ユーザー定義）。
Lv5（完全代行）の必須要件。クローン自身が自分のミスを巻き戻し、学習に変換する3層構造を持つ。

並走設計：[self_check.md](self_check.md) で検出 → 本書で復元・学習。

---

## 1. アクション分類と記録粒度（Reversibility-First）

| 分類 | 例 | 記録方式 | ロールバック手順 |
|---|---|---|---|
| **A. 軽量・可逆** | ファイル編集／フォルダ整理／DNA追記 | git コミット粒度（既存`git save`に乗せる） | `git revert <sha>` |
| **B. 中量・条件付き可逆** | カレンダー追加／Drive新規作成／Slack下書き | `action_log.jsonl` に1行記録 | API再呼び出しで delete |
| **C. 重要・不可逆候補** | メール送信／契約／購入／削除 | `critical_log.md` に詳細記録（事前確認必須） | 取消API or 謝罪・訂正テンプレ |

**全アクションに必ず`reversibility`フィールドを付ける**：`auto`／`manual`／`none`。
`none` の場合は **DNA の事前確認層が先に発火**し、リカバリ層には到達しない（後述§5）。

---

## 2. ロールバック実装

### 2-1. git管理内（A分類）
- **MVP**：`git log --oneline -20` をクローンが読み、ミスコミットの sha を特定 → `git revert <sha>` を即実行
- 既存 `git save`（add+commit+push）と対称な `git undo` エイリアスを将来追加（`revert HEAD --no-edit && git push`）
- 失敗判定が出たコミットは `[BAD]` プレフィックスを commit message に付け replay されない印にする

### 2-2. API管理（B分類）
- `action_log.jsonl` に `{ts, type, payload, reverse_call, reversibility}` を追記
- 例：カレンダー追加なら `reverse_call: "calendar.delete_event(eventId=xxx)"` を**書込時に確定させて保存**
- リカバリ時はその文字列を読んで実行するだけ（推論不要、即実行）

### 2-3. 不可逆（C分類）
- §5 で別扱い

---

## 3. ミス検出 → リカバリ4段階

```
[self_check.md 検出] → [影響範囲特定] → [ロールバック実行] → [学習反映]
        ↓                    ↓                  ↓                  ↓
   失敗シグナル         action_log を遡って     §2の手順         §4でDNAへ
   (戻り値/異常停止/    関連 sha・event_id を   即実行            追記
    ユーザー訂正)        集合化
```

- **影響範囲特定**：直近30分または直近10アクションを `action_log.jsonl` から抽出。失敗の原因コミットから派生した依存コミットを git で逆引き
- **多重失敗時**：時系列の**逆順**でロールバック（最新から戻す）
- **ユーザーへの通知**：`[Auto-Recovered] <要約> / 戻したsha:xxx / 学習: 〜` の1行のみ。詳細は critical_log

---

## 4. 学習反映（自動・最重要）

リカバリ完了と同時に `clone_dna.md` の学習ログ末尾に以下フォーマットで追記：

```
### YYYY-MM-DD — 自動リカバリ #N
- 失敗：<何をして失敗したか>
- 原因：<ミス分類：誤判断/環境/不可逆操作の漏れ>
- 復元：<手順>
- 学習：<次回の事前判定ルール>（先頭に🛡）
```

**🛡 マークの自然なフィルタ機能**：clone_updater.md の `meta_knowledge` 抽出時、🛡 行は最優先で取り込まれ、次回以降のシステムプロンプトに必ず混入する。

→ **「同じ失敗を二度しない」が自動で実装される**。

---

## 5. 不可逆アクションの取り扱い

DNA記載の事前確認2項目（他人送信／削除）はリカバリ前段で必ず**人間ゲート**を通す：

```
[クローン判断] → [reversibility=none?] → YES → [ユーザー確認待ち] → 実行
                                       NO → 即実行（速度優先）
```

確認を漏らして送信した場合の**訂正テンプレ**を `templates/apology.md` に保持：
- メール：「先ほどのメールは誤送信です。正しくは〜」（30秒以内発射）
- カレンダー招待：即削除＋短文謝罪
- 削除ファイル：git履歴から復元 → 復元報告

訂正テンプレ使用も自動で `critical_log.md` に記録 → DNAの🛡として反映。

---

## 6. 実装ステップ

### MVP（即動かせる最小版）
1. `clone-jarvis/jarvis/action_log.jsonl` を空ファイルで作成
2. クローンに **「アクション実行直前に1行JSON追記」** ルールをDNA行動原則に追加（編集系のみ）
3. 失敗を感じた／ユーザーが「戻して」と言った時点で `git revert HEAD` ＋ 学習ログ追記、を即実行する手順をDNAに明記

→ **これだけで A分類の自己リカバリは今日から動く**。

### 段階拡張
- **Phase 2**：B分類の `reverse_call` 記録自動化（カレンダー・Drive ラッパ関数化）
- **Phase 3**：self_check.md と接続 → 検出を待たず能動的にリカバリ起動
- **Phase 4**：`critical_log.md` ＋ 訂正テンプレ運用
- **Phase 5**：30台並列稼働時の **横断ロールバック**（他Jarvisセッションのミスも巻き戻す権限）

---

## 接続点

- 検出側：[self_check.md](self_check.md)（並行作成中）
- 学習反映先：[clone_dna.md](clone_dna.md) 学習ログ末尾
- 反映自動化：[clone_updater.md](clone_updater.md) の `meta_knowledge` 経路に🛡行を最優先で流す
- インフラ：既存 `git save` エイリアス（add+commit+push）と対称な `git undo` を将来追加

---

*作成：2026-05-02 ／ MVPは action_log.jsonl 空ファイル作成から開始可能*
