diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index 0aab8d2c..2896956e 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -2,6 +2,8 @@ ## Current Focus: Phase 29af(Boundary Hygiene SSOT 固定) +Next: `docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md` + **2025-12-29: Phase 29af P3 完了** ✅ - 目的: carrier の順序(loop_var + carriers)を merge 側 SSOT に統合(仕様不変) - 入口: `src/mir/builder/control_flow/joinir/merge/boundary_carrier_layout.rs` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 9eb6114d..86e35fc5 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.md @@ -8,7 +8,7 @@ Related: ## 直近(JoinIR/selfhost) -- **Phase 29af P3(✅ COMPLETE): BoundaryCarrierLayout SSOT(order 統合)** +- **Phase 29af(✅ P0–P3 COMPLETE, Next: P4): Boundary hygiene / regression entrypoint / carrier layout SSOT** - 入口: `docs/development/current/main/phases/phase-29af/README.md` - **Phase 29ae P1(✅ COMPLETE): JoinIR Regression Pack (SSOT固定)** diff --git a/docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md new file mode 100644 index 00000000..34a581b4 --- /dev/null +++ b/docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md @@ -0,0 +1,71 @@ +# Phase 29af P4: Layout Consistency Contract — Instructions + +Status: Ready for execution +Scope: carrier layout / header PHI の順序整合を Fail-Fast で固定(仕様不変) + +## Goal + +Phase 29af P3 で導入した `BoundaryCarrierLayout`(order SSOT)と、merge が生成する header PHI 側の order がズレた場合に、 +JoinIR merge の入口で fail-fast できる状態にする。 + +- “BTreeMapの反復順” などの偶然に依存して順序が崩れたとき、即時に検知できる +- Pattern2/6/7/phase1883 の回帰パックを壊さず、将来の refactor を安全にする + +## Non-goals + +- 既定挙動の変更(release 既定では挙動不変) +- env var の追加 +- ループ仕様の拡張(PHI/edge_args の新設など) + +## SSOT + +- Carrier order SSOT: `src/mir/builder/control_flow/joinir/merge/boundary_carrier_layout.rs` +- Header PHI Entry/Latch contract: `docs/development/current/main/phases/phase-29ae/README.md` + +## Implementation Steps + +### Step 1: Boundary の “layout長” を実質的なチェックに強化 + +対象: `src/mir/builder/control_flow/joinir/merge/contract_checks/boundary_hygiene.rs` + +`carrier_info` があるとき: + +- `boundary.loop_var_name == Some(carrier_info.loop_var_name)` を要求(名前不整合を fail-fast) +- `BoundaryCarrierLayout::from_boundary(boundary).ordered_names()` が + `["loop_var", ...carrier_info.carriers]` と **同名同順** で一致することを要求 +- `boundary.join_inputs.len() == boundary.host_inputs.len() == layout.len()` を要求 + - 注: host_inputs の中身(ValueId(0) placeholder)は問わない(SkipBinding があるため) + +実行条件は既存と同じ(`joinir_strict` または `joinir_dev` のみ)。 + +### Step 2: Header PHI 側の order と BoundaryCarrierLayout を突合して fail-fast + +新規チェック(案): +- `src/mir/builder/control_flow/joinir/merge/contract_checks/header_phi_layout.rs` + - `verify_header_phi_layout(boundary: &JoinInlineBoundary, info: &LoopHeaderPhiInfo) -> Result<(), String>` + - `BoundaryCarrierLayout` の `ordered_names()` と `info.carrier_order` が一致することを要求 + +呼び出し場所(案): +- `src/mir/builder/control_flow/joinir/merge/coordinator.rs` + - `prebuild_header_phis` 後、rewrite/merge の前(info が確定した直後) + +### Step 3: docs 更新(迷子防止) + +- `docs/development/current/main/phases/phase-29af/README.md` + - P4 として “order consistency contract” を追記し、入口ファイルを列挙 +- `docs/development/current/main/10-Now.md` + - 次にやる P4 のリンクを追記 +- `docs/development/current/main/30-Backlog.md` + - Phase 29af の “Next: P4” を追記 + +## Verification + +- `cargo build --release` +- `./tools/smokes/v2/run.sh --profile quick` +- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` + +## Acceptance Criteria + +- strict/dev を有効にしたときのみ新しい fail-fast が働く(release 既定挙動は不変) +- order mismatch を意図的に作ると、P4 の tag で freeze する(診断が安定) +- 回帰パック(phase29ae entrypoint)が PASS のまま diff --git a/docs/development/current/main/phases/phase-29af/README.md b/docs/development/current/main/phases/phase-29af/README.md index 438e4764..95016bfe 100644 --- a/docs/development/current/main/phases/phase-29af/README.md +++ b/docs/development/current/main/phases/phase-29af/README.md @@ -52,6 +52,12 @@ carrier の順序(loop_var + carriers)を merge 側の SSOT に統合する - 適用: tail_call_policy / latch_incoming_recorder の order 統一 - contract_checks: `phase29af/boundary_hygiene/layout_len`(strict/dev のみ) +## P4: Layout Consistency Contract(Next) + +BoundaryCarrierLayout と header PHI 側の order を突合して、順序のズレを入口で fail-fast できる状態にする(仕様不変)。 + +- 指示書: `docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md` + ## Verification - `cargo build --release`