Problem
DtfOutput appends formatToParts metadata, translated digits, and copies of stack-formatted numeric fields directly to the Context arena. Callers copy those bytes into managed JavaScript strings, but the intermediate structural graph remains retained for the Context lifetime. NumberFormat now has explicit invocation-local ownership in #640; DateTimeFormat still uses the old implicit lifetime.
This is a bounded-memory and allocator-failure issue, not a semantic shortcut. Part values must remain alive through range comparison, source classification, and managed result construction, then be reclaimed on every success/error path.
Required implementation
- Give DateTimeFormat structural output one explicit invocation-local owner.
- Route part arrays, translated digits, and copied stack fields through that owner.
- Keep text output ownership unchanged unless separately measured.
- Preserve range shared-prefix/suffix classification, calendar/time-zone output, Temporal conversion ordering, numbering systems, and OOM propagation.
- Do not raise heap limits, retain a global formatter cache, or weaken the bounded structural-result witness.
Acceptance
- Allocation-failure coverage exercises Latin and translated numeric parts and copied stack fields with exact teardown.
- DateTimeFormat unit/range/Temporal and bounded-heap structural-result tests pass normally and under TSan.
test/intl402/DateTimeFormatand relevant Temporal formatting subtrees have nonzero exact before→after accounting with zero regressions.- Full exact unit shard remains leak-free.