phase29ai(p9): planner-first pattern7 split-scan subset
This commit is contained in:
@ -2,7 +2,12 @@
|
||||
|
||||
## Current Focus: Phase 29ai(Plan/Frag single-planner)
|
||||
|
||||
Next: `docs/development/current/main/phases/phase-29ai/P9-PLANNER-PATTERN7-SPLITSCAN-WIRE-INSTRUCTIONS.md`
|
||||
Next: `docs/development/current/main/phases/phase-29ai/P10-MOVE-PATTERN2-EXTRACTOR-TO-PLAN-LAYER-INSTRUCTIONS.md`
|
||||
|
||||
**2025-12-29: Phase 29ai P9 完了** ✅
|
||||
- 目的: Pattern7 split-scan subset を Facts→Planner→DomainPlan まで到達させ、single_planner の Pattern7 で planner-first を開始(仕様不変)
|
||||
- 実装: `src/mir/builder/control_flow/plan/facts/loop_facts.rs` / `src/mir/builder/control_flow/plan/planner/build.rs` / `src/mir/builder/control_flow/plan/single_planner/rules.rs`
|
||||
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` PASS
|
||||
|
||||
**2025-12-29: Phase 29ai P8 完了** ✅
|
||||
- 目的: Facts→Planner を実行経路へ 1 歩だけ接続し、Pattern6(scan-with-init)の subset から吸収を開始(仕様不変)
|
||||
|
||||
@ -19,7 +19,7 @@ Related:
|
||||
|
||||
- **Phase 29ai(candidate): Plan/Frag single-planner(Facts SSOT)**
|
||||
- 入口: `docs/development/current/main/phases/phase-29ai/README.md`
|
||||
- Next: P9(Planner: Pattern7 split-scan subset)
|
||||
- Next: P10(Move Pattern2 extractor → plan layer)
|
||||
|
||||
- **Phase 29ae P1(✅ COMPLETE): JoinIR Regression Pack (SSOT固定)**
|
||||
- 入口: `docs/development/current/main/phases/phase-29ae/README.md`
|
||||
|
||||
@ -0,0 +1,106 @@
|
||||
# Phase 29ai P10: Move Pattern2 extractor to plan layer(SSOT)
|
||||
|
||||
Date: 2025-12-29
|
||||
Status: Ready for execution
|
||||
Scope: Pattern2(Break / LoopBodyLocal / promotion)抽出の SSOT を plan 層へ移設(仕様不変)
|
||||
Goal: JoinIR 側の “pattern固有知識” を削減し、依存方向を `joinir → plan` の一方向に固定する
|
||||
|
||||
## Objective
|
||||
|
||||
Pattern2 の DomainPlan 抽出(`DomainPlan::Pattern2Break`)を `joinir/patterns/extractors/*` から `plan/extractors/*` に移し、
|
||||
JoinIR 側は薄い wrapper(re-export)に縮退させる。`single_planner` の legacy_rules も plan 側 extractor を参照するように統一する。
|
||||
|
||||
この P10 は “移設だけ” を目的にし、抽出ロジックの意味論は変えない(pure extraction のまま)。
|
||||
|
||||
## Non-goals(この P10 ではやらない)
|
||||
|
||||
- Facts→Planner へ Pattern2 を吸収する(P11+)
|
||||
- promotion policy / NotApplicable / Freeze など契約内容の変更
|
||||
- 新しい fixture/smoke 追加(既存回帰で担保)
|
||||
- env var / デバッグトグル追加
|
||||
- by-name ディスパッチの追加(禁止)
|
||||
|
||||
## Current State
|
||||
|
||||
- Pattern2 extractor(JoinIR 側):
|
||||
- `src/mir/builder/control_flow/joinir/patterns/extractors/pattern2.rs`
|
||||
- `-> Result<Option<DomainPlan>, String>` で `DomainPlan::Pattern2Break(Pattern2BreakPlan { ... })` を返す
|
||||
- single_planner legacy:
|
||||
- `src/mir/builder/control_flow/plan/single_planner/legacy_rules/pattern2.rs`
|
||||
- 現状は JoinIR 側 extractor を呼んでいる
|
||||
|
||||
## Target Architecture
|
||||
|
||||
```
|
||||
src/mir/builder/control_flow/plan/extractors/
|
||||
├── mod.rs
|
||||
├── pattern6_scan_with_init.rs
|
||||
├── pattern7_split_scan.rs
|
||||
└── pattern2_break.rs ✨ NEW(P10)
|
||||
|
||||
src/mir/builder/control_flow/joinir/patterns/extractors/
|
||||
├── pattern2.rs (縮退: plan 側へ delegate / re-export)
|
||||
└── mod.rs (必要なら export 更新)
|
||||
```
|
||||
|
||||
## Implementation Steps(Critical Order)
|
||||
|
||||
### Step 1: plan 側へ extractor を追加(pure, 既存コードの移設)
|
||||
|
||||
追加:
|
||||
- `src/mir/builder/control_flow/plan/extractors/pattern2_break.rs`
|
||||
|
||||
方針:
|
||||
- `joinir/patterns/extractors/pattern2.rs` の実装を **意味論そのまま** 移植(import path を plan 側に合わせるだけ)。
|
||||
- 返り値型/引数/エラーメッセージは変更しない。
|
||||
|
||||
### Step 2: plan/extractors/mod.rs に登録
|
||||
|
||||
更新:
|
||||
- `src/mir/builder/control_flow/plan/extractors/mod.rs`
|
||||
|
||||
追加:
|
||||
- `pub(in crate::mir::builder) mod pattern2_break;`
|
||||
- `pub(in crate::mir::builder) use pattern2_break::extract_pattern2_break_plan;`(既存命名に合わせる)
|
||||
|
||||
### Step 3: JoinIR 側 extractor を wrapper 化
|
||||
|
||||
更新:
|
||||
- `src/mir/builder/control_flow/joinir/patterns/extractors/pattern2.rs`
|
||||
|
||||
方針:
|
||||
- 関数はそのまま残す(外部呼び出し互換)。
|
||||
- 中身は plan 側 extractor を呼ぶだけにする(または re-export)。
|
||||
- JoinIR 側の helper/private 関数が必要なら、先に plan 側へ移して SSOT を plan に寄せる。
|
||||
|
||||
### Step 4: single_planner legacy_rules の参照先を plan 側に統一
|
||||
|
||||
更新:
|
||||
- `src/mir/builder/control_flow/plan/single_planner/legacy_rules/pattern2.rs`
|
||||
|
||||
方針:
|
||||
- `crate::mir::builder::control_flow::plan::extractors::pattern2_break::*` を呼ぶように変更。
|
||||
- 返り値/ログ/順序は維持。
|
||||
|
||||
### Step 5: SSOT docs 更新
|
||||
|
||||
更新:
|
||||
- `docs/development/current/main/phases/phase-29ai/README.md`
|
||||
- `docs/development/current/main/10-Now.md`
|
||||
- `docs/development/current/main/30-Backlog.md`
|
||||
|
||||
最低限:
|
||||
- P10 の scope(移設のみ・仕様不変)を明記。
|
||||
- Next(P11)候補を 1 行だけ(例: Pattern2 を Facts→Planner の subset に吸収)。
|
||||
|
||||
## Verification (SSOT)
|
||||
|
||||
- `cargo build --release`
|
||||
- `./tools/smokes/v2/run.sh --profile quick`
|
||||
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
期待:
|
||||
- 既定挙動不変で PASS
|
||||
- 新しいログ増加なし
|
||||
- 新しい warning 増加なし
|
||||
|
||||
@ -53,6 +53,13 @@ Goal: pattern 名による分岐を外部APIから消し、Facts(事実)→
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ai/P9-PLANNER-PATTERN7-SPLITSCAN-WIRE-INSTRUCTIONS.md`
|
||||
- ねらい: Pattern7(split-scan)の最小ケースを Facts→Planner で `Ok(Some(DomainPlan::SplitScan))` まで到達させ、single_planner で planner-first を開始(仕様不変を維持しつつ段階吸収)
|
||||
- 完了: Facts split-scan subset / planner candidate / single_planner Pattern7 planner-first を接続
|
||||
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
## P10: Move Pattern2 extractor to plan layer(SSOT)
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ai/P10-MOVE-PATTERN2-EXTRACTOR-TO-PLAN-LAYER-INSTRUCTIONS.md`
|
||||
- ねらい: Pattern2 の抽出(pattern固有知識)を plan 側へ寄せて依存方向を一方向に固定(仕様不変)
|
||||
|
||||
## Verification (SSOT)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user