diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index f2b33a1d..7cdad286 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -19,7 +19,7 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` が移行タスクの Done 判定の入口。 **Next implementation (CorePlan Step-B / Facts SSOT)** -`docs/development/current/main/phases/phase-29an/P6-PLANNER-SKELETON-GATE-INSTRUCTIONS.md` +`docs/development/current/main/phases/phase-29an/P7-CANONICAL-LOOPFACTS-PROJECTIONS-INSTRUCTIONS.md` **2025-12-29: Phase 29am P0 COMPLETE (CorePlan If/Exit lowerer/verifier)** CorePlan の If/Exit を lowerer/verifier で扱えるようにして、CorePlan 移行の土台を作った。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 5057e665..a54d5a3d 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -2,11 +2,16 @@ ## Current Focus: Phase 29an(Skeleton/Feature Facts) -Next: Phase 29an P6(Planner skeleton gate) +Next: Phase 29an P7(CanonicalLoopFacts projections) 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` +**2025-12-29: Phase 29an P6 完了** ✅ +- 目的: planner入口に skeleton gate を追加(Loop 以外は Ok(None) で fallback 維持、仕様不変) +- 変更: `src/mir/builder/control_flow/plan/planner/build.rs` +- 検証: `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 P4 完了** ✅ - 目的: LoopFacts が Some のとき skeleton/features が必ず揃うように型を引き締め(SSOT引き締め、仕様不変) - 変更: `src/mir/builder/control_flow/plan/facts/loop_facts.rs` / `src/mir/builder/control_flow/plan/planner/build.rs` diff --git a/docs/development/current/main/phases/phase-29an/P7-CANONICAL-LOOPFACTS-PROJECTIONS-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29an/P7-CANONICAL-LOOPFACTS-PROJECTIONS-INSTRUCTIONS.md new file mode 100644 index 00000000..1b7b7fe7 --- /dev/null +++ b/docs/development/current/main/phases/phase-29an/P7-CANONICAL-LOOPFACTS-PROJECTIONS-INSTRUCTIONS.md @@ -0,0 +1,71 @@ +--- +Status: Active +Scope: code(仕様不変、normalize SSOT の段階強化) +Related: +- docs/development/current/main/phases/phase-29an/README.md +- docs/development/current/main/design/coreplan-skeleton-feature-model.md +- docs/development/current/main/phases/phase-29ae/README.md +--- + +# Phase 29an P7: CanonicalLoopFacts に skeleton/exit_usage の projection を追加(仕様不変) + +Date: 2025-12-29 +Status: Ready for execution +Scope: `canonicalize_loop_facts` を “将来の骨格/特徴合成” に耐える形へ寄せる(挙動不変) + +## Objective + +- `CanonicalLoopFacts` に `skeleton_kind` / `exit_usage` の **投影(projection)** を追加する + - planner が `facts.facts.*` の深掘りをしなくても “骨格/特徴” の入口が 1 箇所に揃う +- 既存の候補生成・順序・ログ・エラー文字列は不変 + +## Non-goals + +- 新しい Freeze の発火(gate を壊さない) +- 候補の増減や優先順序変更 +- facts の `Ok(None)` gate の変更 + +## Implementation + +### Step 1: CanonicalLoopFacts を拡張(projection追加) + +Update: +- `src/mir/builder/control_flow/plan/normalize/canonicalize.rs` + +Change: +- `struct CanonicalLoopFacts { pub facts: LoopFacts }` に以下を追加 + - `pub skeleton_kind: SkeletonKind` + - `pub exit_usage: ExitUsageFacts` + +Populate: +- `skeleton_kind = facts.skeleton.kind` +- `exit_usage = facts.features.exit_usage.clone()` + +注意: +- `LoopFacts` 側で skeleton/features は必須なので `Option` 剥がしは不要 +- `canonicalize_loop_facts` は pure transform のまま(副作用/ログ禁止) + +### Step 2: planner の skeleton gate を projection へ寄せる(挙動不変) + +Update: +- `src/mir/builder/control_flow/plan/planner/build.rs` + +Change: +- `facts.facts.skeleton.kind` 参照を `facts.skeleton_kind` に置き換えるだけ(ロジック不変) + +### Step 3: unit tests(最低限) + +Add tests in `canonicalize.rs`: +- `canonicalize_loop_facts` で `skeleton_kind` が `Loop` になる +- `exit_usage` が Facts 由来で投影されている(例: break/continue/return が立つ) + +## Verification(required) + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + +## Commit + +- `git add -A && git commit -m "phase29an(p7): add canonical projections for skeleton/features"` + diff --git a/docs/development/current/main/phases/phase-29an/README.md b/docs/development/current/main/phases/phase-29an/README.md index c1d90d22..a3061191 100644 --- a/docs/development/current/main/phases/phase-29an/README.md +++ b/docs/development/current/main/phases/phase-29an/README.md @@ -64,9 +64,19 @@ Status: ✅ COMPLETE(実装コミット: `5ea120ca1`) Status: ✅ COMPLETE(実装コミット: `1319cbfb2`) +## P6: Planner skeleton gate (Loop only) + +- 指示書: `docs/development/current/main/phases/phase-29an/P6-PLANNER-SKELETON-GATE-INSTRUCTIONS.md` +- ねらい: skeleton.kind が Loop 以外なら `Ok(None)` に倒して fallback を維持(仕様不変) + +Status: ✅ COMPLETE(実装コミット: `80c879fdb`) + +## P7: CanonicalLoopFacts projections (skeleton_kind / exit_usage) + +- 指示書: `docs/development/current/main/phases/phase-29an/P7-CANONICAL-LOOPFACTS-PROJECTIONS-INSTRUCTIONS.md` +- ねらい: normalize SSOT に “骨格/特徴” の入口を揃える(候補/順序/挙動は不変) + ## Next(planned) -- P6: Planner に skeleton gate を追加(Loop 以外は Ok(None)、仕様不変) - - 指示書: `docs/development/current/main/phases/phase-29an/P6-PLANNER-SKELETON-GATE-INSTRUCTIONS.md` -- P7: Skeleton 一意化(0/1/2+ → None/Some/Freeze)を “骨格推論” に限定して SSOT 化 -- P8: Feature 合成(ExitMap / ValueJoin / Cleanup)を CorePlan 合成へ繋ぐ +- P8: Skeleton 一意化(0/1/2+ → None/Some/Freeze)を “骨格推論” に限定して SSOT 化 +- P9: Feature 合成(ExitMap / ValueJoin / Cleanup)を CorePlan 合成へ繋ぐ