docs(phase29ai): add P6 move extractors to plan instructions

This commit is contained in:
2025-12-29 08:06:38 +09:00
parent 5ba68da9a0
commit e031375c99
4 changed files with 85 additions and 2 deletions

View File

@ -2,7 +2,7 @@
## Current Focus: Phase 29aiPlan/Frag single-planner
Next: `docs/development/current/main/phases/phase-29ai/P5-SINGLE-PLANNER-BRIDGE-ROUTER-INSTRUCTIONS.md`
Next: `docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md`
**2025-12-29: Phase 29ag P1 完了**
- 目的: coordinator の ValueId(idx) 前提を撤去し、boundary.join_inputs を SSOT 化(仕様不変)

View File

@ -19,7 +19,7 @@ Related:
- **Phase 29aicandidate: Plan/Frag single-plannerFacts SSOT**
- 入口: `docs/development/current/main/phases/phase-29ai/README.md`
- Next: P5Single-planner bridge: router → 1 entrypoint
- Next: P6Move Pattern6/7 extractors to Plan layer
- **Phase 29ae P1✅ COMPLETE: JoinIR Regression Pack (SSOT固定)**
- 入口: `docs/development/current/main/phases/phase-29ae/README.md`

View File

@ -0,0 +1,78 @@
# Phase 29ai P6: Move Pattern6/7 extractors to Plan layer (structure) — Instructions
Status: Ready for execution
Scope: 構造整理(意味論不変・観測不変)
## Goal
Pattern6/7 の “抽出extractor” を JoinIR layer から Plan layer に移し、依存方向を一方向にする。
- JoinIR は **ルーティングと lowering 実行**に徹する
- Plan は **DomainPlan 抽出pattern固有の知識**の SSOT を持つ
- `single_planner` は当面 legacy 呼び出しを維持しつつ、実装の所在地を plan 側へ寄せる
## Non-goals
- 仕様変更(挙動変更)
- 既存のエラー文字列変更
- by-name / hardcode の追加
- Pattern2 以降の大移設P6は Pattern6/7 のみ)
## Current State (P5)
- JoinIR router は `plan::single_planner` を呼ぶだけ(入口は収束済み)
- `plan::single_planner::legacy_rules::{pattern6,pattern7}` は joinir 側の extractor を薄く呼ぶだけ
## Target Architecture (P6)
```
src/mir/builder/control_flow/plan/extractors/
mod.rs
pattern6_scan_with_init.rs # moved from joinir/patterns
pattern7_split_scan.rs # moved from joinir/patterns
```
JoinIR 側は “互換の薄い再export” だけにする削除はP7+:
```
src/mir/builder/control_flow/joinir/patterns/
pattern6_scan_with_init.rs # re-export wrapper (temporary)
pattern7_split_scan.rs # re-export wrapper (temporary)
```
## Implementation Steps
1) Plan layer に extractor の新しい置き場を作る
- `src/mir/builder/control_flow/plan/extractors/mod.rs` を追加
- Pattern6/7 を `plan/extractors/`**移動**(またはコピーしてから元を薄くする)
2) 公開シグネチャを維持(観測不変)
- Pattern6: `extract_scan_with_init_plan(condition, body, fn_body) -> Result<Option<DomainPlan>, String>`
- Pattern7: `extract_split_scan_plan(condition, body, post_loop_code) -> Result<Option<DomainPlan>, String>`
- エラー文字列は **そのまま**(ログ/テストが既存の文字列に依存しうる)
3) single_planner の legacy_rules を plan 側へ向ける
- `plan/single_planner/legacy_rules/pattern6.rs` の import を `plan::extractors::pattern6_scan_with_init` に変更
- `plan/single_planner/legacy_rules/pattern7.rs` も同様
4) JoinIR 側の旧 module は “再export wrapper” に縮退
- `joinir/patterns/pattern6_scan_with_init.rs``pub use plan::extractors::pattern6_scan_with_init::*;` のようにする
- `joinir/patterns/pattern7_split_scan.rs` も同様
- 依存が残っていないなら削除しても良いが、P6では安全に “薄い互換” を推奨
5) docs 更新
- Phase 29ai README に P6 を追記
- Now/Backlog の Next を P6 に更新
## Verification (SSOT)
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## Acceptance Criteria
- quick/回帰パックが緑(仕様不変)
- Pattern6/7 の extractor 実装の所在地が plan layer へ移る
- JoinIR layer は plan へ依存するのみ(逆依存なし)

View File

@ -34,6 +34,11 @@ Goal: pattern 名による分岐を外部APIから消し、Facts事実
- 指示書: `docs/development/current/main/phases/phase-29ai/P5-SINGLE-PLANNER-BRIDGE-ROUTER-INSTRUCTIONS.md`
- ねらい: JoinIR の pattern ルーティングを外部APIから剥がし、入口を 1 本に収束(仕様不変)
## P6: Move Pattern6/7 extractors to Plan layer
- 指示書: `docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md`
- ねらい: 抽出pattern固有知識のSSOTを plan 側へ寄せ、依存方向を一方向に固定(仕様不変)
## Verification (SSOT)
- `cargo build --release`