From 8756ad7a28b25fb1bbc4f905d05e6c660d95604f Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 09:47:39 +0900 Subject: [PATCH] docs(phase29ao): add p22 pattern1 coreloop dedup instruction --- CURRENT_TASK.md | 4 +- docs/development/current/main/10-Now.md | 4 +- docs/development/current/main/30-Backlog.md | 4 +- ...ERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md | 99 +++++++++++++++++++ .../current/main/phases/phase-29ao/README.md | 3 +- 5 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index bfa0939a..433d3286 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 P22)** -- 目的: TBD -- 指示書: TBD +- 目的: Pattern1 の CoreLoop 構築コードを DomainPlan/Facts で二重化させず、1箇所へ統一する(divergence防止) +- 指示書: `docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md` **2025-12-30: Phase 29ao P21 COMPLETE (Pattern1 subset step-only gate)** Pattern1 subset を body=step のみに引き締め、strict/dev shadow adopt の誤マッチを遮断した。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 5f4c3d46..f4c27daa 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 P22(TBD) -指示書: TBD +Next: Phase 29ao P22(dedup: 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` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 6a9b6274..d04eb832 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–P21 ✅ 完了 / Next: P22(TBD) - - Next 指示書: TBD + - 状況: P0–P21 ✅ 完了 / Next: P22(Pattern1 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` diff --git a/docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md new file mode 100644 index 00000000..4bd24d6f --- /dev/null +++ b/docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md @@ -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: Pattern1(SimpleWhile)の 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` + +責務: +- blocks allocate(Standard5) +- ValueId allocate(loop_var_current/cond_loop/loop_var_next) +- compare/binop lowering(既存 helper を使用) +- header/step effects 作成 +- header phi 作成 +- frag(branches + wires)作成 +- final_values(loop 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"` + diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 88a447b6..de278075 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -134,4 +134,5 @@ Gate(SSOT): ## Next(planned) -- P22: TBD +- P22: Pattern1 CoreLoop 構築の重複排除(DomainPlan/Facts の SSOT 統一) + - 指示書: `docs/development/current/main/phases/phase-29ao/P22-DEDUP-PATTERN1-CORELOOP-CONSTRUCTION-INSTRUCTIONS.md`