mergegate/autorun/ROLLBACK.md
林 駿甫 (Shunsuke Hayashi) 146fcafc5e [追加] DTP (Deterministic Task Protocol) 設計文書・指示書を移植
deterministic-task-protocol リポから miyabi-cli-standalone に統合:
- docs/dtp/: PLAYBOOK, PLAN, UML, GIT-RULES, Codex レビュー 3件
- autorun/: Phase 0-8 の TASKS/ASSIGNMENT/GATE + INDEX/HANDOFF/ROLLBACK
- project_memory/tasks.json: 全9 Phase の DAG SSOT
- skills/: polaris-ops, rust-llm-pitfalls
- .codex/instructions.md: Codex 設定

実装は miyabi-core に gate.rs, lock.rs, protocol.rs, store.rs を追加する方針。
既存の dag.rs, github.rs, approval.rs 等は変更不要。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 01:07:32 +09:00

5.1 KiB
Raw Blame History

ロールバック・中止ポイント定義

各 Phase の「ここまで戻れる」「ここで止める」の判断基準。 エージェントはこのルールに従い、人間の承認なしにロールバックを実行してよい。


1. ロールバックポイント一覧

各 Phase の開始コミットが安全なロールバック先。

Phase ロールバック先 git tag 条件
0 初期コミット v0.0-initial いつでも戻れる
1 Phase 0 完了時点 v0.1-phase0-done Phase 1 の型変更が既存テストを壊した場合
2 Phase 1 完了時点 v0.2-phase1-done ステートマシン改造が壊れた場合
3 Phase 1 完了時点 v0.2-phase1-done Event Store 実装が壊れた場合Phase 2 とは独立)
4 Phase 3 完了時点 v0.4-phase3-done ロック実装が壊れた場合
5 Phase 3 完了時点 v0.4-phase3-done GitHub 同期が壊れた場合
6 Phase 5 完了時点 v0.6-phase5-done Protocol 統合が壊れた場合
7 Phase 6 完了時点 v0.7-phase6-done CLI 実装が壊れた場合
8 Phase 7 完了時点 v0.8-phase7-done E2E が壊れた場合

タグの打ち方

各 Phase の GATE GREEN 確認後、次の Phase に進む前に必ずタグを打つ:

git tag v0.{N+1}-phase{N}-done
git push origin v0.{N+1}-phase{N}-done

ロールバックの実行方法

# Phase N が壊れた → Phase N-1 の完了地点に戻す
git log --oneline --all  # タグを確認
git checkout v0.{N}-phase{N-1}-done  # 安全地点に移動
git checkout -b rollback/phase-{N}-retry  # リトライ用ブランチ作成
# 修正後、main にマージ

2. 中止ポイント(ここで止める判断基準)

Phase レベルの中止条件

条件 アクション
同じテストが 3回連続失敗 Phase を中止。人間にエスカレーション
cargo build が通らない状態が 30分以上継続 Phase を中止。ロールバック
依存クレートのバグで進めない Phase を中止。Issue 作成して待機
設計上の根本的な問題が発覚 全 Phase 中止。設計レビューに戻る

プロジェクトレベルの中止条件

条件 アクション
Codex レビューで Critical 指摘が未解決のまま Phase 6 に到達 全停止。指摘を解決してから再開
GitHub API の仕様変更で Phase 5 が成立しない Phase 5 を再設計。Phase 6 以降は凍結
Rust コンパイラのバグで unsafe_code = "forbid" と競合 バグ報告 + 回避策を検討
人間が「止めろ」と言った 即座に全停止。コミット + push して待機

3. 各 Phase の安全な中断方法

作業途中で中断する場合

# 1. 現在の作業をコミットRED でもよい)
git add -A
git commit -m "[中断] Phase {N}: {理由}"

# 2. push して他エージェントと共有
git push

# 3. HANDOFF_NOTE.md に「中断」と書く
cat > autorun/phase-{N}-*/HANDOFF_NOTE.md << 'EOF'
# Handoff Note: Phase N — 中断

## Status: 中断
- Reason: {理由}
- Tests: {状態}
- Last working commit: {hash}

## 再開手順
1. git pull
2. cargo test で現状確認
3. {具体的な再開ポイント}
EOF

# 4. push
git add -A && git commit -m "[中断] Phase {N}: HANDOFF_NOTE 追記" && git push

ロールバックして再開する場合

# 1. 安全地点を確認
git log --oneline --tags

# 2. ロールバック(ブランチで)
git checkout -b rollback/phase-{N}-attempt-{M} v0.{N}-phase{N-1}-done

# 3. 壊れた変更を選択的に取り込みcherry-pick
git cherry-pick {良いコミットだけ}

# 4. テスト確認
cargo test && cargo clippy --all-targets -- -D warnings

# 5. main に戻す
git checkout main
git merge rollback/phase-{N}-attempt-{M}
git push

4. 復旧不能な場合の最終手段

全てのリトライが失敗し、ロールバックしても直らない場合:

1. git tag v0.{N}-abandoned-{date} で現状を記録
2. 人間に以下を報告:
   - 何が壊れたか
   - どのコミットまでは動いていたか
   - 試したリトライの内容と結果
   - 推奨アクション(設計変更 / 依存変更 / スコープ縮小)
3. 人間の判断を待つ。判断が出るまで一切のコミットをしない

5. 安全境界の定義

操作 安全? 備考
git tag を打つ 安全 いつでも打ってよい
git checkout でタグに移動 安全 detached HEAD になるが問題なし
git branch でブランチ作成 安全
git cherry-pick 注意 コンフリクト時は手動解決
git merge 注意 テスト GREEN を確認してからマージ
git revert 安全 特定コミットを取り消す場合に使用
git reset --hard 禁止 GIT-RULES.md 参照
git push --force 禁止 GIT-RULES.md 参照