docs(phase29ao): add p31 shadow adopt router refactor instruction

This commit is contained in:
2025-12-30 14:32:29 +09:00
parent a189c9e301
commit b3e2ff57d5
6 changed files with 106 additions and 9 deletions

View File

@ -19,8 +19,8 @@ Scope: Repo root の旧リンク互換。現行の入口は `docs/development/cu
`docs/development/current/main/design/coreplan-migration-roadmap-ssot.md` が移行タスクの Done 判定の入口。
**Next implementation (Phase 29ao P31)**
- 目的: TBD
- 指示書: TBD
- 目的: shadow adopt の判定/Fail-Fast/タグを composer に集約し、router を “呼ぶだけ” に縮退(挙動不変)
- 指示書: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-COMPOSER-SSOT-INSTRUCTIONS.md`
**2025-12-30: Phase 29ao P30 COMPLETE (Shadow adopt composer SSOT)**
Facts→CorePlan の入口を `plan/composer` に集約し、Normalizer の責務を DomainPlan→CorePlan に縮退した(挙動不変)。

View File

@ -2,8 +2,8 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P31TBD
指示書: TBD
Next: Phase 29ao P31shadow adopt routing SSOT
指示書: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-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`

View File

@ -15,8 +15,8 @@ Related:
- **Phase 29aoactive: CorePlan composition from Skeleton/Feature**
- 入口: `docs/development/current/main/phases/phase-29ao/README.md`
- 状況: P0P30 ✅ 完了 / Next: P31TBD
- Next 指示書: TBD
- 状況: P0P30 ✅ 完了 / Next: P31shadow adopt routing SSOT
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-COMPOSER-SSOT-INSTRUCTIONS.md`
- **Phase 29af✅ COMPLETE: Boundary hygiene / regression entrypoint / carrier layout SSOT**
- 入口: `docs/development/current/main/phases/phase-29af/README.md`

View File

@ -34,7 +34,7 @@ Related:
## 1.1 Current (active)
- Active phase: `docs/development/current/main/phases/phase-29ao/README.md`
- Next step: Phase 29ao P31TBD
- Next step: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-COMPOSER-SSOT-INSTRUCTIONS.md`
## 2. すでに固めた SSOT再発防止の土台

View File

@ -0,0 +1,91 @@
---
Status: Ready
Scope: code+tests+docs仕様不変
Related:
- docs/development/current/main/phases/phase-29ao/README.md
- tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
- src/mir/builder/control_flow/joinir/patterns/router.rs
- src/mir/builder/control_flow/plan/composer/shadow_adopt.rs
---
# Phase 29ao P31: shadow adopt の判定/Fail-Fast/タグを composer に集約router を薄くする)
Date: 2025-12-30
Status: Ready for execution
Goal: `router.rs` に散っている shadow adopt の分岐Pattern1/2/3/5/6/7 の facts検証 + subset gate + tag 出力)を `plan/composer` 側の SSOT 入口に集約し、router を “呼ぶだけ” の薄い orchestrator に縮退する。挙動strict/dev の fail-fast・タグ・ログは不変。
## 背景
- P30 で Facts→CorePlan の入口自体は composer に集約できたが、router にはまだ
- patternごとの `if strict_or_dev && matches!(...)` 連鎖
- `facts missing/mismatch/compose rejected` のエラーパス
- subset gatePattern2/6 の `outcome.plan` 条件)
- タグ出力P28/P29
が残っている。
- ここが残ると、今後の拡張Pattern4/8/9 や feature合成の導線追加のたびに router が肥大化し、SSOT が分散する。
## 非目的
- shadow adopt の範囲拡張P31は構造整理のみ
- エラーメッセージ変更
- タグ名変更(既存の `[coreplan/shadow_adopt:*]` を維持)
- 新しい env var 追加
## 実装方針(構造で解く)
### 1) composer/shadow_adopt に “判定 + compose + tag” の単一入口を追加
対象:
- `src/mir/builder/control_flow/plan/composer/shadow_adopt.rs`
追加(例):
```rust
pub(in crate::mir::builder) struct ShadowAdoptOutcome {
pub core_plan: CorePlan,
pub tag: &'static str, // e.g. "[coreplan/shadow_adopt:pattern7_split_scan]"
}
pub(in crate::mir::builder) fn try_shadow_adopt_core_plan(
builder: &mut MirBuilder,
ctx: &LoopPatternContext,
strict_or_dev: bool,
domain_plan: &DomainPlan,
outcome: &PlanBuildOutcome,
) -> Result<Option<ShadowAdoptOutcome>, String>;
```
責務:
- strict/dev でしか shadow adopt しないstrict_or_dev=false なら常に Ok(None)
- Pattern2/6 の subset gate はここに集約(`outcome.plan` が planner 由来かどうかで判定)
- `facts missing/mismatch/compose rejected` の fail-fast をここに集約(メッセージは現状の router と一致させる)
- 成功時に返す `tag` は既存タグをそのまま返す(出力は router 側で `eprintln!("{}", tag)` に統一)
### 2) router は “1回呼ぶだけ” に縮退
対象:
- `src/mir/builder/control_flow/joinir/patterns/router.rs`
変更:
- `if strict_or_dev { ... }` の pattern 連鎖を削除し、代わりに 1 箇所だけ:
- `if let Some(adopt) = composer::try_shadow_adopt_core_plan(...) ? { PlanVerifier::verify; eprintln!(tag); return PlanLowerer::lower(...); }`
- adopt しない場合は従来通り `lower_via_plan(builder, domain_plan, ctx)` に落とす
### 3) テスト(回帰ゲートで固定)
P28/P29 により、回帰ゲートの smoke が “タグ必須” になっているので、このリファクタは gate で必ず踏まれて検証される。
必須:
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## docs 更新
- `docs/development/current/main/phases/phase-29ao/README.md`P31 追加、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(p31): ssot shadow adopt routing in composer"`

View File

@ -177,7 +177,13 @@ GateSSOT:
- 指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md`
- ねらい: Facts→CorePlan の入口を `plan/composer` に集約し、Normalizer の責務を DomainPlan→CorePlan に縮退(挙動不変)
## P31: shadow adopt routing SSOTrouter を薄くする)
- 指示書: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-COMPOSER-SSOT-INSTRUCTIONS.md`
- ねらい: shadow adopt の判定/Fail-Fast/タグを composer に集約し、router を “呼ぶだけ” に縮退(挙動不変)
## Nextplanned
- Next: P31TBD
- After P31: TBD
- Next: P31実装
- 指示書: `docs/development/current/main/phases/phase-29ao/P31-REFactor-SHADOW-ADOPT-ROUTER-TO-COMPOSER-SSOT-INSTRUCTIONS.md`
- After P31: P32TBD