phase29ap(p2): route stdlib to_lower via plan char-map subset

This commit is contained in:
2025-12-30 23:50:30 +09:00
parent e0c0e24196
commit 6b851b2e62
26 changed files with 971 additions and 39 deletions

View File

@ -3,7 +3,7 @@
## Current Focus
- Phase: `docs/development/current/main/phases/phase-29ap/README.md`
- Next: Phase 29ap P2 (planned; see `docs/development/current/main/phases/phase-29ap/README.md`)
- Next: Phase 29ap P3 (planned; see `docs/development/current/main/phases/phase-29ap/README.md`)
## Gate (SSOT)

View File

@ -5,7 +5,7 @@ Scope: 「次にやる候補」を短く列挙するメモ。入口は `docs/dev
## Active
- Phase 29ap: `docs/development/current/main/phases/phase-29ap/README.md` (Next: P2 planned)
- Phase 29ap: `docs/development/current/main/phases/phase-29ap/README.md` (Next: P3 planned)
- JoinIR regression gate SSOT: `docs/development/current/main/phases/phase-29ae/README.md`
- CorePlan hardening (docs-first): `docs/development/current/main/phases/phase-29al/README.md`

View File

@ -34,7 +34,7 @@ Related:
## 1.1 Current (active)
- Active phase: `docs/development/current/main/phases/phase-29ap/README.md`
- Next step: Phase 29ap P1 (planned)
- Next step: Phase 29ap P3 (planned)
## 2. すでに固めた SSOT再発防止の土台

View File

@ -12,6 +12,7 @@ Goal: JoinIR の最小回帰セットを SSOT として固定する。
- Pattern3 (release adopt, VM): `phase29ao_pattern3_release_adopt_vm`
- Pattern1 (strict shadow, VM): `phase29ao_pattern1_strict_shadow_vm`
- Pattern1 (subset reject, VM): `phase29ao_pattern1_subset_reject_extra_stmt_vm`
- Pattern1 (stdlib to_lower, VM): `phase29ap_stringutils_tolower_vm`
- Pattern5 (Break, VM): `phase286_pattern5_break_vm`
- Pattern5 (strict shadow, VM): `phase29ao_pattern5_strict_shadow_vm`
- Pattern5 (release adopt, VM): `phase29ao_pattern5_release_adopt_vm`

View File

@ -0,0 +1,70 @@
---
Status: Ready
Scope: code+tests+docs (Pattern1 stdlib to_lower subset via Plan SSOT)
Related:
- docs/development/current/main/phases/phase-29ap/README.md
- docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
- docs/development/current/main/phases/phase-29ae/README.md
- tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh
- apps/lib/json_native/utils/string.hako
- src/mir/builder/control_flow/plan/facts/pattern1_char_map_facts.rs
- src/mir/builder/control_flow/plan/normalizer/pattern1_char_map.rs
- src/mir/builder/control_flow/joinir/patterns/router.rs
---
# Phase 29ap P2: Pattern1 stdlib to_lower subset via Plan SSOT
Date: 2025-12-30
Status: Ready for execution
Goal: StringUtils.to_lower の loop を Plan/Facts/Normalizer で受理し、JoinIR Pattern1 依存を撤去する(既定挙動は不変)。
## 非目的
- Pattern1 の一般拡張(任意の body を許す)
- 新しい env var / 恒常ログ追加
- 既存の release/strict 挙動やエラー文字列の変更
## 実装方針SSOT
### 1) Facts: stdlib to_lower 形状を SSOT 化
- 新規: `pattern1_char_map_facts.rs`
- 形状(超保守):
- condition: `i < s.length()` のみ
- body: `local ch = s.substring(i, i+1)` / `result = result + this.method(ch)` / `i = i + 1`
- break/continue/return/if は不可
- 失敗は `Ok(None)`fallback 維持)
### 2) Planner: DomainPlan を追加
- 新規: `DomainPlan::Pattern1CharMap`
- Facts から 1 候補だけ生成ambiguous は Freeze
### 3) Normalizer: CorePlan へ拡張
- 新規: `normalize_pattern1_char_map`
- 2 PHIloop var + result
- substring → transform method → result add を step block で構成
- static box の `this.method()``current_static_box` から const 受け口で処理
### 4) Smoke: to_lower を gate に入れる
- 新規 fixture: `apps/tests/phase29ap_stringutils_tolower_min.hako`
- 新規 smoke: `tools/smokes/v2/profiles/integration/joinir/phase29ap_stringutils_tolower_vm.sh`
- gate へ追加: `phase29ae_regression_pack_vm.sh`
- docs: `phase-29ae/README.md` に追記
### 5) JoinIR router の Pattern1 は保留stdlib join が依存)
- `LOOP_PATTERNS` の Pattern1 は残すStringUtils.join が plan で未対応なため)
- to_lower は Plan 経路で通ることを smoke で確認
## 検証(必須)
- `cargo build --release`
- `./tools/smokes/v2/run.sh --profile quick`
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## コミット
- `git commit -m "phase29ap(p2): route stdlib to_lower via plan char-map subset"`

View File

@ -33,7 +33,17 @@ Gate (SSOT):
- Guardrails:
- No change to pattern selection or logs.
## P2: Pattern1 stdlib to_lower subset (Plan SSOT) ✅
- Scope:
- Add char-map Facts/Planner/Normalizer path for StringUtils.to_lower (subset).
- Add regression smoke for stdlib to_lower and wire it into JoinIR gate.
- Keep Pattern1 in JoinIR legacy router table for stdlib join until a plan-based subset exists.
- Guardrails:
- No new logs or error strings.
- Fallback remains `Ok(None)` when shape does not match.
## Next (planned)
- P2: Router pattern-name branching reduction (planner outcome + composer SSOT)
- P3: Facts/Feature expansion if needed
- P3: Router pattern-name branching reduction (planner outcome + composer SSOT)
- P4: Facts/Feature expansion if needed