From 8518f1acc5182ef66eac21760a53f3a2a96df4af Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 03:24:49 +0900 Subject: [PATCH] docs(phase29an): add p12 canonical exitmap projections --- CURRENT_TASK.md | 2 +- docs/development/current/main/10-Now.md | 7 +- ...ONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md | 70 +++++++++++++++++++ .../current/main/phases/phase-29an/README.md | 19 +++-- 4 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29an/P12-CANONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 0f88c4c7..1e4c89a7 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/P11-EXITMAP-PRESENCE-FROM-EXITUSAGE-INSTRUCTIONS.md` +`docs/development/current/main/phases/phase-29an/P12-CANONICAL-EXITMAP-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 770497ac..a450febb 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 P11(ExitMap presence from ExitUsage) +Next: Phase 29an P12(Canonical ExitMap projections) 運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ) 運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う 移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` @@ -22,6 +22,11 @@ Next: Phase 29an P11(ExitMap presence from ExitUsage) - 変更: `src/mir/builder/control_flow/plan/facts/feature_facts.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 P11 完了** ✅ +- 目的: ExitMapFacts を “存在集合” として最小で埋める(対応付け/CFGなし、仕様不変) +- 変更: `src/mir/builder/control_flow/plan/facts/feature_facts.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/P12-CANONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29an/P12-CANONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md new file mode 100644 index 00000000..507b72d8 --- /dev/null +++ b/docs/development/current/main/phases/phase-29an/P12-CANONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md @@ -0,0 +1,70 @@ +--- +Status: Active +Scope: code(仕様不変、Feature合成の導線整備) +Related: +- docs/development/current/main/phases/phase-29an/README.md +- docs/development/current/main/design/exitkind-cleanup-effect-contract-ssot.md +- docs/development/current/main/phases/phase-29ae/README.md +--- + +# Phase 29an P12: CanonicalLoopFacts に ExitMap projection を追加(仕様不変) + +Date: 2025-12-29 +Status: Ready for execution +Scope: ExitMapFacts を normalize 側で “参照しやすい形” に投影する(挙動不変) + +## Objective + +- `CanonicalLoopFacts` に `exit_kinds_present` の projection を追加し、planner が `facts.facts.features.exit_map` を深掘りしないで済むようにする +- P8(exit_usage invariants)と同様に、将来の Feature 合成で “入口が1箇所” になる土台を整える + +## Non-goals + +- 既存ルーティング/候補集合/順序/ログ/エラー文字列の変更 +- 新しい Freeze 発火(gate を壊さない) +- cleanup/value_join の実装(P13+) + +## Implementation + +### Step 1: CanonicalLoopFacts を拡張(projection追加) + +Update: +- `src/mir/builder/control_flow/plan/normalize/canonicalize.rs` + +Add: +- `pub exit_kinds_present: std::collections::BTreeSet` + +Populate: +- `facts.features.exit_map.as_ref().map(|m| m.kinds_present.clone()).unwrap_or_default()` + +注意: +- `ExitKindFacts` / `ExitMapFacts` は `src/mir/builder/control_flow/plan/facts/feature_facts.rs` の語彙を使う +- `canonicalize_loop_facts` は pure transform のまま(副作用/ログ禁止) + +### Step 2: planner の invariants / gate を projection へ寄せる(挙動不変) + +Update: +- `src/mir/builder/control_flow/plan/planner/build.rs` + +Change: +- `ExitUsageFacts` を参照している箇所はそのまま維持してよい(P12は projection を増やすだけ) +- ただし `debug_assert_exit_usage_matches_plan()` の引数に `exit_kinds_present` を追加して、 + `exit_usage` と `exit_kinds_present` の整合(presence)を debug-only で確認する + - `has_break == exit_kinds_present.contains(Break)` 等 + +### Step 3: unit tests(normalize側で固定) + +Add tests in `canonicalize.rs`: +- `exit_kinds_present` が empty のとき empty +- break/continue/return を含む facts で `exit_kinds_present` に3種入る + +## 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(p12): project exitmap kinds into canonical facts"` + diff --git a/docs/development/current/main/phases/phase-29an/README.md b/docs/development/current/main/phases/phase-29an/README.md index 6adde5c2..3ba69e9a 100644 --- a/docs/development/current/main/phases/phase-29an/README.md +++ b/docs/development/current/main/phases/phase-29an/README.md @@ -90,12 +90,10 @@ Status: ✅ COMPLETE(実装コミット: `195b424cc`) Status: ✅ COMPLETE(実装コミット: `0354c17eb`) -## Next(planned) +## P10: ExitMap facts scaffold (types only, unused) -- P10: ExitMap FeatureFacts の足場(型だけ先に追加、未接続) - - 指示書: `docs/development/current/main/phases/phase-29an/P10-EXITMAP-FEATURE-FACTS-SCAFFOLD-INSTRUCTIONS.md` -- P11: ExitMapFacts の “presence” を ExitUsageFacts から埋める(still conservative) -- P12: cleanup/value_join の足場(型・projection・verifier だけ)を追加 +- 指示書: `docs/development/current/main/phases/phase-29an/P10-EXITMAP-FEATURE-FACTS-SCAFFOLD-INSTRUCTIONS.md` +- ねらい: ExitMapFacts の語彙(型)だけ先に追加して足場を作る(未接続・仕様不変) Status: ✅ COMPLETE(実装コミット: `b71434ffe`) @@ -103,3 +101,14 @@ Status: ✅ COMPLETE(実装コミット: `b71434ffe`) - 指示書: `docs/development/current/main/phases/phase-29an/P11-EXITMAP-PRESENCE-FROM-EXITUSAGE-INSTRUCTIONS.md` - ねらい: ExitMapFacts を “存在集合” として最小で埋める(対応付け/CFGはやらない、仕様不変) + +Status: ✅ COMPLETE(実装コミット: `8caa09768`) + +## P12: CanonicalLoopFacts ExitMap projections (exit_kinds_present) + +- 指示書: `docs/development/current/main/phases/phase-29an/P12-CANONICAL-EXITMAP-PROJECTIONS-INSTRUCTIONS.md` +- ねらい: ExitMapFacts を normalize 側で投影して、planner/合成が深掘りせず参照できる足場を作る(仕様不変) + +## Next(planned) + +- P13: cleanup/value_join の足場(型・projection・verifier だけ)を追加