diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md
index 0dcf830e..c387e735 100644
--- a/docs/development/current/main/10-Now.md
+++ b/docs/development/current/main/10-Now.md
@@ -2,7 +2,7 @@
## Current Focus: Phase 29ai(Plan/Frag single-planner)
-Next: `docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md`
+Next: `docs/development/current/main/phases/phase-29ai/P7-PLANNER-RETURNS-DOMAINPLAN-INSTRUCTIONS.md`
**2025-12-29: Phase 29ag P1 完了** ✅
- 目的: coordinator の ValueId(idx) 前提を撤去し、boundary.join_inputs を SSOT 化(仕様不変)
diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md
index b899a7fa..d7cb49e1 100644
--- a/docs/development/current/main/30-Backlog.md
+++ b/docs/development/current/main/30-Backlog.md
@@ -19,7 +19,7 @@ Related:
- **Phase 29ai(candidate): Plan/Frag single-planner(Facts SSOT)**
- 入口: `docs/development/current/main/phases/phase-29ai/README.md`
- - Next: P6(Move Pattern6/7 extractors to Plan layer)
+ - Next: P7(Planner returns DomainPlan)
- **Phase 29ae P1(✅ COMPLETE): JoinIR Regression Pack (SSOT固定)**
- 入口: `docs/development/current/main/phases/phase-29ae/README.md`
diff --git a/docs/development/current/main/phases/phase-29ai/P7-PLANNER-RETURNS-DOMAINPLAN-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ai/P7-PLANNER-RETURNS-DOMAINPLAN-INSTRUCTIONS.md
new file mode 100644
index 00000000..e4684e2c
--- /dev/null
+++ b/docs/development/current/main/phases/phase-29ai/P7-PLANNER-RETURNS-DOMAINPLAN-INSTRUCTIONS.md
@@ -0,0 +1,64 @@
+# Phase 29ai P7: Planner returns DomainPlan (remove duplicate Plan types) — Instructions
+
+Status: Ready for execution
+Scope: 構造整理(仕様不変)
+
+## Goal
+
+Phase 29ai の `facts/normalize/planner` が “別系統の Plan 型” を持っている状態を解消し、既存の `plan::DomainPlan` を唯一の
+Plan語彙(SSOT)として使う。
+
+これにより、single_planner が将来 `facts→planner` を直接利用できるようになり、吸収作業(Pattern2/6/7/…)を一本道で進められる。
+
+## Non-goals
+
+- 既存の lowering 経路の変更(`single_planner` の legacy_rules は維持)
+- 仕様変更(挙動/エラー文字列/ログの変更)
+- 新しいトグル/環境変数の追加
+
+## Current Problem
+
+`src/mir/builder/control_flow/plan/planner/` に `Plan { kind: PlanKind }` が存在し、既存の `DomainPlan` と二重化している。
+
+- DomainPlan はすでに Normalizer/Verifier/Lowerer の SSOT 語彙
+- 29ai planner の “候補集合→一意化” は本来 DomainPlan の上で行うべき
+
+## Target
+
+- `CandidateSet::finalize() -> Result