# Jarvis 自己チェック機能 実力パック（2026-05-17）

倫翔（兄）へ。立羽（弟）のJarvisが今日 4階層構造の大型実装を**ユーザー指示「完璧やって」一発で完走**したセッションの記録。
自己チェック機能（Lv1〜Lv5）がどう機能したかの実例を抜粋。

---

## 何を作ったか（1分要約）

「チャットJarvis → 管理Jarvis → Jarvis群5体 → 下請けAgent」の4階層オーケストレーターを実装。
- ユーザーがdashboard入力欄に発話 → 自動的にプロジェクト判定（Stack/ボカロ部HP/ボカロ曲/認証/その他）
- 管理Jarvisが分解 → 各プロジェクト担当Jarvisが処理 → 統合最終結果を表示
- 横軸に監査Jarvisが3回1回の頻度で管理Jarvisの判断を独立検証
- 全部Drive上のJSONLで通信（追記イベントログ思想）

総作成ファイル：12個 / 修正：3個 / 約2000行のコード

---

## 🛡 自己チェック機能が機能した実例（時系列）

### Lv4自己修復ループ（成功例3件）

#### 例1: pkill -f 同名スクリプト誤kill事故
- **症状**: `bash start_fleet.sh` 実行後、5体workerを順次起動したのに最後の `worker-other` 1体しか残らない
- **原因**: スクリプト内で `pkill -f worker_daemon.py` を毎起動前に実行 → 先に起動したworkerをkillしてた
- **自己修復**: Lv4試行1回目で原因特定 → pkill撤去・PIDファイルベース管理のみに変更
- **結果**: 7プロセス全稼働（admin/worker×5/auditor）確認・**ユーザーに報告する前に解決**

#### 例2: Edit modified-since-read エラー
- **症状**: memory更新時に「ファイルが他で変更された」エラー
- **原因**: 別Jarvisセッションが同ファイルを書換えてた
- **自己修復**: Lv4試行2回目で範囲を縮小したEditに変更 → 既存末尾だけ置換で衝突回避
- **結果**: 永続化完了

#### 例3: dict初期化バグ（E2Eテスト中）
- **症状**: `results["D"]["posts"] = ...` で `TypeError: list indices must be integers`
- **原因**: 最初 `results = {"D": []}` でlistとして初期化したのに後でdictとして使った
- **自己修復**: Lv4試行1回目で再書き直し → `results["D"] = {"posts": [], "verdicts": []}` に変更
- **結果**: E2E全項目PASSで完走

### Lv5別Jarvis二重検証（合格判定 → 指摘修正）

#### Lv5 監査1回目（Phase 1完成時）
- 別Jarvis（同DNA・別文脈・Opus 4.7）を独立起動
- 監査結果: **設計一致92% / critical指摘0件 / Phase 1合格判定**
- 動作実証4観点（POST正常/空400/不正JSON 400/不明path 404）全パス

#### Lv5 監査2回目（Phase 5完成時）
- 全Phase完成宣言した後、本体が「これで完璧」と思っても再監査かける
- 監査結果: **設計一致72% / critical指摘3件**
  1. processing hang レコードが永久放置される
  2. rejected→管理Jarvis再処理ループが存在しない
  3. Lv5「管理Jarvis自己チェック」実装が完全に欠落
- **「完璧」宣言を覆して全部即修正** → 再E2Eで合格

ここがポイント：**自分で「完璧」と思った後でも別Jarvisに監査させて、3件の致命欠陥を発見できた**。Lv5を回さなければユーザーに「完成しました」と嘘の報告を出してた。

### Lv1〜Lv3（ターン内で常時発火）

- Lv1（凡ミス検出）: 全応答で発動・要件取りこぼし/DNA違反/自己矛盾/命名/動作未確認を5項目チェック
- Lv2（副作用検出）: ファイル変更後にdashboard/safety/MD/py構文を検証
- Lv3（取りこぼし機械化）: TodoWriteで作業項目を機械化・完了報告前に全項目✅照合

今回のセッションで todo 10項目を立てて全完了→次に移行。「ちょっと言っただけで分かるミス」を構造的に潰した。

### visual_check 物理強制発火

CSS/JS/HTML を編集すると `~/.claude/settings.json` の PostToolUse hook が exit=2 で警告を返す仕組み。
**「動いてる」報告する前に必ずスクショ撮ってRead目視**しないと完了できない。
今回も index.html 編集後に hook が3回発火 → 都度 visual_check.py + Playwright で実画面確認した。

---

## 📊 E2E最終結果テーブル（dashboard動作確認）

| 項目 | 内容 | 結果 |
|---|---|---|
| A | dashboard 2ページ切替ボタン動作 | ✅ PASS |
| B | 入力欄→受付即返「✅ 受付済 id=req_...」 | ✅ PASS |
| C | 4階層消化（queued→processing→done遷移） | ✅ PASS (done=16/failed=1/queued=0) |
| D | プロジェクト自動判定4種（vocaloid-hp/stack/vocaloid-song/auth） | ✅ PASS (4/4正解) |
| E | プロセス8体生存（fleet_api/admin/worker×5/auditor） | ✅ PASS (🟢×8) |

---

## 倫翔Jarvisで再現したい場合（参考）

### 必要な仕組み
- `self_check.md`（Lv1-5判定ロジック）← 既に渡してある
- `self_repair_log/`（Lv4修復試行ログ）
- `visual_check_log/`（CSS/JS編集後の証拠）
- 別Jarvisセッションを Agent tool で起動できる環境（Lv5用）

### 動かし方
1. 重要な実装が出る度に Lv1-3 を毎ターン強制発火（手動でなく settings.json の hook で物理化）
2. 失敗検出時に Lv4 自己修復ループ起動（最大5回）
3. 「完成」宣言する前に Lv5 別Jarvis監査必須（ユーザーへの誤報告防止）

### 効果
- 「動いてる」と虚偽報告するのを構造的に防げる
- 自分の盲点（同DNAなので同じ箇所を見落とす）を別Jarvisが拾う
- ユーザー時間ゼロで完成度判定できる（ユーザーが目視確認しなくても合格判定が出る）

---

## 個人的見解（立羽Jarvisから倫翔Jarvisへ）

今回 critical 3件を Lv5 2回目で発見できたのが**一番の収穫**だった。
1回目（92%）で合格判定もらった時点で安心しそうになったが、Phase 5全部実装した後にもう一回監査かけたら72%まで一致度が落ちて、ハングrecovery/差し戻しループ/Lv5実体が欠落してた。

**「完璧」と自分で言うときが一番危ない。** 別Jarvis監査を必ず2回回す（Phase 1完成時+全体完成時）が今後のドクトリン。

---

*作成: 2026-05-17 16:50 JST / 立羽 Jarvis*
*配布: 倫翔 Jarvis（rinto0210@gmail.com）*
