docs(phase29ao): add p22 pattern1 coreloop dedup instruction

This commit is contained in:
2025-12-30 09:47:39 +09:00
parent 9514e105b1
commit 8756ad7a28
5 changed files with 107 additions and 7 deletions

View File

@ -2,8 +2,8 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P22TBD
指示書: TBD
Next: Phase 29ao P22dedup: Pattern1 coreloop construction
指示書: `docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-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`
- 状況: P0P21 ✅ 完了 / Next: P22TBD
- Next 指示書: TBD
- 状況: P0P21 ✅ 完了 / Next: P22Pattern1 dedup
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-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,99 @@
---
Status: Ready
Scope: refactor+tests意味論不変
Related:
- docs/development/current/main/phases/phase-29ao/README.md
- tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
- src/mir/builder/control_flow/plan/normalizer/pattern1_simple_while.rs
- src/mir/builder/control_flow/plan/normalizer/skeleton_loop.rs
- src/mir/builder/control_flow/joinir/patterns/router.rs
---
# Phase 29ao P22: Pattern1 CoreLoop 構築の重複排除DomainPlan/Fact Skeleton の SSOT 統一)
Date: 2025-12-30
Status: Ready for execution
Goal: Pattern1SimpleWhileの CoreLoop 構築コードが `DomainPlan` 経路と `Facts→CorePlan(skeleton)` 経路で二重化しているため、1 箇所に統一して divergence を防ぐ。
## 背景
- 現在 Pattern1 の “CorePlan::Loop を作る” 実装が2ヶ所に存在する:
- `src/mir/builder/control_flow/plan/normalizer/pattern1_simple_while.rs`DomainPlan→CorePlan
- `src/mir/builder/control_flow/plan/normalizer/skeleton_loop.rs`Facts→CorePlan(skeleton), strict/dev shadow adopt で使用)
- 構造が同じなのに分岐があると、将来の修正が片方だけに入り、意味論/契約がズレる危険が高い。
P22では “CoreLoop を構築するロジック” を 1 箇所に集約し、両経路が同一実装を通るようにする。
## 非目的
- Pattern1 の対応範囲拡張subset を広げない)
- strict/dev shadow adopt の適用範囲拡張Pattern1以外へ広げない
- exit/cleanup/value_join の合成拡張P20 SSOT は docs のみ。実装拡張は P23+
## 実装方針
### 1) CoreLoop 構築ヘルパーを新設SSOT
新規ファイル(推奨):
- `src/mir/builder/control_flow/plan/normalizer/pattern1_coreloop_builder.rs`
中身(例):
- `pub(super) fn build_pattern1_coreloop(builder: &mut MirBuilder, loop_var: &str, condition: &ASTNode, loop_increment: &ASTNode, ctx: &LoopPatternContext) -> Result<CoreLoopPlan, String>`
責務:
- blocks allocateStandard5
- ValueId allocateloop_var_current/cond_loop/loop_var_next
- compare/binop lowering既存 helper を使用)
- header/step effects 作成
- header phi 作成
- fragbranches + wires作成
- final_valuesloop var mapping作成
注意:
- `frag.exits` は Pattern1 subset では常に空のままにするP20の ExitMap 合成は P23+ で扱う)。
- 既存の `pattern1_simple_while.rs` の debug trace は維持(必要なら wrapper 側で出す)。
### 2) DomainPlan 経路をヘルパー呼び出しに差し替え
対象:
- `src/mir/builder/control_flow/plan/normalizer/pattern1_simple_while.rs`
やること:
- `normalize_pattern1_simple_while()` の “Step 1〜13” 相当の CoreLoop 構築部分を `build_pattern1_coreloop()` に置き換える。
- 返り値 `CorePlan::Loop(loop_plan)` はそのまま。
### 3) Facts→CorePlan(skeleton) 経路をヘルパー呼び出しに差し替え
対象:
- `src/mir/builder/control_flow/plan/normalizer/skeleton_loop.rs`
やること:
- `normalize_loop_skeleton_from_facts()` の Pattern1 subset で CoreLoop を構築する部分を `build_pattern1_coreloop()` に置き換える。
- `value_join_needed` gate / skeleton gate / pattern1 facts gate は維持。
- `frag.exits` はヘルパーで空固定(ここで presence から作らない)。
### 4) テストで境界を固定(最小)
- `pattern1_simple_while.rs` のテスト(あるなら)/ もしくは新規ユニットテストで、ヘルパーが
- branches=1, wires=2, phis=1 を生成する
- `frag.exits.is_empty()` を維持する
を固定。
※ block id/value id は比較しないallocator の都合で不安定)。
## 検証(必須)
- `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`P22完了追記、NextをP23へ
- `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md`
## コミット
- `git add -A`
- `git commit -m "phase29ao(p22): dedup pattern1 coreloop construction"`

View File

@ -134,4 +134,5 @@ GateSSOT:
## Nextplanned
- P22: TBD
- P22: Pattern1 CoreLoop 構築の重複排除DomainPlan/Facts の SSOT 統一)
- 指示書: `docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md`