|
|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
---
|
|
|
|
|
Status: Active
|
|
|
|
|
Status: Complete
|
|
|
|
|
Scope: Legacy extractor reduction (planner+composer SSOT)
|
|
|
|
|
Related:
|
|
|
|
|
- docs/development/current/main/design/coreplan-migration-roadmap-ssot.md
|
|
|
|
|
@ -12,140 +12,22 @@ Related:
|
|
|
|
|
|
|
|
|
|
Goal: Reduce legacy extractor fallbacks while keeping planner+composer as the SSOT path.
|
|
|
|
|
|
|
|
|
|
Gate (SSOT):
|
|
|
|
|
## What changed
|
|
|
|
|
|
|
|
|
|
- JoinIR legacy loop table removed; router now delegates to plan/composer only.
|
|
|
|
|
- stdlib loop subsets migrated to plan facts (StringUtils.to_lower, StringUtils.join, trim_start/trim_end).
|
|
|
|
|
- Pattern2/4/8/9 legacy routing removed; Pattern6 nested minimal adopted via CorePlan (strict+release).
|
|
|
|
|
- Dead-code cleanup after legacy removal (unused JoinIR lowerers removed).
|
|
|
|
|
|
|
|
|
|
## Gate (SSOT)
|
|
|
|
|
|
|
|
|
|
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
|
|
|
|
|
|
|
|
|
## P0: Reduce legacy extractors (Pattern1/3) ✅
|
|
|
|
|
## Commands (SSOT)
|
|
|
|
|
|
|
|
|
|
- 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.
|
|
|
|
|
- `./tools/smokes/v2/run.sh --profile quick`
|
|
|
|
|
- `./tools/smokes/v2/profiles/integration/joinir/phase29ae_regression_pack_vm.sh`
|
|
|
|
|
|
|
|
|
|
## P1: Reduce JoinIR wrappers (Pattern6/7) ✅
|
|
|
|
|
## Residuals / Next
|
|
|
|
|
|
|
|
|
|
- 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 a last resort for the remaining legacy entries.
|
|
|
|
|
- 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)`.
|
|
|
|
|
|
|
|
|
|
## 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.
|
|
|
|
|
|
|
|
|
|
## P8: Remove Pattern4 legacy routing ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Remove Pattern4_WithContinue from `LOOP_PATTERNS`.
|
|
|
|
|
- Add a minimal continue fixture + regression smoke under JoinIR gate.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- No change to logs or error strings.
|
|
|
|
|
- Plan/composer remains the only routing path for Pattern4.
|
|
|
|
|
|
|
|
|
|
## P9: Pattern6_NestedLoopMinimal strict/dev gate ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Add nested-loop feature facts and project to canonical facts.
|
|
|
|
|
- In strict/dev, emit a `Freeze::unstructured` tag to avoid legacy fallback.
|
|
|
|
|
- Add a strict shadow smoke for nested minimal and wire it into the gate.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- Release/default behavior remains unchanged.
|
|
|
|
|
- Gate stays green.
|
|
|
|
|
|
|
|
|
|
## P10: Pattern6_NestedLoopMinimal minimal CorePlan subset (strict/dev) ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Add nested minimal facts (outer+inner loop subset) and project into canonical facts.
|
|
|
|
|
- Compose nested loop CorePlan v2 in strict/dev and emit shadow-adopt tag.
|
|
|
|
|
- Update the strict smoke to require the new tag.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- Release/default behavior remains unchanged (legacy JoinIR path stays).
|
|
|
|
|
- Gate stays green.
|
|
|
|
|
|
|
|
|
|
## P11: Pattern6_NestedLoopMinimal release adopt ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Non-strict/release adopts the nested minimal CorePlan v2 when facts are present.
|
|
|
|
|
- Strict/dev tag and fail-fast behavior remain unchanged.
|
|
|
|
|
- Legacy fallback remains for non-matches.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- No new logs/tags in release.
|
|
|
|
|
- Gate stays green.
|
|
|
|
|
|
|
|
|
|
## P12: Remove JoinIR legacy loop table ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Delete legacy loop table routing from JoinIR router.
|
|
|
|
|
- Remove legacy-only modules now that plan/composer is SSOT.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- No change to logs or error strings.
|
|
|
|
|
- Gate stays green.
|
|
|
|
|
|
|
|
|
|
## P13: Warning cleanup (dead_code) ✅
|
|
|
|
|
|
|
|
|
|
- Scope:
|
|
|
|
|
- Remove unused JoinIR lowering modules (legacy remnants).
|
|
|
|
|
- Trim unused Pattern4 extractor fields.
|
|
|
|
|
- Guardrails:
|
|
|
|
|
- No change to logs or error strings.
|
|
|
|
|
- Gate stays green.
|
|
|
|
|
|
|
|
|
|
## Next (planned)
|
|
|
|
|
|
|
|
|
|
- P14: Phase 29ap closeout (docs-only)
|
|
|
|
|
- Next phase is TBD (choose between Plan/Composer subset expansion or CorePlan vocabulary expansion).
|
|
|
|
|
|