diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md
index e1de1cdb..0dcf830e 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/P5-SINGLE-PLANNER-BRIDGE-ROUTER-INSTRUCTIONS.md`
+Next: `docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-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 46662182..b899a7fa 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: P5(Single-planner bridge: router → 1 entrypoint)
+ - Next: P6(Move Pattern6/7 extractors to Plan layer)
- **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/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md
new file mode 100644
index 00000000..5ab33e95
--- /dev/null
+++ b/docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md
@@ -0,0 +1,78 @@
+# Phase 29ai P6: Move Pattern6/7 extractors to Plan layer (structure) — Instructions
+
+Status: Ready for execution
+Scope: 構造整理(意味論不変・観測不変)
+
+## Goal
+
+Pattern6/7 の “抽出(extractor)” を JoinIR layer から Plan layer に移し、依存方向を一方向にする。
+
+- JoinIR は **ルーティングと lowering 実行**に徹する
+- Plan は **DomainPlan 抽出(pattern固有の知識)**の SSOT を持つ
+- `single_planner` は当面 legacy 呼び出しを維持しつつ、実装の所在地を plan 側へ寄せる
+
+## Non-goals
+
+- 仕様変更(挙動変更)
+- 既存のエラー文字列変更
+- by-name / hardcode の追加
+- Pattern2 以降の大移設(P6は Pattern6/7 のみ)
+
+## Current State (P5)
+
+- JoinIR router は `plan::single_planner` を呼ぶだけ(入口は収束済み)
+- `plan::single_planner::legacy_rules::{pattern6,pattern7}` は joinir 側の extractor を薄く呼ぶだけ
+
+## Target Architecture (P6)
+
+```
+src/mir/builder/control_flow/plan/extractors/
+ mod.rs
+ pattern6_scan_with_init.rs # moved from joinir/patterns
+ pattern7_split_scan.rs # moved from joinir/patterns
+```
+
+JoinIR 側は “互換の薄い再export” だけにする(削除はP7+):
+
+```
+src/mir/builder/control_flow/joinir/patterns/
+ pattern6_scan_with_init.rs # re-export wrapper (temporary)
+ pattern7_split_scan.rs # re-export wrapper (temporary)
+```
+
+## Implementation Steps
+
+1) Plan layer に extractor の新しい置き場を作る
+ - `src/mir/builder/control_flow/plan/extractors/mod.rs` を追加
+ - Pattern6/7 を `plan/extractors/` に **移動**(またはコピーしてから元を薄くする)
+
+2) 公開シグネチャを維持(観測不変)
+ - Pattern6: `extract_scan_with_init_plan(condition, body, fn_body) -> Result