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>
5.1 KiB
5.1 KiB
ロールバック・中止ポイント定義
各 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 参照 |