phase29ai(p9): planner-first pattern7 split-scan subset

This commit is contained in:
2025-12-29 09:17:53 +09:00
parent 82b0a87599
commit 9abc726394
7 changed files with 715 additions and 11 deletions

View File

@ -2,7 +2,12 @@
## Current Focus: Phase 29aiPlan/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 歩だけ接続し、Pattern6scan-with-initの subset から吸収を開始(仕様不変)

View File

@ -19,7 +19,7 @@ Related:
- **Phase 29aicandidate: Plan/Frag single-plannerFacts SSOT**
- 入口: `docs/development/current/main/phases/phase-29ai/README.md`
- Next: P9Planner: Pattern7 split-scan subset
- Next: P10Move Pattern2 extractor → plan layer
- **Phase 29ae P1✅ COMPLETE: JoinIR Regression Pack (SSOT固定)**
- 入口: `docs/development/current/main/phases/phase-29ae/README.md`

View File

@ -0,0 +1,106 @@
# Phase 29ai P10: Move Pattern2 extractor to plan layerSSOT
Date: 2025-12-29
Status: Ready for execution
Scope: Pattern2Break / LoopBodyLocal / promotion抽出の SSOT を plan 層へ移設(仕様不変)
Goal: JoinIR 側の “pattern固有知識” を削減し、依存方向を `joinir → plan` の一方向に固定する
## Objective
Pattern2 の DomainPlan 抽出(`DomainPlan::Pattern2Break`)を `joinir/patterns/extractors/*` から `plan/extractors/*` に移し、
JoinIR 側は薄い wrapperre-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 extractorJoinIR 側):
- `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 ✨ NEWP10
src/mir/builder/control_flow/joinir/patterns/extractors/
├── pattern2.rs (縮退: plan 側へ delegate / re-export)
└── mod.rs (必要なら export 更新)
```
## Implementation StepsCritical 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移設のみ・仕様不変を明記。
- NextP11候補を 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 増加なし

View File

@ -53,6 +53,13 @@ Goal: pattern 名による分岐を外部APIから消し、Facts事実
- 指示書: `docs/development/current/main/phases/phase-29ai/P9-PLANNER-PATTERN7-SPLITSCAN-WIRE-INSTRUCTIONS.md`
- ねらい: Pattern7split-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 layerSSOT
- 指示書: `docs/development/current/main/phases/phase-29ai/P10-MOVE-PATTERN2-EXTRACTOR-TO-PLAN-LAYER-INSTRUCTIONS.md`
- ねらい: Pattern2 の抽出pattern固有知識を plan 側へ寄せて依存方向を一方向に固定(仕様不変)
## Verification (SSOT)