Files
hakorune/docs/development/current/main/phases/phase-29ac

Phase 29ac: JoinIR thaw plan (Pattern6/7 near-miss → PASS)

Goal: Convert freeze-fixed Pattern6/7 near-miss cases into PASS while keeping contracts intact (no by-name or silent fallback).

Status

  • P1 Pattern6 reverse scan: Plan/Normalizer で受理して PASS
  • P2 Pattern6 matchscan: fixture を contract-aligned に修正して PASS
  • P3 Pattern7 split-scan: near-miss を contract-aligned な OK fixture として PASS 固定(元の契約違反 fixture は残す)

Target list (initial)

  • apps/tests/phase29ab_pattern6_reverse_firstfail_min.hako
  • apps/tests/phase29ab_pattern6_matchscan_firstfail_min.hako
  • apps/tests/phase29ab_pattern7_firstfail_min.hako

Outcome (SSOT)

PASS fixtures (behavioral)

  • Pattern6 reverse scan OK: apps/tests/phase29ab_pattern6_reverse_ok_min.hakoRC=1
  • Pattern6 matchscan OK: apps/tests/phase29ab_pattern6_matchscan_ok_min.hakoRC=1
  • Pattern7 split-scan near-miss fixup OK: apps/tests/phase29ac_pattern7_splitscan_nearmiss_fix_ok_min.hakoRC=3

FAIL-Fast fixtures (contract boundary)

  • Pattern6 scan-with-init contract violation: apps/tests/phase29ab_pattern6_firstfail_min.hakotag: [joinir/phase29ab/pattern6/contract]
  • Pattern6 reverse scan contract violation: apps/tests/phase29ab_pattern6_reverse_firstfail_min.hakotag: [joinir/phase29ab/pattern6/contract]
  • Pattern6 matchscan contract violation: apps/tests/phase29ab_pattern6_matchscan_firstfail_min.hakotag: [joinir/phase29ab/pattern6/contract]
  • Pattern7 split-scan contract violation: apps/tests/phase29ab_pattern7_firstfail_min.hakotag: [joinir/phase29ab/pattern7/contract]
  1. Pattern6 reverse scan
    • Plan/Normalizer: add reverse support (i >= 0, step i = i - 1).
    • Smoke: phase29ab_pattern6_reverse_ok_min now OK PASS (RC=1).
  2. Pattern6 matchscan missing step
    • Freeze reason: [joinir/phase29ab/pattern6/contract] scan-with-init contract: missing step update
    • Resolution: add explicit i = i + 1 step in fixture (contract-aligned).
  3. Pattern7 split-scan near-miss
    • Resolve then/else update mismatches without relaxing contracts.
    • Freeze reason: [joinir/phase29ab/pattern7/contract] split scan contract: else i update must be \i = i + 1``
    • Resolution: keep the contract-violation fixture as FAIL-Fast, and add a contract-aligned fixup fixture for PASS.

Commands

  • ./tools/smokes/v2/run.sh --profile integration --filter "phase29ab_pattern6_*"
  • ./tools/smokes/v2/run.sh --profile integration --filter "phase29ab_pattern7_*"
  • ./tools/smokes/v2/run.sh --profile integration --filter "phase29ac_pattern7_*"