docs(phase29ao): add p30 move shadow adopt composer ssot instruction
This commit is contained in:
@ -2,8 +2,8 @@
|
||||
|
||||
## Current Focus: Phase 29ao(CorePlan composition)
|
||||
|
||||
Next: Phase 29ao P30(TBD)
|
||||
指示書: TBD
|
||||
Next: Phase 29ao P30(Shadow adopt composer SSOT)
|
||||
指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
|
||||
運用ルール: integration filter で phase143_* は回さない(JoinIR 回帰は phase29ae pack のみ)
|
||||
運用ルール: phase286_pattern9_* は legacy pack (SKIP) を使う
|
||||
移行道筋 SSOT: `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`
|
||||
|
||||
@ -15,8 +15,8 @@ Related:
|
||||
|
||||
- **Phase 29ao(active): CorePlan composition from Skeleton/Feature**
|
||||
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
|
||||
- 状況: P0–P29 ✅ 完了 / Next: P30(TBD)
|
||||
- Next 指示書: TBD
|
||||
- 状況: P0–P29 ✅ 完了 / Next: P30(Shadow adopt composer SSOT)
|
||||
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
|
||||
|
||||
- **Phase 29af(✅ COMPLETE): Boundary hygiene / regression entrypoint / carrier layout SSOT**
|
||||
- 入口: `docs/development/current/main/phases/phase-29af/README.md`
|
||||
|
||||
@ -34,7 +34,7 @@ Related:
|
||||
## 1.1 Current (active)
|
||||
|
||||
- Active phase: `docs/development/current/main/phases/phase-29ao/README.md`
|
||||
- Next step: TBD (Phase 29ao P30)
|
||||
- Next step: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
|
||||
|
||||
## 2. すでに固めた SSOT(再発防止の土台)
|
||||
|
||||
|
||||
@ -0,0 +1,110 @@
|
||||
---
|
||||
Status: Ready
|
||||
Scope: code+tests+docs(仕様不変)
|
||||
Related:
|
||||
- docs/development/current/main/phases/phase-29ao/README.md
|
||||
- docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
|
||||
- docs/development/current/main/design/coreplan-skeleton-feature-model.md
|
||||
- src/mir/builder/control_flow/plan/composer/mod.rs
|
||||
- src/mir/builder/control_flow/joinir/patterns/router.rs
|
||||
---
|
||||
|
||||
# Phase 29ao P30: Shadow adopt の “Facts→CorePlan” 入口を composer に集約(SSOT)
|
||||
|
||||
Date: 2025-12-30
|
||||
Status: Ready for execution
|
||||
Goal: 現在 Normalizer に散っている `*_from_facts`(shadow adopt 用の Facts→CorePlan 入口)を `plan/composer` へ移し、**Facts→CorePlan の SSOT 入口を1箇所**に収束させる。挙動は不変(strict/dev も含む)。
|
||||
|
||||
## 背景
|
||||
|
||||
- 現状:
|
||||
- DomainPlan→CorePlan の SSOT は `PlanNormalizer::normalize(domain_plan, ...)`
|
||||
- strict/dev shadow adopt は `router.rs` から `PlanNormalizer::*_from_facts(...)` を直接呼んでいる(Pattern2/3/5/6/7 など)
|
||||
- しかし “Facts→CorePlan” は本来 Normalizer の責務ではなく、`composer`(合成入口)に寄せた方が構造が綺麗になる。
|
||||
|
||||
P30 は **責務位置を正すリファクタ**で、意味論は一切変えない。
|
||||
|
||||
## 非目的
|
||||
|
||||
- DomainPlan の撤去
|
||||
- Facts の拡張
|
||||
- strict/dev の採用条件変更
|
||||
- ログ/タグの追加変更(既存タグは維持)
|
||||
|
||||
## 実装方針(構造で解く)
|
||||
|
||||
### 1) composer に “shadow adopt 専用 API” を追加
|
||||
|
||||
対象:
|
||||
- `src/mir/builder/control_flow/plan/composer/mod.rs`
|
||||
|
||||
追加(推奨):
|
||||
- `src/mir/builder/control_flow/plan/composer/shadow_adopt.rs`
|
||||
|
||||
API 方針:
|
||||
- 文字列による by-name 分岐は禁止
|
||||
- router 側は `DomainPlan` variant を既に持っているので、**patternごとの関数**で受ける(曖昧さ排除)
|
||||
|
||||
例:
|
||||
```rust
|
||||
pub(in crate::mir::builder) fn compose_coreplan_for_pattern7_split_scan(
|
||||
builder: &mut MirBuilder,
|
||||
facts: &CanonicalLoopFacts,
|
||||
ctx: &LoopPatternContext,
|
||||
) -> Result<Option<CorePlan>, String>
|
||||
```
|
||||
|
||||
実装:
|
||||
- “薄い変換” + `PlanNormalizer::normalize` の再利用だけにする(ロジック再実装禁止)
|
||||
- facts から対応する `DomainPlan::*` を組み立てる
|
||||
- `PlanNormalizer::normalize(builder, domain_plan, ctx)` を呼ぶ
|
||||
- facts 不在なら `Ok(None)`
|
||||
|
||||
対象パターン(現状の shadow adopt 対象):
|
||||
- Pattern1: 既に `normalize_loop_skeleton_from_facts` があるが、router 側の入口を composer 側に寄せてもよい
|
||||
- Pattern2 subset: `facts.facts.pattern2_break`
|
||||
- Pattern3: `facts.facts.pattern3_ifphi`
|
||||
- Pattern5: `facts.facts.pattern5_infinite_early_exit`
|
||||
- Pattern6 subset: `facts.facts.scan_with_init`
|
||||
- Pattern7: `facts.facts.split_scan`
|
||||
|
||||
### 2) router の shadow adopt は composer を呼ぶだけにする
|
||||
|
||||
対象:
|
||||
- `src/mir/builder/control_flow/joinir/patterns/router.rs`
|
||||
|
||||
変更:
|
||||
- `PlanNormalizer::*_from_facts` の呼び出しを、composer の `compose_coreplan_for_*` 呼び出しに差し替える
|
||||
- strict/dev の fail-fast 条件・タグ出力・planner由来ゲート条件はそのまま維持
|
||||
|
||||
### 3) Normalizer から `*_from_facts` を撤去(or 最小 shim)
|
||||
|
||||
対象:
|
||||
- `src/mir/builder/control_flow/plan/normalizer/pattern*.rs`
|
||||
|
||||
方針(どちらか):
|
||||
- A: `*_from_facts` を削除し、router/composer に集約(推奨)
|
||||
- B: 互換のため残すが、中身は composer を呼ぶだけ(shim)にする
|
||||
|
||||
この時点で「Facts→CorePlan の SSOT 入口」は composer として明確になる。
|
||||
|
||||
## テスト(必須)
|
||||
|
||||
- `cargo build --release`
|
||||
- `./tools/smokes/v2/run.sh --profile quick`
|
||||
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
||||
|
||||
(任意)composer の境界ユニットテスト:
|
||||
- facts が `None` のとき `Ok(None)`
|
||||
- facts が `Some` のとき `Ok(Some(_))` まで到達(builder の variable_map を最小で埋める)
|
||||
|
||||
## docs 更新(追跡)
|
||||
|
||||
- `docs/development/current/main/phases/phase-29ao/README.md`(P30追加、Next更新)
|
||||
- `docs/development/current/main/10-Now.md` / `docs/development/current/main/30-Backlog.md` / `CURRENT_TASK.md`
|
||||
- `docs/development/current/main/design/coreplan-migration-roadmap-ssot.md`(Current/Next更新)
|
||||
|
||||
## コミット
|
||||
|
||||
- `git add -A`
|
||||
- `git commit -m "phase29ao(p30): move shadow adopt composer ssot"`
|
||||
@ -172,6 +172,13 @@ Gate(SSOT):
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P29-SHADOW-ADOPT-TAGS-COVERAGE-ALL-GATE-PATTERNS-INSTRUCTIONS.md`
|
||||
- ねらい: regression gate に含まれる全パターンで “shadow adopt を踏んだ” をタグ必須として固定(仕様不変)
|
||||
|
||||
## P30: Shadow adopt composer SSOT(Facts→CorePlan入口を集約)
|
||||
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
|
||||
- ねらい: Facts→CorePlan の入口を `plan/composer` に集約し、Normalizer の責務を DomainPlan→CorePlan に縮退(挙動不変)
|
||||
|
||||
## Next(planned)
|
||||
|
||||
- Next: P30(TBD)
|
||||
- Next: P30(実装)
|
||||
- 指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
|
||||
- After P30: P31(TBD)
|
||||
|
||||
Reference in New Issue
Block a user