From 363549b15215e511f3a75d98bd299bbe501f0eea Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 15:34:58 +0900 Subject: [PATCH] docs(phase29ao): add p33 pattern2 loopbodylocal planner-derive instruction --- docs/development/current/main/10-Now.md | 4 +- docs/development/current/main/30-Backlog.md | 1 + .../design/coreplan-migration-roadmap-ssot.md | 4 +- ...TERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md | 108 ++++++++++++++++++ .../current/main/phases/phase-29ao/README.md | 3 +- 5 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 58d1996c..d546dd9f 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -3,8 +3,8 @@ ## Current Focus - Phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next: Phase 29ao P33(TBD) - - 指示書: TBD +- Next: Phase 29ao P33(Pattern2 LoopBodyLocal planner-derive + tag gate) + - 指示書: `docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md` ## Gate (SSOT) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index bfa6669c..d7afb707 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -6,6 +6,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev ## Active - CorePlan migration: `docs/development/current/main/phases/phase-29ao/README.md`(Next: P33) + - 指示書: `docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md` ## 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 40b2ffec..ad02aeb6 100644 --- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md +++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md @@ -34,8 +34,8 @@ Related: ## 1.1 Current (active) - Active phase: `docs/development/current/main/phases/phase-29ao/README.md` -- Next step: Phase 29ao P33(TBD) -- After P32: TBD +- Next step: `docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md` +- After P33: TBD ## 2. すでに固めた SSOT(再発防止の土台) diff --git a/docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md new file mode 100644 index 00000000..2310e24a --- /dev/null +++ b/docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md @@ -0,0 +1,108 @@ +--- +Status: Ready +Scope: code+tests+docs(仕様不変・strict/devのみ観測強化) +Related: + - docs/development/current/main/phases/phase-29ao/README.md + - docs/development/current/main/design/coreplan-migration-roadmap-ssot.md + - tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh + - tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_min_vm.sh + - tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_seg_min_vm.sh + - src/mir/builder/control_flow/plan/facts/pattern2_break_facts.rs + - src/mir/builder/control_flow/plan/facts/pattern2_loopbodylocal_facts.rs + - src/mir/builder/control_flow/plan/planner/build.rs + - src/mir/builder/control_flow/plan/composer/shadow_adopt.rs +--- + +# Phase 29ao P33: Pattern2 LoopBodyLocal(phase29ab)を planner 由来に引き上げ、shadow adopt タグを回帰で固定する + +Date: 2025-12-30 +Status: Ready for execution +Goal: `phase29ab_pattern2_loopbodylocal_{min,seg_min}` が strict/dev で **planner 由来の `DomainPlan::Pattern2Break`** になり、既存の shadow adopt タグ +`[coreplan/shadow_adopt:pattern2_break_subset]` が必ず出るようにして回帰で固定する。 + +## 背景 + +- `phase29ab_pattern2_loopbodylocal_*` は現状、promotion hint タグ(`[plan/pattern2/promotion_hint:*]`)は出るが、 + `outcome.plan` が `Pattern2Break` ではないため shadow adopt が走らず、CorePlan 経路の差分検知ができない。 +- Phase 29ao の “段階1(strict/dev)完了” は、「回帰パックに含まれる代表ケースが shadow adopt タグで検知できる」状態。 + Pattern2 の realworld(phase263)は P32 で埋めたので、次は phase29ab の LoopBodyLocal を埋めるのが自然。 + +## 非目的 + +- release 既定挙動の変更 +- NotApplicable/Freeze ケースの “無理な planner 化” +- 新しい env var 追加 +- タグ名の増殖(既存タグを流用する) + +## 受け入れ基準(Acceptance) + +- `cargo build --release` が通る +- `./tools/smokes/v2/run.sh --profile quick` が通る(既定挙動不変) +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` が通る +- 次の 2 つの既存 integration smoke が strict/dev の raw output で shadow adopt タグを必須で満たす: + - `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_min_vm.sh` + - `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_seg_min_vm.sh` + +## 実装手順(安全順) + +### Step 1: Facts 抽出を “phase29ab の LoopBodyLocal 形状” に対応させる + +対象: +- `src/mir/builder/control_flow/plan/facts/pattern2_break_facts.rs` + +方針: +- 誤マッチ防止優先で、`Ok(None)` を維持しつつ “この2 fixture” を拾える最小条件を追加する。 +- `pattern2_loopbodylocal_facts` は既に promotion hint を出しているので、 + **break/loop_increment 側の facts 取りこぼし**が主因になっている可能性が高い。 + +最低限の SSOT: +- `phase29ab_pattern2_loopbodylocal_min.hako` +- `phase29ab_pattern2_loopbodylocal_seg_min.hako` + +### Step 2: planner で Pattern2Break を候補に出す(planner 由来にする) + +対象: +- `src/mir/builder/control_flow/plan/planner/build.rs` + +方針: +- `facts.facts.pattern2_break.is_some()` のとき、`DomainPlan::Pattern2Break(..)` の candidate を push する。 +- `facts.facts.pattern2_loopbodylocal` があれば `promotion` を乗せる(既存の composer と同じ)。 + +注意: +- `pattern2_break` が取れないケース(freeze/notapplicable)は candidate を出さない(Ok(None) を維持)。 + +### Step 3: shadow adopt の gate は既存のまま(タグは流用) + +確認対象: +- `src/mir/builder/control_flow/plan/composer/shadow_adopt.rs` + +このファイルは既に +- `DomainPlan::Pattern2Break` かつ `outcome.plan` が `Pattern2Break` のときだけ adopt +- タグは `[coreplan/shadow_adopt:pattern2_break_subset]` +なので、P33 では増殖しない。 + +### Step 4: 既存 smoke を “タグ必須” に昇格(filter_noise を避ける) + +対象: +- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_min_vm.sh` +- `tools/smokes/v2/profiles/integration/apps/phase29ab_pattern2_loopbodylocal_seg_min_vm.sh` + +方針: +- `filter_noise` は `[coreplan/shadow_adopt:*]` を落とすので、raw `OUTPUT` でタグを検証する。 +- 既存の promotion hint タグ検証(DigitPos/TrimSeg)と output=2 の期待は維持する。 + +例(概念): +- `if ! echo "$OUTPUT" | grep -qF '[coreplan/shadow_adopt:pattern2_break_subset]'; then fail; fi` +- その後 `OUTPUT_CLEAN=$(echo "$OUTPUT" | filter_noise)` を使って従来の output/hint を検証 + +## 検証(必須) + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + +## コミット + +- `git add -A` +- `git commit -m "phase29ao(p33): planner-derive pattern2 loopbodylocal smokes"` + diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index d2b4ae0e..1d19c52b 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -188,5 +188,6 @@ Gate(SSOT): ## Next(planned) -- Next: P33(TBD) +- Next: P33(Pattern2 LoopBodyLocal planner-derive + tag gate) + - 指示書: `docs/development/current/main/phases/phase-29ao/P33-PLANNER-DERIVE-PATTERN2-LOOPBODYLOCAL-SMOKES-INSTRUCTIONS.md` - After P33: TBD