Tracking issue for the dialect-parity freeze. Governance: ADR-0035 — Accepted (architect ratified 2026-06-30, merged in #555).
lark-rs lexes terminals with the Rust regex engine; Python Lark uses CPython re. Where the dialects assign different meaning to the same terminal syntax, we have a stream of needs-decision "support vs. categorized-refusal" forks. We are parking the whole cluster rather than resolving the forks one at a time, because:
- No user signal — lark-rs has no users yet (ADR-0025); none of these divergences has a reported grammar that needs it.
- Already inert — the divergences are committed XFAILs: known, pinned, non-regressing. Parking is the XFAIL bank's intended use, not a new mechanism.
- Piecemeal fixes pre-commit an architecture — each ad-hoc "normalise construct X toward Python" is an implicit vote for maximise-compat over regex-crate semantics / selectable modes. We don't want to decide that by accident.
The shipped posture is unchanged: the \</\> normalization and every committed XFAIL stay as-is. This freezes new parity work and defers the dialect-mode decision. It reverses nothing.
Frozen set (carry the frozen label; out of the /next-task, /xfail-burndown, bug-hackathon queues)
Explicitly NOT frozen
Routing rule while frozen
New dialect divergences found by the differential fuzzer / bug-hackathon are catalogued as XFAIL and parked here, not triaged into fix-work.
Un-park trigger (ADR-0035)
The freeze ends when either:
- a real user grammar is broken by a dialect divergence (a concrete consumer demand — the ADR-0026 bar), or
- the architect decides the dialect-mode architecture (maximise-compat vs. regex-crate semantics vs. selectable modes) independent of a specific report.
At that point, supersede ADR-0035 with the chosen policy and burn the cluster down under it. If modes are adopted, the mode API is escalate-tier (ADR-0025 / §6).
Tracking issue for the dialect-parity freeze. Governance: ADR-0035 — Accepted (architect ratified 2026-06-30, merged in #555).
lark-rs lexes terminals with the Rust
regexengine; Python Lark uses CPythonre. Where the dialects assign different meaning to the same terminal syntax, we have a stream ofneeds-decision"support vs. categorized-refusal" forks. We are parking the whole cluster rather than resolving the forks one at a time, because:The shipped posture is unchanged: the
\</\>normalization and every committed XFAIL stay as-is. This freezes new parity work and defers the dialect-mode decision. It reverses nothing.Frozen set (carry the
frozenlabel; out of the/next-task,/xfail-burndown, bug-hackathon queues)\b/\B/\Z(?i)global-prefix flag normalization inraw_value_len\w/\WUnicode word-class membership/i(?(id)yes|no)\N{NAME}named-character escape support (H5-5 follow-up to #364) #461 —\N{NAME}named-character escaperaw_value_len). Added to the frozen set 2026-06-30 (architect confirm): samePattern::raw_value_len()normalized-vs-verbatim root cause as the already-frozen raw_value_len doesn't strip the global-prefix (?i)body flag form (only scoped (?i:body)) #288, fires only inside the equal-priority + equal-max_widthtie window (the incidental source-length sort lark-rs declares a non-goal — "a discipline for our grammars, not a gap to chase", 0/140 compliance divergences), and has no constructible repro / no user signal. Freezing keeps the wholeraw_value_len-parity question parked as one unit with raw_value_len doesn't strip the global-prefix (?i)body flag form (only scoped (?i:body)) #288.Explicitly NOT frozen
\bleak) or a mis-categorized refusal (e.g. [medium] Python-re anchor dialect: \b/\B and \Z (RC6, N10) — support vs categorized refusal #275's\Z) into a clean categorizedGrammarError, with no accept/reject change, staysgood-autonomous. The freeze is on matching Python's result, not on error quality.2^Ndeterminization pathology (a resource bug, not dialect). Keeps its priority.Tokeneq/hash (a binding bug, not dialect). Keeps its priority.lookaround/lower.rs/terminal.rsdedup may proceed on its standalone structural merit, with no behaviour change and no dialect-mode machinery.Routing rule while frozen
New dialect divergences found by the differential fuzzer / bug-hackathon are catalogued as XFAIL and parked here, not triaged into fix-work.
Un-park trigger (ADR-0035)
The freeze ends when either:
At that point, supersede ADR-0035 with the chosen policy and burn the cluster down under it. If modes are adopted, the mode API is
escalate-tier (ADR-0025 / §6).