docs(phase29ai): add P14 pattern2 loopbodylocal promotion planner instructions

This commit is contained in:
2025-12-29 10:52:11 +09:00
parent b3b01def24
commit 2347bed84b
4 changed files with 95 additions and 2 deletions

View File

@ -2,7 +2,7 @@
## Current Focus: Phase 29aiPlan/Frag single-planner
Next: Phase 29ai P14TBD: 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 して二重スキャンを解消(仕様不変)

View File

@ -19,7 +19,7 @@ Related:
- **Phase 29aicandidate: Plan/Frag single-plannerFacts SSOT**
- 入口: `docs/development/current/main/phases/phase-29ai/README.md`
- Next: Phase 29ai P14TBD: 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`

View File

@ -0,0 +1,88 @@
# Phase 29ai P14: Planner supportPattern2 LoopBodyLocal promotion subset
Date: 2025-12-29
Status: Ready for execution
Scope: Pattern2 LoopBodyLocal promotionTrimSeg / 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>`
- `Pattern2PromotionHint::LoopBodyLocal(Pattern2LoopBodyLocalFacts)`Facts をそのまま載せる)
このフィールドは **planner でのみセット**し、legacy extractor 由来の plan は None のまま。
## Implementation StepsCritical Order
### Step 1: Plan vocab に promotion hint を追加(構造だけ)
ファイル:
- `src/mir/builder/control_flow/plan/mod.rs`
やること:
- `Pattern2BreakPlan``promotion: Option<Pattern2PromotionHint>` を追加(既定 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 testsFacts→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にメタ情報を載せるだけ” を明記。
- NextP15候補: 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`

View File

@ -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 supportPattern2 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`