diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 81d65a03..a0a5f77b 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/P13-CLEANUP-VOCAB-SCAFFOLD-INSTRUCTIONS.md` +`docs/development/current/main/phases/phase-29an/P14-VALUEJOIN-VOCAB-SCAFFOLD-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 513e8a82..5d4b642e 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -2,7 +2,7 @@ ## Current Focus: Phase 29an(Skeleton/Feature Facts) -Next: Phase 29an P13(Cleanup facts scaffold) +Next: Phase 29an P14(ValueJoin facts scaffold) 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` @@ -32,6 +32,11 @@ Next: Phase 29an P13(Cleanup facts scaffold) - 変更: `src/mir/builder/control_flow/plan/normalize/canonicalize.rs` / `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 P13 完了** ✅ +- 目的: CleanupFacts の語彙足場 + canonical projection を追加(未接続・仕様不変) +- 変更: `src/mir/builder/control_flow/plan/facts/feature_facts.rs` / `src/mir/builder/control_flow/plan/normalize/canonicalize.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 P7 完了** ✅ - 目的: CanonicalLoopFacts に skeleton/exit_usage の projection を追加(挙動不変) - 変更: `src/mir/builder/control_flow/plan/normalize/canonicalize.rs` / `src/mir/builder/control_flow/plan/planner/build.rs` diff --git a/docs/development/current/main/phases/phase-29an/P14-VALUEJOIN-VOCAB-SCAFFOLD-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29an/P14-VALUEJOIN-VOCAB-SCAFFOLD-INSTRUCTIONS.md new file mode 100644 index 00000000..c9a1972f --- /dev/null +++ b/docs/development/current/main/phases/phase-29an/P14-VALUEJOIN-VOCAB-SCAFFOLD-INSTRUCTIONS.md @@ -0,0 +1,81 @@ +--- +Status: Active +Scope: code(仕様不変、ValueJoin語彙の足場) +Related: +- docs/development/current/main/phases/phase-29an/README.md +- docs/development/current/main/design/post-phi-final-form-ssot.md +- docs/development/current/main/phases/phase-29ae/README.md +--- + +# Phase 29an P14: ValueJoinFacts の語彙足場(型 + canonical projection + verifier、未接続) + +Date: 2025-12-29 +Status: Ready for execution +Scope: join値(post-phi)を Feature として合成するための語彙を先に用意(未接続、仕様不変) + +## Objective + +- `ValueJoinFacts` を “join 値が必要か(= PHI相当が存在するか)” の **最小語彙**として追加する +- `CanonicalLoopFacts` に projection を追加し、planner/合成が深掘りしない入口を作る +- verifier に “未接続のままでも矛盾しない” 最小不変条件を追加する(fail-fastは debug-only) + +## Non-goals + +- join入力の対応付け(pred→value mapping)を実装しない(SSOTは `post-phi-final-form-ssot.md` にある) +- CFG/ExitMap との統合(CorePlan合成)は次フェーズ +- 既存ルーティング/候補集合/順序/ログ/エラー文字列の変更 +- 新しい Freeze 発火(gate を壊さない) + +## Implementation + +### Step 1: Facts語彙に ValueJoinFacts を拡張(未接続) + +Update: +- `src/mir/builder/control_flow/plan/facts/feature_facts.rs` + +Change: +- 既存の `struct ValueJoinFacts;` を “最小情報” を持つ形へ変更 + - 例: `pub struct ValueJoinFacts { pub needed: bool }`(P14では常に `false` を入れる想定) + - または `enum ValueJoinFacts { Needed }`(P14では `Option` を None のまま) + +推奨: +- P14では **Optionのまま None**(解析しない)。projectionだけ用意する。 + +### Step 2: Canonical projection を追加(入口整備) + +Update: +- `src/mir/builder/control_flow/plan/normalize/canonicalize.rs` + +Add: +- `pub value_join_needed: bool` + +Populate: +- `value_join_needed = facts.features.value_join.is_some()`(P14は false のまま) + +### Step 3: verifier に最小ルールを追加(debug-only) + +Update: +- `src/mir/builder/control_flow/plan/verifier.rs` + +Add rule(debug-only / cfg(debug_assertions) でもOK): +- `value_join_needed == true` の場合は `exit_kinds_present` が empty でない(joinがあるなら制御構造もあるはず、など) + - ここは弱いルールで良い。目的は “矛盾したfeature” の早期検知。 + +### Step 4: unit tests(projection固定) + +Add tests in `canonicalize.rs`: +- `value_join_needed` が既定で false + +Add tests in `verifier.rs`(debug-onlyでOK): +- 矛盾ケースが panic する(もし debug_assert を入れるなら) + +## 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(p14): add valuejoin facts scaffold and projection\"` + diff --git a/docs/development/current/main/phases/phase-29an/README.md b/docs/development/current/main/phases/phase-29an/README.md index 877bb77c..63bbbd6e 100644 --- a/docs/development/current/main/phases/phase-29an/README.md +++ b/docs/development/current/main/phases/phase-29an/README.md @@ -111,8 +111,19 @@ Status: ✅ COMPLETE(実装コミット: `8caa09768`) Status: ✅ COMPLETE(実装コミット: `fa5a891bd`) +## P13: Cleanup facts scaffold (unused) + +- 指示書: `docs/development/current/main/phases/phase-29an/P13-CLEANUP-VOCAB-SCAFFOLD-INSTRUCTIONS.md` +- ねらい: cleanup を Feature として合成するための語彙と projection の足場を作る(未接続、仕様不変) + +Status: ✅ COMPLETE(実装コミット: `34ec46d13`) + +## P14: ValueJoin facts scaffold (unused) + +- 指示書: `docs/development/current/main/phases/phase-29an/P14-VALUEJOIN-VOCAB-SCAFFOLD-INSTRUCTIONS.md` +- ねらい: join値(post-phi)を Feature として合成するための語彙と projection の足場を作る(未接続、仕様不変) + ## Next(planned) -- P13: CleanupFacts の語彙足場(型 + canonical projection、未接続) - - 指示書: `docs/development/current/main/phases/phase-29an/P13-CLEANUP-VOCAB-SCAFFOLD-INSTRUCTIONS.md` -- P14: ValueJoin の語彙足場(型 + projection + verifier SSOT)を追加(未接続) +- P15: Phase 29an closeout(P0–P14 の成果/SSOT/次フェーズ入口を確定) +- Next phase: Phase 29ao(CorePlan composition: Feature合成→Normalizerへ)