From 24d1e61ff86cb9e171fe2c61faa882ac6ac6a998 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 09:00:12 +0900 Subject: [PATCH] phase29ao(p18): plumb planner outcome through single_planner --- CURRENT_TASK.md | 9 +++++---- docs/development/current/main/10-Now.md | 9 +++++++-- docs/development/current/main/30-Backlog.md | 4 ++-- .../current/main/phases/phase-29ao/README.md | 8 ++++++-- .../control_flow/joinir/patterns/router.rs | 10 +--------- .../control_flow/plan/single_planner/mod.rs | 7 +++++++ .../control_flow/plan/single_planner/rules.rs | 17 +++++++++++++---- 7 files changed, 41 insertions(+), 23 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 1ed60ba7..c5597a2c 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -18,10 +18,8 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu **CorePlan migration 道筋 SSOT** `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` が移行タスクの Done 判定の入口。 -**Next implementation (Phase 29ao P18)** -P17 で導入した router の二重 planner 呼び出しを撤去し、single_planner が planner outcome(facts+plan)を返す SSOT に寄せる。 - -- 指示書: `docs/development/current/main/phases/phase-29ao/P18-SINGLE_PLANNER-OUTCOME-PLUMBING-INSTRUCTIONS.md` +**Next implementation (Phase 29ao P19)** +TBD **2025-12-29: Phase 29am P0 COMPLETE (CorePlan If/Exit lowerer/verifier)** CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan 移行の土台を作った。 @@ -29,6 +27,9 @@ CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan **2025-12-30: Phase 29ao P12 COMPLETE (Pattern7 SplitScan step join via block_params)** Pattern7 SplitScan の step join を `Frag.block_params + EdgeArgs` で表現し、CorePhiInfo の step PHI を撤去した。 +**2025-12-30: Phase 29ao P18 COMPLETE (single_planner outcome plumbing)** +single_planner が planner outcome を返す SSOT に寄せ、router の二重 planner 実行を撤去した。 + **2025-12-30: Phase 29ao P17 COMPLETE (Pattern1 strict/dev shadow adopt)** strict/dev のみ Facts→CorePlan(skeleton) を採用し、既定経路は維持した。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 308c415c..e67d1bc7 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 P18(single_planner outcome plumbing) -指示書: `docs/development/current/main/phases/phase-29ao/P18-SINGLE_PLANNER-OUTCOME-PLUMBING-INSTRUCTIONS.md` +Next: Phase 29ao P19(TBD) +指示書: TBD 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` @@ -98,6 +98,11 @@ Next: Phase 29ao P18(single_planner outcome plumbing) - 変更: `src/mir/builder/control_flow/joinir/patterns/router.rs` / `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` - 検証: `cargo test --release -p nyash-rust --lib` / `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` +**2025-12-30: Phase 29ao P18 完了** ✅ +- 目的: single_planner から planner outcome を受け取り、router の二重 planner 実行を撤去 +- 変更: `src/mir/builder/control_flow/plan/single_planner/rules.rs` / `src/mir/builder/control_flow/plan/single_planner/mod.rs` / `src/mir/builder/control_flow/joinir/patterns/router.rs` +- 検証: `cargo test --release -p nyash-rust --lib` / `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + **2025-12-29: Phase 29an P15 完了** ✅ - 目的: P0–P14 の成果を closeout 形式でまとめ、次フェーズ(Phase 29ao)入口を固定 - 変更: `docs/development/current/main/phases/phase-29an/README.md` / `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 53ba1a6a..133d6c00 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–P17 ✅ 完了 / Next: P18(single_planner outcome plumbing) - - Next 指示書: `docs/development/current/main/phases/phase-29ao/P18-SINGLE_PLANNER-OUTCOME-PLUMBING-INSTRUCTIONS.md` + - 状況: P0–P18 ✅ 完了 / Next: P19(TBD) + - Next 指示書: TBD - **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/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 0d90e4a6..d3204a20 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -108,7 +108,11 @@ Gate(SSOT): - 指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` - ねらい: strict/dev のみ Facts→CorePlan(skeleton) を採用し、既定経路は維持 +## P18: single_planner が planner outcome(facts+plan)を返す(P17の二重planner呼び出し撤去)✅ + +- 指示書: `docs/development/current/main/phases/phase-29ao/P18-SINGLE_PLANNER-OUTCOME-PLUMBING-INSTRUCTIONS.md` +- ねらい: planner outcome を single_planner から受け取り、router の二重実行を撤去 + ## Next(planned) -- P18: single_planner が planner outcome(facts+plan)を返す(P17の二重planner呼び出し撤去) - - 指示書: `docs/development/current/main/phases/phase-29ao/P18-SINGLE_PLANNER-OUTCOME-PLUMBING-INSTRUCTIONS.md` +- P19: TBD diff --git a/src/mir/builder/control_flow/joinir/patterns/router.rs b/src/mir/builder/control_flow/joinir/patterns/router.rs index b2125bd0..b4a139b9 100644 --- a/src/mir/builder/control_flow/joinir/patterns/router.rs +++ b/src/mir/builder/control_flow/joinir/patterns/router.rs @@ -28,7 +28,6 @@ use crate::mir::loop_pattern_detection::{LoopFeatures, LoopPatternKind}; use crate::mir::builder::control_flow::plan::lowerer::PlanLowerer; use crate::mir::builder::control_flow::plan::normalizer::PlanNormalizer; use crate::mir::builder::control_flow::plan::verifier::PlanVerifier; -use crate::mir::builder::control_flow::plan::planner::{self, PlannerContext}; use crate::mir::builder::control_flow::plan::single_planner; /// AST Feature Extractor (declared in mod.rs as pub module, import from parent) @@ -332,7 +331,7 @@ pub(crate) fn route_loop_pattern( use super::super::trace; // Phase 29ai P5: Single entrypoint for plan extraction (router has no rule table). - if let Some(domain_plan) = single_planner::try_build_domain_plan(ctx)? { + if let (Some(domain_plan), outcome) = single_planner::try_build_domain_plan_with_outcome(ctx)? { let strict_or_dev = crate::config::env::joinir_dev::strict_enabled() || crate::config::env::joinir_dev_enabled(); @@ -342,13 +341,6 @@ pub(crate) fn route_loop_pattern( crate::mir::builder::control_flow::plan::DomainPlan::Pattern1SimpleWhile(_) ) { - let planner_ctx = PlannerContext { - pattern_kind: Some(ctx.pattern_kind), - in_static_box: ctx.in_static_box, - debug: ctx.debug, - }; - let outcome = planner::build_plan_with_facts_ctx(&planner_ctx, ctx.condition, ctx.body) - .map_err(|freeze| freeze.to_string())?; let facts = outcome .facts .as_ref() diff --git a/src/mir/builder/control_flow/plan/single_planner/mod.rs b/src/mir/builder/control_flow/plan/single_planner/mod.rs index 2dec235d..caf3ae99 100644 --- a/src/mir/builder/control_flow/plan/single_planner/mod.rs +++ b/src/mir/builder/control_flow/plan/single_planner/mod.rs @@ -5,6 +5,7 @@ use crate::mir::builder::control_flow::joinir::patterns::router::LoopPatternContext; +use super::planner::PlanBuildOutcome; use super::DomainPlan; mod rules; @@ -15,3 +16,9 @@ pub(in crate::mir::builder) fn try_build_domain_plan( ) -> Result, String> { rules::try_build_domain_plan(ctx) } + +pub(in crate::mir::builder) fn try_build_domain_plan_with_outcome( + ctx: &LoopPatternContext, +) -> Result<(Option, PlanBuildOutcome), String> { + rules::try_build_domain_plan_with_outcome(ctx) +} diff --git a/src/mir/builder/control_flow/plan/single_planner/rules.rs b/src/mir/builder/control_flow/plan/single_planner/rules.rs index 8cf0f374..5272454a 100644 --- a/src/mir/builder/control_flow/plan/single_planner/rules.rs +++ b/src/mir/builder/control_flow/plan/single_planner/rules.rs @@ -7,12 +7,21 @@ use crate::mir::builder::control_flow::joinir::patterns::router::LoopPatternCont use crate::mir::builder::control_flow::plan::extractors; use crate::mir::builder::control_flow::plan::facts::pattern2_loopbodylocal_facts::LoopBodyLocalShape; -use crate::mir::builder::control_flow::plan::planner::{self, PlannerContext}; +use crate::mir::builder::control_flow::plan::planner::{self, PlanBuildOutcome, PlannerContext}; use crate::mir::builder::control_flow::plan::DomainPlan; use super::rule_order::{rule_name, PlanRuleId, PLAN_RULE_ORDER}; -pub(super) fn try_build_domain_plan(ctx: &LoopPatternContext) -> Result, String> { +pub(super) fn try_build_domain_plan( + ctx: &LoopPatternContext, +) -> Result, String> { + let (plan, _outcome) = try_build_domain_plan_with_outcome(ctx)?; + Ok(plan) +} + +pub(super) fn try_build_domain_plan_with_outcome( + ctx: &LoopPatternContext, +) -> Result<(Option, PlanBuildOutcome), String> { use crate::mir::builder::control_flow::joinir::trace; let planner_ctx = PlannerContext { @@ -57,14 +66,14 @@ pub(super) fn try_build_domain_plan(ctx: &LoopPatternContext) -> Result, kind: PlanRuleId) -> Option {