Files
hakorune/docs/archive/roadmap/phases/phase-12.7/ancp-specs/ANCP-Reversible-Mapping-v1.md
nyash-codex 811dfebf98 fix(joinir): Phase 241-EX - Remove hardcoded 'sum' check from Pattern3
Remove legacy hardcoded 'sum' carrier validation that was blocking
array_filter patterns with different accumulator names (e.g., 'out').

Before: Pattern3 required carrier named 'sum' to exist
After: Pattern3 uses carrier_info generically (any carrier name works)

Test results:
- phase49_joinir_array_filter_smoke: PASS 
- phase49_joinir_array_filter_fallback: PASS 
- phase49_joinir_array_filter_ab_comparison: PASS 
- Full suite: 909/909 PASS, 0 FAIL

Also: Archive old roadmap documentation (67k lines moved to docs/archive/)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:48:42 +09:00

2.2 KiB
Raw Blame History

ANCP v1 Reversible Mapping (P0 subset)

Status: Preview (12.7C P0). Scope is the sugar subset already implemented and gated in 12.7B.

Goals

  • Provide a clear, reversible mapping between Nyash sugar and canonical forms.
  • Make roundtrip (original → canonical → ANCP → canonical → original) predictable for the subset.

Gating

  • Runtime sugar is gated by NYASH_SYNTAX_SUGAR_LEVEL=basic|full.
  • ANCP tools/nyfmt remain PoC/docs only at this stage.

Subset Mappings

  • Pipeline |>

    • Nyash: lhs |> f(a,b) → Canonical: f(lhs, a, b)
    • Nyash: lhs |> obj.m(a) → Canonical: obj.m(lhs, a)
    • Roundtrip invariant: No change of call order or arity.
  • Safe Access ?.

    • Nyash: a?.b → Canonical (peek): peek a { null => null, else => a.b }
    • Nyash: a?.m(x) → Canonical: peek a { null => null, else => a.m(x) }
    • Roundtrip invariant: No change of receivers/args; only the null guard appears.
  • Default ??

    • Nyash: a ?? b → Canonical (peek): peek a { null => b, else => a }
    • Roundtrip invariant: Both branches preserved asis.
  • Range ..

    • Nyash: a .. b → Canonical: Range(a, b)
    • Roundtrip invariant: Closed form preserved; no inclusive/exclusive change.
  • Compound Assign +=, -=, *=, /=

    • Nyash: x += y → Canonical: x = x + yx は変数/フィールド)
    • Roundtrip invariant: Operator identity preserved; left target identical.

Examples (Before / Canonical / RoundTrip)

  1. Pipeline + Default
Before:     data |> normalize() |> transform() ?? fallback
Canonical:  peek transform(normalize(data)) { null => fallback, else => transform(normalize(data)) }
RoundTrip:  data |> normalize() |> transform() ?? fallback
  1. Safe Access Chain
Before:     user?.profile?.name
Canonical:  peek user { null => null, else => peek user.profile { null => null, else => user.profile.name } }
RoundTrip:  user?.profile?.name
  1. Range + Compound Assign
Before:     i += 1; r = 1 .. 5
Canonical:  i = i + 1; r = Range(1, 5)
RoundTrip:  i += 1; r = 1 .. 5

Notes

  • Precise precedence handling is left to the parser; mappings assume already parsed trees.
  • Full ANCP compact tokens will be documented in a separate spec revision.