diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md
index 2b4bbf39..c6bbfbcd 100644
--- a/CURRENT_TASK.md
+++ b/CURRENT_TASK.md
@@ -19,8 +19,8 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu
`docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` が移行タスクの Done 判定の入口。
**Next implementation (Phase 29ao P25)**
-- 目的: TBD
-- 指示書: TBD
+- 目的: Pattern5(Infinite Early-Exit)を strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分を Fail-Fast で検知する(既定挙動は不変)
+- 指示書: `docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md`
**2025-12-30: Phase 29ao P24 COMPLETE (Pattern7 strict/dev adopt from facts)**
Pattern7(SplitScan)を strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分を Fail-Fast で検知できるようにした。
diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md
index 7bfcca36..85843263 100644
--- a/docs/development/current/main/10-Now.md
+++ b/docs/development/current/main/10-Now.md
@@ -2,8 +2,8 @@
## Current Focus: Phase 29ao(CorePlan composition)
-Next: Phase 29ao P25(TBD)
-指示書: TBD
+Next: Phase 29ao P25(Pattern5 strict/dev adopt from facts)
+指示書: `docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md`
運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ)
運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う
移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`
diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md
index ee3e5b61..af15c8c2 100644
--- a/docs/development/current/main/30-Backlog.md
+++ b/docs/development/current/main/30-Backlog.md
@@ -15,8 +15,8 @@ Related:
- **Phase 29ao(active): CorePlan composition from Skeleton/Feature**
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
- - 状況: P0–P24 ✅ 完了 / Next: P25(TBD)
- - Next 指示書: TBD
+ - 状況: P0–P24 ✅ 完了 / Next: P25(Pattern5 strict/dev adopt from facts)
+ - Next 指示書: `docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md`
- **Phase 29af(✅ COMPLETE): Boundary hygiene / regression entrypoint / carrier layout SSOT**
- 入口: `docs/development/current/main/phases/phase-29af/README.md`
diff --git a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
index 88d53dbb..aa176581 100644
--- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
+++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
@@ -34,7 +34,7 @@ Related:
## 1.1 Current (active)
- Active phase: `docs/development/current/main/phases/phase-29ao/README.md`
-- Next step: TBD
+- Next step: `docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md`
## 2. すでに固めた SSOT(再発防止の土台)
diff --git a/docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md
new file mode 100644
index 00000000..d22118aa
--- /dev/null
+++ b/docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md
@@ -0,0 +1,134 @@
+---
+Status: Ready
+Scope: code+tests+docs(strict/dev のみ、仕様不変)
+Related:
+ - docs/development/current/main/phases/phase-29ao/README.md
+ - tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
+ - tools/smokes/v2/profiles/integration/apps/phase286_pattern5_break_vm.sh
+ - src/mir/builder/control_flow/joinir/patterns/router.rs
+ - src/mir/builder/control_flow/plan/normalizer/pattern5_infinite_early_exit.rs
+ - src/mir/builder/control_flow/plan/facts/pattern5_infinite_early_exit_facts.rs
+---
+
+# Phase 29ao P25: strict/dev Pattern5 (Infinite Early-Exit) を Facts→CorePlan で shadow adopt
+
+Date: 2025-12-30
+Status: Ready for execution
+Goal: Pattern5(loop(true) + early exit)も strict/dev では “Facts→CorePlan” を通し、DomainPlan 経路との差分(facts/extractor/normalize のズレ)を早期検知できるようにする(release 既定挙動は不変)。
+
+## 背景
+
+- P17/P23/P24 で Pattern1/3/7 を strict/dev のみ Facts→CorePlan へ寄せた。
+- Pattern5 は回帰ゲート(phase29ae pack)に含まれているが、現状は strict/dev で Facts→CorePlan を踏んでいない。
+- P16 で Pattern5 の exit join を `Frag.block_params + EdgeArgs` へ移しているため、ここを adopt 対象にすると “CorePlan化の実地” が進む。
+
+## 非目的
+
+- release 既定経路の変更
+- Pattern5 の対応範囲拡張(facts subset の拡張)
+- 新しい env var/恒常ログの追加
+- DomainPlan の撤去(段階移行中)
+
+## 実装方針
+
+### 1) Facts→CorePlan の入口を PlanNormalizer に追加(Pattern5専用・薄い変換)
+
+対象:
+- `src/mir/builder/control_flow/plan/normalizer/mod.rs`
+- `src/mir/builder/control_flow/plan/normalizer/pattern5_infinite_early_exit.rs`
+
+追加:
+- `pub(in crate::mir::builder) fn normalize_pattern5_infinite_early_exit_from_facts(...) -> Result