docs(phase29ao): add p9 valuejoin minimal wire instructions

This commit is contained in:
2025-12-30 06:16:48 +09:00
parent c0cdf8e4da
commit 4c072c394b
6 changed files with 112 additions and 5 deletions

View File

@ -3,7 +3,7 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P9ValueJoin minimal wire
指示書: `docs/development/current/main/phases/phase-29ao/P8-VALUEJOIN-EDGEARGS-COMPOSE-PRESERVE-INSTRUCTIONS.md`
指示書: `docs/development/current/main/phases/phase-29ao/P9-VALUEJOIN-MINIMAL-WIRE-INSTRUCTIONS.md`
運用ルール: integration filter で phase143_* は回さないJoinIR 回帰は phase29ae pack のみ)
運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う
移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`

View File

@ -16,7 +16,7 @@ Related:
- **Phase 29aoactive: CorePlan composition from Skeleton/Feature**
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
- 状況: P0/P1/P2/P3/P4/P5/P6/P7/P8 ✅ 完了 / Next: P9
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P8-VALUEJOIN-EDGEARGS-COMPOSE-PRESERVE-INSTRUCTIONS.md`
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P9-VALUEJOIN-MINIMAL-WIRE-INSTRUCTIONS.md`
- **Phase 29af✅ COMPLETE: Boundary hygiene / regression entrypoint / carrier layout SSOT**
- 入口: `docs/development/current/main/phases/phase-29af/README.md`

View File

@ -59,7 +59,7 @@ Scope: 仕様不変。ValueJoin の “expr_result + carriers” を Normal exit
## 検証(必須)
- `cargo test --release -p nyash-rust`
- `cargo test --release -p nyash-rust --lib`
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`

View File

@ -0,0 +1,106 @@
---
Status: Ready
Scope: code仕様不変・strict/dev のみ Fail-Fast
Related:
- docs/development/current/main/phases/phase-29ao/README.md
- docs/development/current/main/design/edgecfg-fragments.md
- docs/development/current/main/design/join-explicit-cfg-construction.md
- docs/development/current/main/design/post-phi-final-form-ssot.md
- docs/development/current/main/phases/phase-29ae/README.md
---
# Phase 29ao P9: ValueJoin minimal wireBlockParams 足場 + strict/dev verify
Date: 2025-12-30
Status: Draft for execution
Scope: 既定挙動は不変。ValueJoin の実配線の前に「join の受け口block params」を SSOT として用意し、strict/dev で contract 違反を局所で落とせるようにする。
## 目的
- EdgeCFG の北極星(`edgecfg-fragments.md`)どおりに、**join 値の合流**を `block params + edge-args` で表現する足場を追加する。
- Phase 29ao P7/P8 で確立した `EdgeArgs(layout+values)` を前提に、**target 側が受け口を持たない / 長さがズレる**などの事故を strict/dev で Fail-Fast に固定する。
- まだ ValueJoin を「本当に使う」段階ではないので、既定挙動release 既定・回帰 pack のログ/挙動)は不変のままにする。
## 非目的
- ValueJoin の本実配線join block の PHI 生成や expr_result の読み出し)
- router/single_planner の経路変更(採用範囲の拡大)
- 新 env var の追加
- 恒常ログの追加strict/dev のみタグは可)
## 提案する最小アーキテクチャP9 の成果物)
- **EdgeCFG API に join 受け口BlockParamsを追加**する(未接続でも SSOT 型が存在する)。
- **compose は BlockParams を破壊しない**合成は写像だけ、allocation は caller
- **strict/dev の verify で “edge-args と block params の整合” をチェック**するrelease は不変)。
## 実装手順
### Step 1: EdgeCFG に BlockParams 型を追加
新規ファイル(推奨):
- `src/mir/builder/control_flow/edgecfg/api/block_params.rs`
例(方向性):
- `pub struct BlockParams { pub layout: JumpArgsLayout, pub params: Vec<ValueId> }`
- `layout``EdgeArgs.layout` と同一 SSOT を参照する
- `params.len()``EdgeArgs.values.len()` と一致するexpr_result + carriers の長さ)
### Step 2: Frag に block_params を追加(既定は空)
対象:
- `src/mir/builder/control_flow/edgecfg/api/frag.rs`
やること:
- `Frag { .. }``pub block_params: BTreeMap<BasicBlockId, BlockParams>` を追加
- `Frag::new` / `Frag::with_single_exit` の既定は `BTreeMap::new()`
### Step 3: compose が block_params を合成しても壊れないことを固定
対象:
- `src/mir/builder/control_flow/edgecfg/api/compose/seq.rs`
- `src/mir/builder/control_flow/edgecfg/api/compose/if_.rs`
- `src/mir/builder/control_flow/edgecfg/api/compose/cleanup.rs`
やること:
- `Frag` を返すときに `block_params` を merge衝突は strict/dev で Fail-Fast
- SSOT 方針: `BasicBlockId` が同じなら同じ join のはずなので、二重定義は contract violation
### Step 4: strict/dev verify を追加ValueJoin 事故の早期検知)
対象(候補):
- `src/mir/builder/control_flow/edgecfg/api/verify.rs`
追加する検証strict/dev のみ):
- `wires` / `branches``EdgeArgs.layout == ExprResultPlusCarriers` が現れる場合:
- `target` block に `block_params[target]` が存在すること
- `block_params[target].layout == ExprResultPlusCarriers`
- `block_params[target].params.len() == edge_args.values.len()`
注:
- Phase 29ao P7 で PlanVerifier 側に V13 があるので、P9 は EdgeCFG 側の “受け口” を固定する(責務分離)。
### Step 5: unit testsSome/None 境界と Fail-Fast の固定)
推奨:
- `src/mir/builder/control_flow/edgecfg/api/verify.rs``verify_frag_invariants_strict()` に並ぶ strict 検証を追加するなら、その関数単体の unit tests をここに追加
- `compose` 側の unit tests で `block_params` が保持されることを確認P8 と同じスタイル)
## 検証(必須)
- `cargo test --release -p nyash-rust --lib`
- `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(p9): scaffold block params for valuejoin (strict/dev verify)"`
## 次P10 の方向性)
P10 では、最小ケースIf2 か loop の after join のどちらか 1つに対して:
- `block_params` を normalizer が生成する
- join block で PHIまたは block param loweringを 1 箇所に固定
- `post-phi-final-form-ssot.md` の “局所 verify” と整合させる

View File

@ -65,4 +65,5 @@ GateSSOT:
## Nextplanned
- P9: ValueJoin の最小 wirestrict/dev Fail-Fast 付き
- P9: ValueJoin の最小 wireblock params 足場 + strict/dev Fail-Fast
- 指示書: `docs/development/current/main/phases/phase-29ao/P9-VALUEJOIN-MINIMAL-WIRE-INSTRUCTIONS.md`