41 lines
1.7 KiB
Markdown
41 lines
1.7 KiB
Markdown
|
|
# Phase 122: StepTree→Normalized(if-only 実生成 / dev-only)
|
|||
|
|
|
|||
|
|
## 目的
|
|||
|
|
|
|||
|
|
- Phase 121 で導入した StepTree→Normalized の “shadow変換(contract-only)” を一段進め、if-only を対象に Normalized JoinModule(env+継続)を実生成する。
|
|||
|
|
- 既定挙動は不変:`joinir_dev_enabled()` のときだけ生成・検証し、本番経路の出力/動作は変えない。
|
|||
|
|
- mismatch は strict のときだけ Fail-Fast(`freeze_with_hint`、hint必須)。
|
|||
|
|
|
|||
|
|
## Scope
|
|||
|
|
|
|||
|
|
- 対象: if-only(loopなし)
|
|||
|
|
- 非対象(strictではcap不足でFail-Fast):
|
|||
|
|
- Loop / Break / Continue(Phase 112/121 の guard 方針に従う)
|
|||
|
|
|
|||
|
|
## 実装方針(SSOT)
|
|||
|
|
|
|||
|
|
- 入力SSOT: `StepTree` + `StepTreeFacts` + `StepTreeContract`
|
|||
|
|
- facts/contract は再解析しない(変換箱が AST を再走査して “推測” しない)
|
|||
|
|
- 生成SSOT: “env + 継続” に統一し、PHI を直接扱わない
|
|||
|
|
- merge: `join_k(env)` への tail-call
|
|||
|
|
- env layout: `writes` で宣言された変数のみ
|
|||
|
|
- 失敗時:
|
|||
|
|
- dev-only: 理由ログ(タグ + 1行)
|
|||
|
|
- strict: `freeze_with_hint`(1行hint必須、空hintは禁止)
|
|||
|
|
|
|||
|
|
## 受け入れ基準
|
|||
|
|
|
|||
|
|
- `cargo test --lib` が PASS
|
|||
|
|
- Phase 121 の既存 smokes が退行しない
|
|||
|
|
- Phase 122 の dev-only 検証で mismatch が出ない(strict で Fail-Fast するなら、その時点で修正が必要)
|
|||
|
|
|
|||
|
|
## 関連
|
|||
|
|
|
|||
|
|
- Phase 119–121: StepTree SSOT + shadow parity
|
|||
|
|
- `docs/development/current/main/design/control-tree.md`
|
|||
|
|
- `docs/development/current/main/phases/phase-121/README.md`
|
|||
|
|
- StepTree 実装:
|
|||
|
|
- `src/mir/control_tree/step_tree.rs`
|
|||
|
|
- `src/mir/control_tree/step_tree_facts.rs`
|
|||
|
|
- `src/mir/control_tree/step_tree_contract_box.rs`
|