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で宣言された変数のみ
- merge:
- 失敗時:
- 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.mddocs/development/current/main/phases/phase-121/README.md
- StepTree 実装:
src/mir/control_tree/step_tree.rssrc/mir/control_tree/step_tree_facts.rssrc/mir/control_tree/step_tree_contract_box.rs