From e031375c9927f10fef130a006195605b01d04722 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Mon, 29 Dec 2025 08:06:38 +0900 Subject: [PATCH] docs(phase29ai): add P6 move extractors to plan instructions --- docs/development/current/main/10-Now.md | 2 +- docs/development/current/main/30-Backlog.md | 2 +- ...7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md | 78 +++++++++++++++++++ .../current/main/phases/phase-29ai/README.md | 5 ++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index e1de1cdb..0dcf830e 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -2,7 +2,7 @@ ## Current Focus: Phase 29ai(Plan/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 化(仕様不変) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 46662182..b899a7fa 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -19,7 +19,7 @@ Related: - **Phase 29ai(candidate): Plan/Frag single-planner(Facts SSOT)** - 入口: `docs/development/current/main/phases/phase-29ai/README.md` - - Next: P5(Single-planner bridge: router → 1 entrypoint) + - Next: P6(Move Pattern6/7 extractors to Plan layer) - **Phase 29ae P1(✅ COMPLETE): JoinIR Regression Pack (SSOT固定)** - 入口: `docs/development/current/main/phases/phase-29ae/README.md` diff --git a/docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md new file mode 100644 index 00000000..5ab33e95 --- /dev/null +++ b/docs/development/current/main/phases/phase-29ai/P6-MOVE-PATTERN6-7-EXTRACTORS-TO-PLAN-LAYER-INSTRUCTIONS.md @@ -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, String>` + - Pattern7: `extract_split_scan_plan(condition, body, post_loop_code) -> Result, 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 へ依存するのみ(逆依存なし) + diff --git a/docs/development/current/main/phases/phase-29ai/README.md b/docs/development/current/main/phases/phase-29ai/README.md index 06630e8b..08b0e4f1 100644 --- a/docs/development/current/main/phases/phase-29ai/README.md +++ b/docs/development/current/main/phases/phase-29ai/README.md @@ -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`