Filed by the domain:ui execution seat (session session_01EMrWaQw3XS5DxTHxp4yRyC) as the follow-up the maintainer deferred to its own card when ruling #7399.
⛔ Unlabelled beyond finding — routing, type and priority are the triage seat's. ⛔ Not dispatched, and this card asks for a decision, not an implementation.
Provenance
Maintainer ruling on #7399, 2026-09-03, verbatim 「同意你的建议」, recorded in comment 5523282655. That recommendation was A′ now, C as its own card. A′ (fix the chunk attribution) is in flight. This is C.
The measurement
packages/i18n's entry statically re-exports all ten locale packs, so every one of them is in the console's eager closure — what the browser fetches and parses before the app renders.
| reading | value |
|---|
| locale bundles in the eager closure | 10 |
| a given viewer reads | 1 |
their share of the framework chunk's module bytes | 78.7% |
| that payload, measured by moving it to its own group | 476,480 B gzipped |
| aggregate eager closure today | 3,179 KB gz against a 3,191.4 KB ceiling |
Measured during #7399's investigation: builds of main untouched at three bases, one identical command sequence, gate exit 0 each time, plus two probe builds that isolated the grouping. Full method in #7399 comment 5522762441.
⭐ This is the only option in that family that reduces what a page load actually costs. A′ re-attributes the bytes so the gate stops misnaming them; B would have raised a ceiling. Neither removes a byte from the wire. Nine of ten catalogues are fetched, parsed, and never read.
Why it is a decision and not a task
It is a change to a published package's loading behaviour (@object-ui/i18n), not a build-config edit:
- the entry's static re-export is what makes every pack reachable — making it lazy changes the package's public loading contract;
- consumers that today get every catalogue synchronously would need a resolved locale before first paint, or a fallback path;
- SSR / prerender behaviour and the
LocalizationContext bootstrap both sit on that assumption.
⇒ Someone has to rule what the loading contract becomes, and that is not an execution seat's call.
What this card is NOT
⚠️ One piece of context worth carrying
Until A′ lands, this payload is being policed by a ceiling named framework, which taught a false rule — "don't touch core|react|types" — while the thing actually consuming the budget was translations. That misdirection cost this lane most of a shift and produced three public retractions from this seat. Whatever is decided here, the lesson that generalises is: a budget should be named for what it holds.
Refs: #7399 (the attribution card and this card's ruling) · #5468 · #5490 · #6631 · #5324 / #6795 (named payload-shrink candidates) · #7467 / #7391 / #7194 (the three PRs blocked by the ceiling this payload fills)
Filed by the
domain:uiexecution seat (sessionsession_01EMrWaQw3XS5DxTHxp4yRyC) as the follow-up the maintainer deferred to its own card when ruling #7399.⛔ Unlabelled beyond
finding— routing,typeand priority are the triage seat's. ⛔ Not dispatched, and this card asks for a decision, not an implementation.Provenance
Maintainer ruling on #7399, 2026-09-03, verbatim 「同意你的建议」, recorded in comment 5523282655. That recommendation was A′ now, C as its own card. A′ (fix the chunk attribution) is in flight. This is C.
The measurement
packages/i18n's entry statically re-exports all ten locale packs, so every one of them is in the console's eager closure — what the browser fetches and parses before the app renders.frameworkchunk's module bytesMeasured during #7399's investigation: builds of
mainuntouched at three bases, one identical command sequence, gate exit 0 each time, plus two probe builds that isolated the grouping. Full method in #7399 comment 5522762441.⭐ This is the only option in that family that reduces what a page load actually costs. A′ re-attributes the bytes so the gate stops misnaming them; B would have raised a ceiling. Neither removes a byte from the wire. Nine of ten catalogues are fetched, parsed, and never read.
Why it is a decision and not a task
It is a change to a published package's loading behaviour (
@object-ui/i18n), not a build-config edit:LocalizationContextbootstrap both sit on that assumption.⇒ Someone has to rule what the loading contract becomes, and that is not an execution seat's call.
What this card is NOT
frameworkper-chunk eager-closure ceiling leaves 177 bytes for the whole repo — two ruled user-facing fixes cannot land, and no wording of either fits #7399's A′ was the wrong first move. A′ is a pure re-attribution that unblocks three PRs carrying ruled user-facing copy; it was correctly ordered first.#5324/#6795already name payload-shrink candidates and may overlap; triage should check before this is dispatched.Until A′ lands, this payload is being policed by a ceiling named
framework, which taught a false rule — "don't touchcore|react|types" — while the thing actually consuming the budget was translations. That misdirection cost this lane most of a shift and produced three public retractions from this seat. Whatever is decided here, the lesson that generalises is: a budget should be named for what it holds.Refs: #7399 (the attribution card and this card's ruling) · #5468 · #5490 · #6631 · #5324 / #6795 (named payload-shrink candidates) · #7467 / #7391 / #7194 (the three PRs blocked by the ceiling this payload fills)