phase29aj(p7): planner-first pattern8 bool predicate scan subset

This commit is contained in:
2025-12-29 13:57:26 +09:00
parent d819fe0dae
commit 5ba77cb62a
10 changed files with 590 additions and 6 deletions

View File

@ -2,9 +2,14 @@
## Current Focus: Phase 29ajPlannerOutcome SSOT
Next: Phase 29aj P7TBD
Next: Phase 29aj P8TBD
運用ルール: integration filter で phase143_* は回さないJoinIR 回帰は phase29ae pack のみ)
**2025-12-29: Phase 29aj P7 完了**
- 目的: Pattern8BoolPredicateScanを Facts→Planner-first に移行(仕様不変)
- 実装: `src/mir/builder/control_flow/plan/facts/pattern8_bool_predicate_scan_facts.rs` / `src/mir/builder/control_flow/plan/planner/build.rs` / `src/mir/builder/control_flow/plan/single_planner/rules.rs`
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` PASS
**2025-12-29: Phase 29aj P6 完了**
- 目的: JoinIR 回帰の integration gate を phase29ae pack に固定し、phase143_* を隔離
- 実装: `tools/smokes/v2/profiles/integration/joinir/phase143_legacy_pack.sh` / `docs/development/current/main/phases/phase-29aj/README.md` / `docs/development/current/main/phases/phase-29ae/README.md`

View File

@ -19,8 +19,8 @@ Related:
- **Phase 29ajcandidate: PlannerOutcome observability SSOT**
- 入口: `docs/development/current/main/phases/phase-29aj/README.md`
- 状況: P0/P1/P2/P3/P4/P5/P6 ✅ 完了
- Next: Phase 29aj P7TBD
- 状況: P0/P1/P2/P3/P4/P5/P6/P7 ✅ 完了
- Next: Phase 29aj P8TBD
- 運用: integration filter で phase143_* は回さないJoinIR 回帰は phase29ae pack のみ)
- **Phase 29aicandidate: Plan/Frag single-plannerFacts SSOT**

View File

@ -0,0 +1,92 @@
# Phase 29aj P7: Pattern8 BoolPredicateScan planner-first via Facts (subset)
Date: 2025-12-29
Status: Ready for execution
Scope: Pattern8 facts → planner candidate → single_planner planner-first仕様不変
Goal: Pattern8 を Facts→Planner に乗せ、extractor 依存を 1 本減らす
## Objective
- Pattern8BoolPredicateScanを LoopFacts に追加し、planner が `DomainPlan::Pattern8BoolPredicateScan` を返せるようにする
- single_planner は Pattern8 の型一致時のみ planner-first 採用
- 既定挙動・観測・エラー文字列は不変
## Non-goals
- Pattern8 サブセット拡張
- ルール順序 SSOT の CandidateSet 移管
- 新 env var / 新ログ追加
## Implementation Steps
### Step 1: Facts SSOT 追加Pattern8
Files:
- `src/mir/builder/control_flow/plan/facts/pattern8_bool_predicate_scan_facts.rs` (new)
Facts:
- `Pattern8BoolPredicateScanFacts { loop_var, haystack, predicate_receiver, predicate_method, condition, step_lit }`
Extraction rules (Ok(None) fallback only):
- condition は `i < s.length()`(超保守で length のみ)
- step は `i = i + 1`StepShape を利用)
- body 内に `if not receiver.method(s.substring(i, i + 1)) { return false }` がある
- hardcode 禁止: receiver / method 名は AST から取得
Unit tests:
- 最小成功ケース
- step 違い / else 付きは Ok(None)
### Step 2: LoopFacts に接続
Files:
- `src/mir/builder/control_flow/plan/facts/mod.rs`
- `src/mir/builder/control_flow/plan/facts/loop_facts.rs`
Changes:
- LoopFacts に `pattern8_bool_predicate_scan` を追加
- `try_build_loop_facts()` に抽出を追加
- all-none 判定に `pattern8_bool_predicate_scan` を含める
### Step 3: Planner candidate 追加
File:
- `src/mir/builder/control_flow/plan/planner/build.rs`
Changes:
- facts が Some のとき `DomainPlan::Pattern8BoolPredicateScan` を候補に追加
- rule 名は `loop/pattern8_bool_predicate_scan`
- unit test 追加
### Step 4: single_planner を Pattern8 planner-first に
File:
- `src/mir/builder/control_flow/plan/single_planner/rules.rs`
Changes:
- RuleKind::Pattern8 を追加
- planner_opt が Pattern8 のとき採用
- それ以外は extractor へフォールバック
### Step 5: docs / CURRENT_TASK 更新
Files:
- `docs/development/current/main/phases/phase-29aj/README.md`
- `docs/development/current/main/10-Now.md`
- `docs/development/current/main/30-Backlog.md`
- `CURRENT_TASK.md`
## Acceptance Criteria
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
- `./tools/smokes/v2/run.sh --profile integration --filter "phase286_pattern8_"` (任意)
## Commit
- `git add -A && git commit -m "phase29aj(p7): planner-first pattern8 bool predicate scan subset"`
## Next (P8 candidate)
- TBD

View File

@ -52,6 +52,13 @@ Goal: planner の facts/plan を 1 本の outcome に集約し、観測の SSOT
- 完了: phase143_* を legacy pack に隔離し、SSOT の受け入れは JoinIR pack のみに統一
- 検証: `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh` / `./tools/smokes/v2/profiles/integration/joinir/phase143_legacy_pack.sh` (SKIP)
## P7: Pattern8 (BoolPredicateScan) planner-firstsubset
- 指示書: `docs/development/current/main/phases/phase-29aj/P7-PATTERN8-BOOLPREDICATE-PLANNER-FIRST-INSTRUCTIONS.md`
- ねらい: Pattern8 を Facts→Planner-first に接続し、extractor 依存を削減
- 完了: Pattern8 facts/planner/single_planner を接続
- 検証: `cargo build --release` / `./tools/smokes/v2/run.sh --profile quick` / `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## Verification (SSOT)
- `cargo build --release`