From b105f82547f2283ee6c6e30c35f6008cd8def29d Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 18:04:39 +0900 Subject: [PATCH] phase29ao(p39): release adopt pattern2 break subset --- docs/development/current/main/10-Now.md | 2 +- docs/development/current/main/30-Backlog.md | 2 +- .../design/coreplan-migration-roadmap-ssot.md | 2 +- .../current/main/phases/phase-29ae/README.md | 1 + .../current/main/phases/phase-29ao/README.md | 8 +++-- .../control_flow/joinir/patterns/router.rs | 11 +++++++ .../builder/control_flow/plan/composer/mod.rs | 1 + .../plan/composer/shadow_adopt.rs | 26 ++++++++++++++++ .../joinir/phase29ae_regression_pack_vm.sh | 1 + .../phase29ao_pattern2_release_adopt_vm.sh | 31 +++++++++++++++++++ 10 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 tools/smokes/v2/profiles/integration/joinir/phase29ao_pattern2_release_adopt_vm.sh diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 69ed4411..11068df3 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -3,7 +3,7 @@ ## Current Focus - Phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next: `docs/development/current/main/phases/phase-29ao/P39-RELEASE-ADOPT-PATTERN2-BREAK-SUBSET-INSTRUCTIONS.md` +- Next: TBD (see `docs/development/current/main/phases/phase-29ao/README.md`) ## Gate (SSOT) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 5b278f46..014cff7a 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -5,7 +5,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev ## Active -- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: P39) +- CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: TBD) ## Near-Term Candidates diff --git a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md index 0df01c99..20c4c6cb 100644 --- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md +++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md @@ -34,7 +34,7 @@ Related: ## 1.1 Current (active) - Active phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next step: `docs/development/current/main/phases/phase-29ao/P39-RELEASE-ADOPT-PATTERN2-BREAK-SUBSET-INSTRUCTIONS.md` +- Next step: TBD ## 2. すでに固めた SSOT(再発防止の土台) diff --git a/docs/development/current/main/phases/phase-29ae/README.md b/docs/development/current/main/phases/phase-29ae/README.md index 2071549f..497718d9 100644 --- a/docs/development/current/main/phases/phase-29ae/README.md +++ b/docs/development/current/main/phases/phase-29ae/README.md @@ -7,6 +7,7 @@ Goal: JoinIR の最小回帰セットを SSOT として固定する。 - Pattern2: `phase29ab_pattern2_*` - Pattern2 (real-world): `phase263_pattern2_*` - Pattern2 (subset, strict shadow, VM): `phase29ai_pattern2_break_plan_subset_ok_min_vm` +- Pattern2 (release adopt, VM): `phase29ao_pattern2_release_adopt_vm` - Pattern3 (If‑Phi, VM): `phase118_pattern3_if_sum_vm` - Pattern1 (strict shadow, VM): `phase29ao_pattern1_strict_shadow_vm` - Pattern1 (subset reject, VM): `phase29ao_pattern1_subset_reject_extra_stmt_vm` diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 0ffe49ca..bb1d9562 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -216,7 +216,11 @@ Gate(SSOT): - 指示書: `docs/development/current/main/phases/phase-29ao/P38-RELEASE-ADOPT-PATTERN7-SPLITSCAN-SUBSET-INSTRUCTIONS.md` - ねらい: Pattern7 planner subset を release 既定で Facts→CorePlan に採用し、非strict経路の回帰を追加(仕様不変) +## P39: Stage-2 expand — release adopt Pattern2 (Break) subset ✅ + +- 指示書: `docs/development/current/main/phases/phase-29ao/P39-RELEASE-ADOPT-PATTERN2-BREAK-SUBSET-INSTRUCTIONS.md` +- ねらい: Pattern2 planner subset を release 既定で Facts→CorePlan に採用し、非strict経路の回帰を追加(仕様不変) + ## Next(planned) -- Next: P39(Stage-2 expand: Pattern2) -- 指示書: `docs/development/current/main/phases/phase-29ao/P39-RELEASE-ADOPT-PATTERN2-BREAK-SUBSET-INSTRUCTIONS.md` +- Next: TBD diff --git a/src/mir/builder/control_flow/joinir/patterns/router.rs b/src/mir/builder/control_flow/joinir/patterns/router.rs index 143599ff..90d89d52 100644 --- a/src/mir/builder/control_flow/joinir/patterns/router.rs +++ b/src/mir/builder/control_flow/joinir/patterns/router.rs @@ -381,6 +381,17 @@ pub(crate) fn route_loop_pattern( PlanVerifier::verify(&core_plan)?; return PlanLowerer::lower(builder, core_plan, ctx); } + if let Some(core_plan) = + composer::try_release_adopt_core_plan_for_pattern2_break_subset( + builder, + ctx, + &domain_plan, + &outcome, + )? + { + PlanVerifier::verify(&core_plan)?; + return PlanLowerer::lower(builder, core_plan, ctx); + } } return lower_via_plan(builder, domain_plan, ctx); diff --git a/src/mir/builder/control_flow/plan/composer/mod.rs b/src/mir/builder/control_flow/plan/composer/mod.rs index 35b458c4..0cec7cc1 100644 --- a/src/mir/builder/control_flow/plan/composer/mod.rs +++ b/src/mir/builder/control_flow/plan/composer/mod.rs @@ -11,6 +11,7 @@ use crate::mir::builder::MirBuilder; pub(in crate::mir::builder) use shadow_adopt::{ try_release_adopt_core_plan_for_pattern1, + try_release_adopt_core_plan_for_pattern2_break_subset, try_release_adopt_core_plan_for_pattern6_scan_with_init, try_release_adopt_core_plan_for_pattern7_split_scan, try_shadow_adopt_core_plan, diff --git a/src/mir/builder/control_flow/plan/composer/shadow_adopt.rs b/src/mir/builder/control_flow/plan/composer/shadow_adopt.rs index 2eb3427a..16343431 100644 --- a/src/mir/builder/control_flow/plan/composer/shadow_adopt.rs +++ b/src/mir/builder/control_flow/plan/composer/shadow_adopt.rs @@ -104,6 +104,32 @@ pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern7_split_sc } } +pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern2_break_subset( + builder: &mut MirBuilder, + ctx: &LoopPatternContext, + domain_plan: &DomainPlan, + outcome: &PlanBuildOutcome, +) -> Result, String> { + if !matches!(domain_plan, DomainPlan::Pattern2Break(_)) { + return Ok(None); + } + if !matches!(outcome.plan.as_ref(), Some(DomainPlan::Pattern2Break(_))) { + return Ok(None); + } + + let Some(facts) = outcome.facts.as_ref() else { + return Ok(None); + }; + if facts.facts.pattern2_break.is_none() { + return Ok(None); + } + + match compose_coreplan_for_pattern2_break_subset(builder, facts, ctx) { + Ok(Some(core)) => Ok(Some(core)), + Ok(None) | Err(_) => Ok(None), + } +} + pub(in crate::mir::builder) fn compose_coreplan_for_pattern2_break_subset( builder: &mut MirBuilder, facts: &CanonicalLoopFacts, diff --git a/tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh b/tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh index 2ef7d429..d6099a03 100644 --- a/tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh +++ b/tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh @@ -20,6 +20,7 @@ run_filter() { run_filter "pattern2" "phase29ab_pattern2_" || exit 1 run_filter "pattern2_realworld" "phase263_pattern2_" || exit 1 run_filter "pattern2_subset" "phase29ai_pattern2_break_plan_subset_ok_min_vm" || exit 1 +run_filter "pattern2_release_adopt_vm" "phase29ao_pattern2_release_adopt_vm" || exit 1 run_filter "pattern3_ifphi_vm" "phase118_pattern3_if_sum_vm" || exit 1 run_filter "pattern1_strict_shadow_vm" "phase29ao_pattern1_strict_shadow_vm" || exit 1 run_filter "pattern1_subset_reject_extra_stmt_vm" "phase29ao_pattern1_subset_reject_extra_stmt_vm" || exit 1 diff --git a/tools/smokes/v2/profiles/integration/joinir/phase29ao_pattern2_release_adopt_vm.sh b/tools/smokes/v2/profiles/integration/joinir/phase29ao_pattern2_release_adopt_vm.sh new file mode 100644 index 00000000..7cf3f01f --- /dev/null +++ b/tools/smokes/v2/profiles/integration/joinir/phase29ao_pattern2_release_adopt_vm.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# phase29ao_pattern2_release_adopt_vm.sh - Pattern2 release adopt path smoke (VM) +# +# Expected: +# - Exit code 15 + +source "$(dirname "$0")/../../../lib/test_runner.sh" +require_env || exit 2 + +FIXTURE="$NYASH_ROOT/apps/tests/phase29ai_pattern2_break_plan_subset_ok_min.hako" +RUN_TIMEOUT_SECS=${RUN_TIMEOUT_SECS:-10} + +set +e +OUTPUT=$(timeout "$RUN_TIMEOUT_SECS" env -u HAKO_JOINIR_STRICT -u NYASH_JOINIR_STRICT NYASH_DISABLE_PLUGINS=1 "$NYASH_BIN" "$FIXTURE" 2>&1) +EXIT_CODE=$? +set -e + +if [ "$EXIT_CODE" -eq 124 ]; then + test_fail "phase29ao_pattern2_release_adopt_vm: hakorune timed out (>${RUN_TIMEOUT_SECS}s)" + exit 1 +fi + +if [ "$EXIT_CODE" -ne 15 ]; then + echo "[FAIL] Expected exit 15, got $EXIT_CODE" + echo "$OUTPUT" | tail -n 40 || true + test_fail "phase29ao_pattern2_release_adopt_vm: Unexpected RC" + exit 1 +fi + +test_pass "phase29ao_pattern2_release_adopt_vm: PASS (exit=15)" +exit 0