docs(phase29ao): add p27 pattern6 subset strict adopt instruction

This commit is contained in:
2025-12-30 13:34:29 +09:00
parent 52fc3f9353
commit d9afc803ef
6 changed files with 107 additions and 8 deletions

View File

@ -2,8 +2,8 @@
## Current Focus: Phase 29aoCorePlan composition
Next: Phase 29ao P27TBD
指示書: TBD
Next: Phase 29ao P27Pattern6 subset strict/dev adopt from facts
指示書: `docs/development/current/main/phases/phase-29ao/P27-STRICT-ADOPT-PATTERN6-SCANWITHINIT-SUBSET-FROM-FACTS-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`
- 状況: P0P26 ✅ 完了 / Next: P27TBD
- Next 指示書: TBD
- 状況: P0P26 ✅ 完了 / Next: P27Pattern6 subset strict/dev adopt from facts
- Next 指示書: `docs/development/current/main/phases/phase-29ao/P27-STRICT-ADOPT-PATTERN6-SCANWITHINIT-SUBSET-FROM-FACTS-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: TBD (Phase 29ao P27)
- Next step: `docs/development/current/main/phases/phase-29ao/P27-STRICT-ADOPT-PATTERN6-SCANWITHINIT-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
## 2. すでに固めた SSOT再発防止の土台

View File

@ -0,0 +1,92 @@
---
Status: Ready
Scope: code+tests+docsstrict/dev のみ、仕様不変)
Related:
- docs/development/current/main/phases/phase-29ao/README.md
- tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
- tools/smokes/v2/profiles/integration/apps/phase29ab_pattern6_scan_with_init_ok_min_vm.sh
- src/mir/builder/control_flow/joinir/patterns/router.rs
- src/mir/builder/control_flow/plan/normalizer/pattern_scan_with_init.rs
- src/mir/builder/control_flow/plan/facts/loop_facts.rs
---
# Phase 29ao P27: strict/dev Pattern6(ScanWithInit) “planner subset” を Facts→CorePlan で shadow adopt
Date: 2025-12-30
Status: Ready for execution
Goal: Pattern6 のうち **planner が Facts から一意に作れる ScanWithInit subset** だけを strict/dev で Facts→CorePlan に寄せ、DomainPlan 経路との差分facts/extractor/normalize のズレを早期検知するrelease 既定挙動は不変)。
## 背景
- Pattern6 は OK/contract/variantreverse/matchscan 等)が混在している。
- 現状の Facts`scan_with_init`)は “最小 subset” に寄せてあり、すべての variant を表現できるわけではない。
- そこで P27 は P26 と同様に **planner 由来のときだけ** strict/dev shadow adopt を行う:
- planner が作れない variant は従来どおり extractorfallback経路で維持
- planner subset は Facts→CorePlan で通し、ズレを fail-fast で検知
## 非目的
- Pattern6 の reverse/matchscan など、Facts 未対応 variant を adopt 強制すること
- Facts subset の拡張別Pで扱う
- 新しい env var/恒常ログ追加
- release 既定経路の変更
## 実装方針
### 1) Facts→CorePlan の入口を PlanNormalizer に追加ScanWithInit subset
対象:
- `src/mir/builder/control_flow/plan/normalizer/mod.rs`
- `src/mir/builder/control_flow/plan/normalizer/pattern_scan_with_init.rs`
追加:
- `pub(in crate::mir::builder) fn normalize_scan_with_init_from_facts(...) -> Result<Option<CorePlan>, String>`
仕様:
- `CanonicalLoopFacts.facts.scan_with_init``Some` のときだけ `Some(CorePlan)` を返す
- それ以外は `Ok(None)`fallback維持
- 実装は “薄い変換” のみSSOT増殖禁止:
- `ScanWithInitFacts -> ScanWithInitPlan` を機械的に詰め替える
- `early_return_expr` / `not_found_return_lit` / `scan_direction` / `dynamic_needle` は planner の既定subsetに合わせる
- 例: `early_return_expr = Variable(loop_var)`, `not_found_return_lit = -1`, `dynamic_needle = false`
- 既存の `normalize_scan_with_init(builder, ScanWithInitPlan, ctx)` を呼ぶ
### 2) router の strict/dev shadow adopt を Pattern6 subset に追加planner 由来のみ)
対象:
- `src/mir/builder/control_flow/joinir/patterns/router.rs`
方針:
- strict/dev でも Pattern6 全体には強制しないP26と同様
- 条件:
- 選ばれた `domain_plan``DomainPlan::ScanWithInit(_)`
- かつ `outcome.plan``Some(DomainPlan::ScanWithInit(_))`planner が作った subset
- 上記を満たすときだけ adopt:
- `facts.facts.scan_with_init``Some` であることを assertfail-fast
- `PlanNormalizer::normalize_scan_with_init_from_facts(...)` を呼び、`Some(CorePlan)` を要求fail-fast
- 上記以外fallback extractor 由来)の `DomainPlan::ScanWithInit` は従来経路のまま:
- `lower_via_plan(builder, domain_plan, ctx)`
これにより、reverse/matchscan 等の variant で facts が無い場合も strict/dev で無駄に落ちない(互換維持)。
### 3) 回帰ゲートSSOT
Pattern6 の integration smokes は既に strict で実行されている(例: `phase29ab_pattern6_scan_with_init_ok_min_vm.sh`)。
よって新しい smoke 追加は不要で、`phase29ae_regression_pack_vm.sh``phase29ab_pattern6_` がそのまま adopt 経路のゲートになる。
## テスト(必須)
- `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`P27 追加、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(p27): strict/dev adopt pattern6 scan_with_init subset from facts"`

View File

@ -157,6 +157,13 @@ GateSSOT:
- 指示書: `docs/development/current/main/phases/phase-29ao/P26-STRICT-ADOPT-PATTERN2-BREAK-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- ねらい: Pattern2 のうち Facts が表現できる subset を strict/dev で Facts→CorePlan に寄せ、段階的に CorePlan 合成へ収束(既定挙動は不変)
## P27: strict/dev Pattern6(ScanWithInit) subset adopt from facts
- 指示書: `docs/development/current/main/phases/phase-29ao/P27-STRICT-ADOPT-PATTERN6-SCANWITHINIT-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- ねらい: Pattern6 のうち planner subsetFacts由来だけを strict/dev で Facts→CorePlan に寄せ、reverse/matchscan 等の variant は fallback 維持(既定挙動は不変)
## Nextplanned
- Next: P27TBD
- Next: P27実装
- 指示書: `docs/development/current/main/phases/phase-29ao/P27-STRICT-ADOPT-PATTERN6-SCANWITHINIT-SUBSET-FROM-FACTS-INSTRUCTIONS.md`
- After P27: P28TBD