docs(phase29ao): add p23 pattern3 strict adopt instruction

This commit is contained in:
2025-12-30 10:09:19 +09:00
parent 066da59136
commit dbf9438cbb
5 changed files with 102 additions and 7 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 P23)**
- 目的: TBD
- 指示書: TBD
- 目的: strict/dev の Pattern3IfPhiでも Facts→CorePlan を採用し、DomainPlan経路との差分/ズレを Fail-Fast で検知する
- 指示書: `docs/development/current/main/phases/phase-29ao/P23-STRICT-ADOPT-PATTERN3-IFPHI-FROM-FACTS-INSTRUCTIONS.md`
**2025-12-30: Phase 29ao P22 COMPLETE (Pattern1 CoreLoop dedup)**
Pattern1 の CoreLoop 構築を SSOT で 1 箇所に統一し、DomainPlan/Facts の二重化を解消した。

View File

@ -2,8 +2,8 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P23TBD
指示書: TBD
Next: Phase 29ao P23strict/dev adopt: Pattern3 IfPhi from facts
指示書: `docs/development/current/main/phases/phase-29ao/P23-STRICT-ADOPT-PATTERN3-IFPHI-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`
- 状況: P0P22 ✅ 完了 / Next: P23TBD
- Next 指示書: TBD
- 状況: P0P22 ✅ 完了 / Next: P23Pattern3 strict adopt
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P23-STRICT-ADOPT-PATTERN3-IFPHI-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

@ -0,0 +1,94 @@
---
Status: Ready
Scope: code+tests+docsstrict/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/phase118_pattern3_if_sum_vm.sh
- src/mir/builder/control_flow/joinir/patterns/router.rs
- src/mir/builder/control_flow/plan/normalizer/pattern3_if_phi.rs
- src/mir/builder/control_flow/plan/facts/pattern3_ifphi_facts.rs
---
# Phase 29ao P23: strict/dev Pattern3 (IfPhi) を Facts→CorePlan で shadow adoptDomainPlan依存を減らす
Date: 2025-12-30
Status: Ready for execution
Goal: Pattern3IfPhiも strict/dev では “Facts→CorePlan” を通すことで、DomainPlan 経路の二重定義/ズレを早期に検知できるようにする(既定挙動は不変)。
## 背景
- P17〜P22 で Pattern1 の strict/dev shadow adoptFacts→CorePlan(skeleton))を導入し、回帰ゲートで必ず踏むようにした。
- 次に意味があるのは、IfPhi のような “join 値postphi” を伴うループPattern3でも同じ方針を適用し、
Facts/Planner/Normalizer のズレを strict/dev で FailFast できるようにすること。
## 非目的
- release 既定経路の変更
- Pattern3 の対応範囲拡張subset拡張はしない
- DomainPlan の撤去(段階移行中)
## 実装方針
### 1) Facts→CorePlan の入口を PlanNormalizer に追加Pattern3専用・最小
対象:
- `src/mir/builder/control_flow/plan/normalizer/mod.rs`
- `src/mir/builder/control_flow/plan/normalizer/pattern3_if_phi.rs`
追加:
- `pub(in crate::mir::builder) fn normalize_pattern3_if_phi_from_facts(...) -> Result<Option<CorePlan>, String>`
仕様:
- `CanonicalLoopFacts.facts.pattern3_ifphi``Some` のときだけ `Some(CorePlan)` を返す
- それ以外は `Ok(None)`fallback維持
- 実装は `Pattern3IfPhiFacts -> Pattern3IfPhiPlan` への “薄い変換” を行い、既存の `normalize_pattern3_if_phi()` を呼ぶ
- ここでロジックを再実装しないSSOTを増やさない
### 2) router の strict/dev shadow adopt を Pattern3 に拡張
対象:
- `src/mir/builder/control_flow/joinir/patterns/router.rs`
方針:
- 既存の Pattern1 strict/dev adopt と同じ方針で、Pattern3 も strict/dev では adopt を “強制” する
- `DomainPlan::Pattern3IfPhi(_)` を選んだのに facts が無い/矛盾する場合は `Err(...)`strict/dev のみ)
擬似コード:
```rust
if strict_or_dev && matches!(domain_plan, DomainPlan::Pattern3IfPhi(_)) {
let facts = outcome.facts.as_ref().ok_or("...facts missing")?;
if facts.facts.pattern3_ifphi.is_none() { return Err("...facts mismatch"); }
let core = PlanNormalizer::normalize_pattern3_if_phi_from_facts(builder, facts, ctx)?
.ok_or("...compose rejected")?;
PlanVerifier::verify(&core)?;
return PlanLowerer::lower(builder, core, ctx);
}
```
### 3) 回帰ゲート
Pattern3 の regression は既に strict で動いている:
- `tools/smokes/v2/profiles/integration/apps/phase118_pattern3_if_sum_vm.sh``HAKO_JOINIR_STRICT=1`
よって P23 を入れたら、`phase29ae_regression_pack_vm.sh` の Pattern3 がそのまま adopt 経路のゲートになる。
## テスト(必須)
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
(任意・局所ユニット)
- PlanNormalizer の `normalize_pattern3_if_phi_from_facts``Some/None` を返す境界テスト
## docs 更新
- `docs/development/current/main/phases/phase-29ao/README.md`P23 追加、Next を更新)
- `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md`
## コミット
- `git add -A`
- `git commit -m "phase29ao(p23): strict/dev adopt pattern3 from facts"`

View File

@ -139,4 +139,5 @@ GateSSOT:
## Nextplanned
- P23: TBD
- P23: strict/dev Pattern3 (IfPhi) を Facts→CorePlan で shadow adopt
- 指示書: `docs/development/current/main/phases/phase-29ao/P23-STRICT-ADOPT-PATTERN3-IFPHI-FROM-FACTS-INSTRUCTIONS.md`