Problem
The #566 precision oracle exposed a separate locale-data gap: new Intl.NumberFormat("hi-IN-u-nu-deva", { notation: "compact", maximumSignificantDigits: 3 }).format(1234567) uses the generic million pattern in zig-js, while the locale-specific CLDR result uses the Indian lakh magnitude and Hindi compact affix. nfCompactPattern is currently a hand-selected locale subset rather than a generated table covering all engine-supported locales.
Scope
- Generate owned compact short/long magnitude patterns and affixes from the repository pinned CLDR inputs.
- Select locale-specific exponents, including 3/4-digit and Indian lakh/crore systems, with correct fallback and plural-sensitive long forms.
- Share the generated immutable data across realms and integrate it with NumberFormat text, parts, ranges, and non-Latin numbering.
No-workaround rules
No locale switch expansion by hand, English suffix fallback presented as locale support, system ICU/JSC dependency, copied output fixtures, or unbounded mutable cache. Edit the generator and regenerate tables; never hand-edit generated data.
Acceptance
- Focused CLDR-derived short/long controls cover every supported compact-pattern family and fallback path.
- Exact text/part/range oracles cover Hindi lakh/crore, East Asian 10^4 patterns, German long/short, plural forms, threshold carry, and non-Latin digits.
- Relevant Intl402 cases gain with no regressions.
- Construction/steady allocation and exact-parent performance remain neutral or improve.
- Generator determinism, OOM, bounded heap, moving GC, no-GIL, TSan, and full units pass.