docs(phase29an): add p5 skeleton if-without-else
This commit is contained in:
@ -2,11 +2,16 @@
|
||||
|
||||
## Current Focus: Phase 29an(Skeleton/Feature Facts)
|
||||
|
||||
Next: Phase 29an P4(LoopFacts require skeleton/features)
|
||||
Next: Phase 29an P5(SkeletonFacts: if without else)
|
||||
運用ルール: 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 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`
|
||||
- 検証: `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 P3 完了** ✅
|
||||
- 目的: Freeze taxonomy の `unstructured` タグをコード語彙へ追加(未使用のまま、仕様不変)
|
||||
- 変更: `src/mir/builder/control_flow/plan/planner/freeze.rs`
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
---
|
||||
Status: Active
|
||||
Scope: code(仕様不変、SkeletonFacts の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 P5: SkeletonFacts — `if` without `else` is still If2(SSOT correctness)
|
||||
|
||||
Date: 2025-12-29
|
||||
Status: Ready for execution
|
||||
Scope: SkeletonFacts の分類だけを正しくする(未接続、仕様不変)
|
||||
|
||||
## Objective
|
||||
|
||||
- `SkeletonFacts` が `ASTNode::If { else_body: None }` を **If2Skeleton** として分類できるようにする
|
||||
- else が無くても CFG 上は “then / fallthrough” の 2 分岐 + join を持てるため、骨格としては If2 に含めるのが自然
|
||||
- 既存の JoinIR / Plan / Frag の挙動は一切触らない(未接続)
|
||||
|
||||
## Non-goals
|
||||
|
||||
- ルーティング順序・観測・エラー文字列の変更
|
||||
- Facts の `Ok(None)` gate の変更
|
||||
- SkeletonFacts の利用箇所を増やす(P5 は分類の正しさだけ)
|
||||
|
||||
## Implementation
|
||||
|
||||
Update:
|
||||
- `src/mir/builder/control_flow/plan/facts/skeleton_facts.rs`
|
||||
|
||||
### Step 1: If2 判定を else 有無に依存しない形へ
|
||||
|
||||
Before(概念):
|
||||
- `ASTNode::If { else_body: Some(_) } => If2`
|
||||
|
||||
After:
|
||||
- `ASTNode::If { .. } => If2`
|
||||
|
||||
### Step 2: unit tests 追加/更新
|
||||
|
||||
`#[cfg(test)]` に以下を追加:
|
||||
- `if` + `else_body: None` が `SkeletonKind::If2` になる
|
||||
- (既存があるなら)`if` + `else_body: Some(_)` も `SkeletonKind::If2` のまま
|
||||
- `match` が `SkeletonKind::BranchN` になる(最小)
|
||||
|
||||
## 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(p5): classify if-without-else as if2 skeleton"`
|
||||
|
||||
@ -55,7 +55,14 @@ Status: ✅ COMPLETE(実装コミット: `aa8c12bcf`)
|
||||
- ねらい: LoopFacts が Some のとき、Skeleton/Feature は必ず揃っている(Option剥がしの散在を止める)
|
||||
- 重要: `Ok(None)` gate は不変
|
||||
|
||||
Status: ✅ COMPLETE(実装コミット: `5ea120ca1`)
|
||||
|
||||
## P5: SkeletonFacts — classify `if` without `else` as If2 (SSOT correctness, unused)
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29an/P5-SKELETON-IF-WITHOUT-ELSE-INSTRUCTIONS.md`
|
||||
- ねらい: SkeletonFacts の If2 判定を “else有無に依存しない” 形に修正し、SSOTとしての正しさを上げる(未接続・仕様不変)
|
||||
|
||||
## Next(planned)
|
||||
|
||||
- P5: Skeleton 一意化(0/1/2+ → None/Some/Freeze)を “骨格推論” に限定して SSOT 化
|
||||
- P6: Feature 合成(ExitMap / ValueJoin / Cleanup)を CorePlan 合成へ繋ぐ
|
||||
- P6: Skeleton 一意化(0/1/2+ → None/Some/Freeze)を “骨格推論” に限定して SSOT 化
|
||||
- P7: Feature 合成(ExitMap / ValueJoin / Cleanup)を CorePlan 合成へ繋ぐ
|
||||
|
||||
Reference in New Issue
Block a user