docs(phase29an): add p12 canonical exitmap projections

This commit is contained in:
2025-12-30 03:24:49 +09:00
parent 8caa09768c
commit 8518f1acc5
4 changed files with 91 additions and 7 deletions

View File

@ -2,7 +2,7 @@
## Current Focus: Phase 29anSkeleton/Feature Facts
Next: Phase 29an P11ExitMap presence from ExitUsage
Next: Phase 29an P12Canonical 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 P11ExitMap 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`

View File

@ -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` を深掘りしないで済むようにする
- P8exit_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<ExitKindFacts>`
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 testsnormalize側で固定
Add tests in `canonicalize.rs`:
- `exit_kinds_present` が empty のとき empty
- break/continue/return を含む facts で `exit_kinds_present` に3種入る
## Verificationrequired
- `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"`

View File

@ -90,12 +90,10 @@ Status: ✅ COMPLETE実装コミット: `195b424cc`
Status: ✅ COMPLETE実装コミット: `0354c17eb`
## Nextplanned
## 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/合成が深掘りせず参照できる足場を作る(仕様不変)
## Nextplanned
- P13: cleanup/value_join の足場型・projection・verifier だけ)を追加