From 6c50028cc1bcc5cd4c86500acfb75e3d375c11ef Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 08:52:21 +0900 Subject: [PATCH] phase29ao(p17): strict/dev adopt pattern1 skeleton --- 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 | 33 +++++++++++++++++++ 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 6cd6e57f..23a14dac 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 P17)** -Pattern1 を strict/dev のみ Facts→CorePlan(skeleton) で組み立てて採用する(shadow adopt)。 - -- 指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` +**Next implementation (Phase 29ao P18)** +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 P17 COMPLETE (Pattern1 strict/dev shadow adopt)** +strict/dev のみ Facts→CorePlan(skeleton) を採用し、既定経路は維持した。 + **2025-12-30: Phase 29ao P14 COMPLETE (Pattern2 Break exit join via block_params)** Pattern2 Break の after join を `Frag.block_params + EdgeArgs` で表現し、CorePhiInfo の after PHI を撤去した。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 149ed7fc..166684ea 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 P17(Pattern1 composer strict/dev shadow) -指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` +Next: Phase 29ao P18(TBD) +指示書: TBD 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` @@ -93,6 +93,11 @@ Next: Phase 29ao P17(Pattern1 composer strict/dev shadow) - 変更: `src/mir/builder/control_flow/plan/normalizer/pattern5_infinite_early_exit.rs` / `tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` / `docs/development/current/main/phases/phase-29ae/README.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 P17 完了** ✅ +- 目的: strict/dev のみ Pattern1 を Facts→CorePlan(skeleton) で shadow adopt +- 変更: `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-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 9defbf4b..a11614c4 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–P16 ✅ 完了 / Next: P17(Pattern1 composer strict/dev shadow) - - Next 指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` + - 状況: P0–P17 ✅ 完了 / Next: P18(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 c1fa5bbc..2650b7ec 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -103,7 +103,11 @@ Gate(SSOT): - 指示書: `docs/development/current/main/phases/phase-29ao/P16-VALUEJOIN-REAL-USAGE-PATTERN5-EXITJOIN-INSTRUCTIONS.md` - ねらい: after join の 1 PHI を `Frag.block_params + EdgeArgs` で表現し、exit join の経路を 1 件固定 +## P17: Pattern1 を Facts→CorePlan へ寄せる(strict/dev のみ shadow adopt)✅ + +- 指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` +- ねらい: strict/dev のみ Facts→CorePlan(skeleton) を採用し、既定経路は維持 + ## Next(planned) -- P17: Pattern1 を Facts→CorePlan へ寄せる(strict/dev のみ shadow adopt) - - 指示書: `docs/development/current/main/phases/phase-29ao/P17-COMPOSER-PATTERN1-STRICT-SHADOW-INSTRUCTIONS.md` +- P18: TBD diff --git a/src/mir/builder/control_flow/joinir/patterns/router.rs b/src/mir/builder/control_flow/joinir/patterns/router.rs index a4f71c02..b2125bd0 100644 --- a/src/mir/builder/control_flow/joinir/patterns/router.rs +++ b/src/mir/builder/control_flow/joinir/patterns/router.rs @@ -28,6 +28,7 @@ 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,6 +333,38 @@ pub(crate) fn route_loop_pattern( // 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)? { + let strict_or_dev = crate::config::env::joinir_dev::strict_enabled() + || crate::config::env::joinir_dev_enabled(); + + if strict_or_dev + && matches!( + domain_plan, + 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() + .ok_or_else(|| "pattern1 strict/dev adopt failed: facts missing".to_string())?; + if facts.facts.pattern1_simplewhile.is_none() { + return Err("pattern1 strict/dev adopt failed: facts mismatch".to_string()); + } + let core_plan = + PlanNormalizer::normalize_loop_skeleton_from_facts(builder, facts, ctx)? + .ok_or_else(|| { + "pattern1 strict/dev adopt failed: skeleton compose rejected".to_string() + })?; + PlanVerifier::verify(&core_plan)?; + return PlanLowerer::lower(builder, core_plan, ctx); + } + return lower_via_plan(builder, domain_plan, ctx); }