docs(phase29af): add P4 layout consistency instructions

This commit is contained in:
2025-12-29 05:46:49 +09:00
parent bd4937d89d
commit 87fbe6b950
4 changed files with 80 additions and 1 deletions

View File

@ -2,6 +2,8 @@
## Current Focus: Phase 29afBoundary 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`

View File

@ -8,7 +8,7 @@ Related:
## 直近JoinIR/selfhost
- **Phase 29af P3(✅ COMPLETE: BoundaryCarrierLayout SSOTorder 統合)**
- **Phase 29af P0P3 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固定)**

View File

@ -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 のまま

View File

@ -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 ContractNext
BoundaryCarrierLayout と header PHI 側の order を突合して、順序のズレを入口で fail-fast できる状態にする(仕様不変)。
- 指示書: `docs/development/current/main/phases/phase-29af/P4-LAYOUT-CONSISTENCY-CONTRACT-INSTRUCTIONS.md`
## Verification
- `cargo build --release`