Files
hakorune/docs/development/current/main/phases/phase-29ao/P6-VALUEJOIN-PRESENCE-GATE-INSTRUCTIONS.md

3.2 KiB
Raw Blame History

Status, Scope, Related
Status Scope Related
Ready code未接続・仕様不変
docs/development/current/main/phases/phase-29ao/README.md
docs/development/current/main/design/post-phi-final-form-ssot.md
docs/development/current/main/design/joinir-plan-frag-ssot.md
docs/development/current/main/phases/phase-29ae/README.md

Phase 29ao P6: ValueJoin presencedirect skeleton の安全ゲート + 次の wire 足場)

Date: 2025-12-30
Status: Ready for execution
Scope: 仕様不変未接続のまま、ValueJoin が絡むケースを “direct skeleton” が飲み込まないように固定する

目的

  • CanonicalLoopFacts.value_join_needed の存在は、将来 “expr result + carriers” の post-phi 表現に繋がる。
  • 現時点の direct skeletonPattern1 subsetは value join を扱えないので、誤って採用されない ことを SSOT として固定する。
  • ここでは “wire 実装” ではなく、P7ValueJoin wireへ進むための 安全ゲートと境界テストを先に固める。

非目的

  • expr result の EdgeArgs への実配線(JumpArgsLayout::ExprResultPlusCarriers を満たす args 構築)
  • value join の抽出ロジック拡張Facts 側の detect は別タスクに切る)
  • 既存ルーティング/挙動/ログ/エラー文字列の変更

実装手順

Step 1: direct skeleton を value_join_needed で gate する

対象:

  • src/mir/builder/control_flow/plan/normalizer/skeleton_loop.rs

変更:

  • normalize_loop_skeleton_from_facts(...) の冒頭で
    • if facts.value_join_needed { return Ok(None); }

方針:

  • Ok(None) で fallback を維持(未接続なので観測差分なし)
  • strict/dev の Fail-Fast は P7 以降wire が入った段階)で入れる

Step 2: unit testvalue join の境界を固定)

対象:

  • src/mir/builder/control_flow/plan/composer/mod.rsdirect compose のテスト群)
    • もしくは src/mir/builder/control_flow/plan/normalizer/skeleton_loop.rs

追加テスト:

  • LoopFacts.features.value_join = Some(ValueJoinFacts { needed: true }) をセットして canonicalize し、
    • try_compose_core_plan_direct(...)None になることを固定

注:

  • value_join は現状 “未接続” の前提なので、テストは “合成側の安全ゲート” を固定する目的に限定する。

Step 3: docs 更新

更新:

  • docs/development/current/main/phases/phase-29ao/README.mdP6 完了の記録 + Next を P7 へ)
  • docs/development/current/main/10-Now.mdNext 更新)
  • docs/development/current/main/30-Backlog.md
  • CURRENT_TASK.md

検証(必須)

  • cargo build --release
  • ./tools/smokes/v2/run.sh --profile quick
  • ./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh

コミット

  • git add -A
  • git commit -m "phase29ao(p6): gate direct skeleton on valuejoin presence (unconnected)"

P7 の入口)

P7 で ValueJoin の “最小の wire” を入れる:

  • JumpArgsLayout::ExprResultPlusCarriers の SSOT を PlanFrag/CorePlan 側で表現できる場所を決める
  • その上で局所 verify を追加(post-phi-final-form-ssot.md と整合)