docs(phase29ao): add p26 pattern2 subset strict adopt instruction

This commit is contained in:
2025-12-30 11:03:28 +09:00
parent 45369ba763
commit 00f824e3e5
6 changed files with 113 additions and 8 deletions

View File

@ -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 P26)**
- 目的: TBD
- 指示書: TBD
- 目的: Pattern2(Break) のうち Facts が表現できる subset を strict/dev で Facts→CorePlan に寄せ、段階的に CorePlan 合成へ収束(既定挙動は不変)
- 指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
**2025-12-30: Phase 29ao P25 COMPLETE (Pattern5 strict/dev adopt from facts)**
Pattern5Infinite Early-Exitを strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分を Fail-Fast で検知できるようにした。

View File

@ -2,8 +2,8 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P26TBD
指示書: TBD
Next: Phase 29ao P26Pattern2 subset strict/dev adopt from facts
指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-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`

View File

@ -15,8 +15,8 @@ Related:
- **Phase 29aoactive: CorePlan composition from Skeleton/Feature**
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
- 状況: P0P25 ✅ 完了 / Next: P26TBD
- Next 指示書: TBD
- 状況: P0P25 ✅ 完了 / Next: P26Pattern2 subset strict/dev adopt from facts
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- **Phase 29af✅ COMPLETE: Boundary hygiene / regression entrypoint / carrier layout SSOT**
- 入口: `docs/development/current/main/phases/phase-29af/README.md`

View File

@ -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/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
## 2. すでに固めた SSOT再発防止の土台

View File

@ -0,0 +1,98 @@
---
Status: Ready
Scope: code+tests+docsstrict/dev のみ、仕様不変)
Related:
- docs/development/current/main/phases/phase-29ao/README.md
- docs/development/current/main/phases/phase-29ae/README.md
- tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
- tools/smokes/v2/profiles/integration/apps/phase29ai_pattern2_break_plan_subset_ok_min_vm.sh
- src/mir/builder/control_flow/joinir/patterns/router.rs
- src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs
- src/mir/builder/control_flow/plan/facts/pattern2_break_facts.rs
---
# Phase 29ao P26: strict/dev Pattern2(Break) “plan subset” を Facts→CorePlan で shadow adopt
Date: 2025-12-30
Status: Ready for execution
Goal: Pattern2conditional breakのうち **Facts が完全に表現できる最小 subset** だけを strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分facts/extractor/normalize のズレを早期検知できるようにするrelease 既定挙動は不変)。
## 背景
- Pattern2 は real-world 形状LoopBodyLocal promotion など)も含むため、いきなり “全 Pattern2 を adopt 強制” すると strict/dev での fail-fast が過剰になりやすい。
- 一方で、`Pattern2BreakFacts` の subset は既に SSOT として存在し、fixture/smoke もある。
- そこで P26 は **subset だけ**を “planner 由来の DomainPlan のときに限って” shadow adopt し、段階的に CorePlan 合成へ寄せる。
## 非目的
- Pattern2 全体LoopBodyLocal promotion を含む)を Facts→CorePlan に強制する
- Facts subset 拡張Phase 29ao の次段で扱う)
- 新しい env var/恒常ログ追加
- release 既定経路の変更
## 実装方針
### 1) Facts→CorePlan の入口を PlanNormalizer に追加Pattern2 subset
対象:
- `src/mir/builder/control_flow/plan/normalizer/mod.rs`
- `src/mir/builder/control_flow/plan/normalizer/pattern2_break.rs`
追加:
- `pub(in crate::mir::builder) fn normalize_pattern2_break_from_facts(...) -> Result<Option<CorePlan>, String>`
仕様:
- `CanonicalLoopFacts.facts.pattern2_break``Some` のときだけ `Some(CorePlan)` を返す
- それ以外は `Ok(None)`fallback維持
- 実装は “薄い変換” のみ:
- `Pattern2BreakFacts -> Pattern2BreakPlan` を機械的に詰め替える
- `promotion``facts.facts.pattern2_loopbodylocal` があれば同様に乗せる(ただし P26 の gate は subset fixture
- 既存の `normalize_pattern2_break(builder, Pattern2BreakPlan, ctx)` を呼ぶ
- Pattern2 のロジックは再実装しないSSOTを増やさない
### 2) router の strict/dev shadow adopt を Pattern2 subset に追加planner 由来のみ)
対象:
- `src/mir/builder/control_flow/joinir/patterns/router.rs`
方針:
- strict/dev でも **Pattern2 全体には強制しない**
- 条件:
- 選ばれた `domain_plan``DomainPlan::Pattern2Break(_)`
- かつ `outcome.plan``Some(DomainPlan::Pattern2Break(_))`planner が作った subset であることの判定)
- 上記を満たすときだけ adopt:
- `facts.facts.pattern2_break``Some` であることを assertfail-fast
- `PlanNormalizer::normalize_pattern2_break_from_facts(...)` を呼び、`Some(CorePlan)` を要求fail-fast
これにより、
- LoopBodyLocal promotion 等の “facts未対応の Pattern2” は、従来どおり DomainPlan 経路で動くstrict/dev の過剰failを避ける
- subset は strict/dev で Facts→CorePlan に寄る(段階移行)
### 3) 回帰ゲートSSOTに subset smoke を追加
P26 の adopt 経路は、既存の phase29ab_pattern2_*LoopBodyLocal含むでは踏まれない可能性があるため、subset 固定の smoke を gate に追加して “必ず踏む” を SSOT 化する。
対象の既存 smoke:
- `tools/smokes/v2/profiles/integration/apps/phase29ai_pattern2_break_plan_subset_ok_min_vm.sh`strict、exit=15
追加:
- `tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` に filter を 1 行追加:
- `run_filter "pattern2_subset" "phase29ai_pattern2_break_plan_subset_ok_min_vm"`
- `docs/development/current/main/phases/phase-29ae/README.md` の Regression pack 項目へ追記
## テスト(必須)
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## docs 更新
- `docs/development/current/main/phases/phase-29ao/README.md`P26 追加、Next 更新)
- `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md`
- `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`Current/Next 更新)
## コミット
- `git add -A`
- `git commit -m "phase29ao(p26): strict/dev adopt pattern2 break subset from facts"`

View File

@ -152,6 +152,13 @@ GateSSOT:
- 指示書: `docs/development/current/main/phases/phase-29ao/P25-STRICT-ADOPT-PATTERN5-INFINITE-EARLY-EXIT-FROM-FACTS-INSTRUCTIONS.md`
- ねらい: Pattern5 を strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分を早期検知(既定挙動は不変)
## P26: strict/dev Pattern2(Break) subset adopt from facts
- 指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- ねらい: Pattern2 のうち Facts が表現できる subset を strict/dev で Facts→CorePlan に寄せ、段階的に CorePlan 合成へ収束(既定挙動は不変)
## Nextplanned
- P26: TBD
- Next: P26実装
- 指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- After P26: P27TBD