Problem
Intl.NumberFormat already resolves an immutable native IntlNumberFormatData record at public construction, but the generic Intl constructor still publishes redundant forgeable \0intl and \0locale ordinary properties. Brand checks trust \0intl, and numberFormatDataFor can lazily manufacture native state from attacker-controlled \0locale / \0opts properties.
That means a plain object can counterfeit the NumberFormat brand and move observable option processing out of InitializeNumberFormat. It also duplicates locale storage, named-property/attribute work, GC cells, shape transitions, and property synchronization even though every production formatter already owns complete native state.
Parent work: #475, #460. Related native-state migrations: #528, #589, #590. Worst-case/bounded-latency context: #493.
Scope
- Freeze a NumberFormat
resolvedOptions/brand boundary, reusing the existing construction and steady consumer rows for cross-checks. - Make native
IntlNumberFormatDatathe only NumberFormat brand and resolved-state source. - Remove public
\0intl/\0localepublication and delete lazy state synthesis from hidden properties. - Eagerly construct native records for internal Number/DurationFormat helper formatters instead of building pseudo-formatters with hidden properties.
- Preserve normative legacy
ChainNumberFormat: the fallback symbol may wrap a genuinely native-branded inner formatter, but forged hidden properties never brand a receiver. - Preserve constructor option/coercion order and failure atomicity.
Acceptance
- Plain objects with forged
\0intl,\0locale, and\0optsproperties are rejected by NumberFormat prototype accessors/methods andresolvedOptionswithout observing the forged options bag. - Public and internal NumberFormat consumers never lazily normalize state after construction.
- Real instances publish no NUL-prefixed ordinary own properties; legacy ChainNumberFormat behavior remains conformant.
- OOM, bounded-heap, moving-GC, shared/no-GIL, and TSan tests remain clean.
- NumberFormat and full Intl402 conformance have no regressions; full sharded units pass.
- Exact-parent allocation, GC-cell, lock, and timing evidence is reported without overstating noisy throughput.