From a352e7e800b40f2747ebde9f2f958a81a0ea0c90 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 30 Dec 2025 14:15:24 +0900 Subject: [PATCH] docs(phase29ao): add p30 move shadow adopt composer ssot instruction --- CURRENT_TASK.md | 4 +- docs/development/current/main/10-Now.md | 4 +- docs/development/current/main/30-Backlog.md | 4 +- .../design/coreplan-migration-roadmap-ssot.md | 2 +- ...SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md | 110 ++++++++++++++++++ .../current/main/phases/phase-29ao/README.md | 9 +- 6 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index fcd40c15..67f19cbe 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -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 P30)** -- 目的: TBD -- 指示書: TBD +- 目的: Facts→CorePlan の入口を `plan/composer` に集約し、Normalizer の責務を DomainPlan→CorePlan に縮退(挙動不変) +- 指示書: `docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md` **2025-12-30: Phase 29ao P25 COMPLETE (Pattern5 strict/dev adopt from facts)** Pattern5(Infinite Early-Exit)を strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分を Fail-Fast で検知できるようにした。 diff --git a/docs/development/current/main/10-Now.md b/docs/development/current/main/10-Now.md index c401f80d..f8514ec8 100644 --- a/docs/development/current/main/10-Now.md +++ b/docs/development/current/main/10-Now.md @@ -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` diff --git a/docs/development/current/main/30-Backlog.md b/docs/development/current/main/30-Backlog.md index 20185319..e2d8e0db 100644 --- a/docs/development/current/main/30-Backlog.md +++ b/docs/development/current/main/30-Backlog.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` diff --git a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md index 5797e291..4c49d879 100644 --- a/docs/development/current/main/design/coreplan-migration-roadmap-ssot.md +++ b/docs/development/current/main/design/coreplan-migration-roadmap-ssot.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(再発防止の土台) diff --git a/docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md b/docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md new file mode 100644 index 00000000..455bef1b --- /dev/null +++ b/docs/development/current/main/phases/phase-29ao/P30-MOVE-SHADOW-ADOPT-COMPOSER-SSOT-INSTRUCTIONS.md @@ -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, 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"` diff --git a/docs/development/current/main/phases/phase-29ao/README.md b/docs/development/current/main/phases/phase-29ao/README.md index 388c73d1..7577cd32 100644 --- a/docs/development/current/main/phases/phase-29ao/README.md +++ b/docs/development/current/main/phases/phase-29ao/README.md @@ -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)