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

148 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ロールバック・中止ポイント定義
> 各 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 に進む前に必ずタグを打つ:
```bash
git tag v0.{N+1}-phase{N}-done
git push origin v0.{N+1}-phase{N}-done
```
### ロールバックの実行方法
```bash
# 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 の安全な中断方法
### 作業途中で中断する場合
```bash
# 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
```
### ロールバックして再開する場合
```bash
# 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 参照 |