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

5.2 KiB

Status, Scope, Related
Status Scope Related
Active Legacy extractor reduction (planner+composer SSOT)
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 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)