From 2347bed84b5a0c0dea2a02638b9af3f2e9bc03f1 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Mon, 29 Dec 2025 10:52:11 +0900 Subject: [PATCH] docs(phase29ai): add P14 pattern2 loopbodylocal promotion planner instructions --- docs/development/current/main/10-Now.md | 2 +- docs/development/current/main/30-Backlog.md | 2 +- ...BODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md | 88 +++++++++++++++++++ .../current/main/phases/phase-29ai/README.md | 5 ++ 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index b250be47..cfe103fb 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: Phase 29ai P14(TBD: Pattern2 LoopBodyLocal promotion を Plan/Planner へ吸収) +Next: `docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md` **2025-12-29: Phase 29ai P13 完了** ✅ - 目的: single_planner の planner 呼び出しを 1 回に memoize して二重スキャンを解消(仕様不変) diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index c0b943de..eb552e00 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: Phase 29ai P14(TBD: Pattern2 LoopBodyLocal promotion を Plan/Planner へ吸収) + - Next: `docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md` - **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/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md new file mode 100644 index 00000000..72216a76 --- /dev/null +++ b/docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md @@ -0,0 +1,88 @@ +# Phase 29ai P14: Planner support(Pattern2 LoopBodyLocal promotion subset) + +Date: 2025-12-29 +Status: Ready for execution +Scope: Pattern2 LoopBodyLocal promotion(TrimSeg / DigitPos)の “要求” を Plan に載せる(仕様不変) +Goal: promotion の判定・形状解析(Facts)と、採用/非採用(Planner)と、実際の実行(既存 JoinIR 経路)を分離する + +## Objective + +P12 で Pattern2 LoopBodyLocal の shape を Facts として抽出できるようになった。 +P14 では、その Facts を Planner で解釈し「この Pattern2BreakPlan は promotion-required である」という情報を DomainPlan に載せる。 + +この P14 は **挙動を変えない**。promotion-required を Plan に載せるだけで、実行は従来の JoinIR/Pattern2 の箱群に任せる。 +(PlanLowerer/Normalizer を新規に拡張しない。) + +## Non-goals + +- promotion を Plan/Frag 経路に実装し直す(大改造なので後続フェーズ) +- host binding / derived slot emitter / boundary hygiene の契約変更 +- freeze を実行経路で増やす(曖昧なら planner は Ok(None) に倒す) +- 既存 fixture の期待値変更 + +## Design (Minimal) + +### Add-on metadata on Pattern2BreakPlan + +`Pattern2BreakPlan` に “promotion の要求” を付加する(デフォルト None)。 + +例: +- `promotion: Option` +- `Pattern2PromotionHint::LoopBodyLocal(Pattern2LoopBodyLocalFacts)`(Facts をそのまま載せる) + +このフィールドは **planner でのみセット**し、legacy extractor 由来の plan は None のまま。 + +## Implementation Steps(Critical Order) + +### Step 1: Plan vocab に promotion hint を追加(構造だけ) + +ファイル: +- `src/mir/builder/control_flow/plan/mod.rs` + +やること: +- `Pattern2BreakPlan` に `promotion: Option` を追加(既定 None)。 +- `Pattern2PromotionHint` を追加。 + +注意: +- 既存の `PlanNormalizer` / `PlanLowerer` が `Pattern2BreakPlan` をどこで使っているか確認し、未参照ならコンパイルのみでOK。 +- 参照がある場合は「使わないフィールド追加」だけで済むようにする(match exhaustiveness に注意)。 + +### Step 2: Planner が hint を埋める(subset のみ) + +ファイル: +- `src/mir/builder/control_flow/plan/planner/build.rs` + +やること: +- `facts.facts.pattern2_break` が Some かつ `facts.facts.pattern2_loopbodylocal` が Some のときだけ、 + `DomainPlan::Pattern2Break(Pattern2BreakPlan { promotion: Some(...), .. })` を候補として push。 +- hint を付与しない普通の Pattern2Break は従来どおり候補生成(P11)を維持。 + +方針: +- hint 付き/無しの 2候補が同時に立つと CandidateSet が ambiguous になるので、 + “hint があるときは hint 付きのみ候補を出す” を推奨。 + +### Step 3: unit tests(Facts→Planner 境界) + +ファイル: +- `src/mir/builder/control_flow/plan/planner/build.rs`(または facts 側) + +やること: +- TrimSeg/DigitPos の Facts を与えたとき `Pattern2BreakPlan.promotion.is_some()` を固定。 + +### Step 4: Docs / Tracking 更新 + +更新: +- `docs/development/current/main/phases/phase-29ai/README.md` +- `docs/development/current/main/10-Now.md` +- `docs/development/current/main/30-Backlog.md` + +書くこと(最小): +- P14 は “挙動不変・Planにメタ情報を載せるだけ” を明記。 +- Next(P15)候補: promotion hint を JoinIR 側の orchestrator が観測できるように配線(ただし挙動不変)。 + +## Verification (SSOT) + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + diff --git a/docs/development/current/main/phases/phase-29ai/README.md b/docs/development/current/main/phases/phase-29ai/README.md index b037498c..0e91c821 100644 --- a/docs/development/current/main/phases/phase-29ai/README.md +++ b/docs/development/current/main/phases/phase-29ai/README.md @@ -84,6 +84,11 @@ Goal: pattern 名による分岐を外部APIから消し、Facts(事実)→ - 完了: single_planner 内で planner 結果を memoize し、Pattern6/7/2 は型一致時のみ採用 - 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` +## P14: Planner support(Pattern2 LoopBodyLocal promotion subset) + +- 指示書: `docs/development/current/main/phases/phase-29ai/P14-PLANNER-PATTERN2-LOOPBODYLOCAL-PROMOTION-SUBSET-INSTRUCTIONS.md` +- ねらい: LoopBodyLocal promotion の要求を DomainPlan に載せ、promotion の “解析” を Facts として固定した上で段階的に plan 系へ寄せる(仕様不変) + ## Verification (SSOT) - `cargo build --release`