Files
hakorune/docs/development/current/main/phases/phase-29ap/README.md

97 lines
3.4 KiB
Markdown
Raw Normal View History

---
Status: Active
Scope: Legacy extractor reduction (planner+composer SSOT)
Related:
- docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
- docs/development/current/main/design/coreplan-migration-done-criteria-ssot.md
- docs/development/current/main/design/coreloop-composer-v0-v1-boundary-ssot.md
- docs/development/current/main/phases/phase-29ae/README.md
---
# Phase 29ap: Legacy extractor reduction (Step-E)
Goal: Reduce legacy extractor fallbacks while keeping planner+composer as the SSOT path.
Gate (SSOT):
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
## P0: Reduce legacy extractors (Pattern1/3) ✅
- Scope:
- Remove Pattern1/3 extractor fallbacks in `single_planner`.
- Remove Pattern3 JoinIR router entry so plan line is the only path.
- Pattern1 JoinIR entry is retained for now (stdlib loops still rely on it).
- Guardrails:
- Outcome remains `Ok(None)` for non-matching cases.
- No new logs or error strings.
## P1: Reduce JoinIR wrappers (Pattern6/7) ✅
- Scope:
- Drop JoinIR-side Pattern6/7 wrapper modules (plan/composer is SSOT).
- Keep routing through single_planner → composer adopt.
- 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.
## P3: Pattern1 stdlib join subset (Plan SSOT) ✅
- Scope:
- Add array-join Facts/Planner/Normalizer path for StringUtils.join (subset).
- Add regression smoke for stdlib join and wire it into JoinIR gate.
- Remove Pattern1 from JoinIR legacy router table.
- Guardrails:
- No new logs or error strings.
- Fallback remains `Ok(None)` when shape does not match.
## P4: JoinIR legacy table shrink (Pattern8 removal) ✅
- Scope:
- Remove Pattern8 from `LOOP_PATTERNS` so plan/composer stays SSOT for normal loops.
- Keep legacy table as last resort for Pattern6_NestedLoopMinimal / Pattern4 / Pattern9 only.
- Guardrails:
- No change to logs or error strings.
- Legacy routing remains a last-resort fallback.
## P5: Remove Pattern2 from JoinIR legacy table ✅
- Scope:
- Remove Pattern2 (with break) from `LOOP_PATTERNS`.
- Keep plan/composer as the only routing path for Pattern2.
- Guardrails:
- No change to logs or error strings.
- Fallback remains `Ok(None)` for non-matching plan cases.
## P6: stdlib trim_start/trim_end subset (Pattern2BreakFacts) ✅
- Scope:
- Add a conservative Pattern2BreakFacts subset for `trim_start`/`trim_end`.
- Normalize `not is_whitespace(...)` into `is_whitespace(...) == false` in facts.
- Restore quick smoke by ensuring stdlib loops are handled by plan/composer.
- Guardrails:
- No new logs or error strings.
- Subset only: if shape deviates, return `Ok(None)`.
## Next (planned)
## P7: Pattern9 legacy table removal ✅
- Scope:
- Pattern9 is not referenced by stdlib/quick/gate; only legacy pack SKIP remains.
- Removed Pattern9 from JoinIR legacy table (plan/composer remains SSOT).
- Guardrails:
- No change to logs or error strings.
## Next (planned)
- P8: Follow-up legacy table shrink or leave as-is with justification