docs(phase29ao): add p6 valuejoin presence gate instructions

This commit is contained in:
2025-12-30 05:18:04 +09:00
parent 7d69c7580b
commit b44c3f6195
3 changed files with 83 additions and 2 deletions

View File

@ -0,0 +1,80 @@
---
Status: Ready
Scope: code未接続・仕様不変
Related:
- 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.rs`direct 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.md`P6 完了の記録 + Next を P7 へ)
- `docs/development/current/main/10-Now.md`Next 更新)
- `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` と整合)

View File

@ -50,4 +50,5 @@ GateSSOT:
## Nextplanned
- P6: ValueJoin presence を post-phi SSOT に沿って wire局所 verify から
- P6: ValueJoin presencedirect skeleton の安全ゲート、未接続・仕様不変
- 指示書: `docs/development/current/main/phases/phase-29ao/P6-VALUEJOIN-PRESENCE-GATE-INSTRUCTIONS.md`