Skip to content

Commit fa9e76c

Browse files
os-salesclaude
andauthored
ci(budget): raise the framework per-chunk ceiling to 100,000 by maintainer ruling (#8550)
`PER_CHUNK_GZIP_CEILINGS.framework` moves 71,000 -> 100,000 and `PER_CHUNK_BASELINE.framework` moves 61,465 -> 72,245 in the same commit, the latter re-derived from a real `apps/console` build on `3f775eeb8` rather than copied from a card. The number is the maintainer's, taken after the trade-off was put to them. What the bytes buy is nothing identifiable: `Bundle Analysis` went red on `main` at `f76f43628` with `40a7c538a` the last green, and that window has never been bisected. This raise does not answer that question, it makes it harder to ask. Headroom is 27,755 bytes = 0.30x REGRESSION_THIS_GATE_MUST_CATCH_BYTES, which makes `framework` the loosest per-chunk ceiling in the file (0.21x, 0.06x, 0.03x for the other three, all read from the same build). The sensitivity constant is untouched at 89 * 1024, and so are the other three ceilings, the aggregate and BASELINE. The per-KEY provenance block splits `framework` out of the bullet it shared with `i18n-locales`, since the two are no longer one build. The test file's prose restatement of the retiring pair is updated because this commit is what makes it false. Claude-Session: https://claude.ai/code/session_01CZY49skxUBYyJcdnTcYPrE Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5323168 commit fa9e76c

2 files changed

Lines changed: 77 additions & 18 deletions

File tree

‎scripts/__tests__/check-eager-closure-budget.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,8 @@ describe('per-chunk ceilings', () => {
415415
* catalogue and one whose test does not.
416416
*
417417
* The byte-level backstop is the re-baselined ceiling itself: `framework` is
418-
* now pinned at 71,000 over a 61,465 payload, so a regression that puts the
419-
* 446 KB catalogue back would red the gate six times over. That verdict is
418+
* now pinned at 100,000 over a 72,245 payload, so a regression that puts the
419+
* 446 KB catalogue back would red the gate four times over. That verdict is
420420
* loud but mute about the cause. This one names it.
421421
*
422422
* ⛔ Every case here fails CLOSED. The parse yielding nothing, or a probe id

‎scripts/check-eager-closure-budget.mjs‎

Lines changed: 75 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,46 @@ export const REGRESSION_THIS_GATE_MUST_CATCH_BYTES = 89 * 1024;
561561
* constraint to live is the argument for taking the catalogues out of the eager
562562
* closure rather than for raising anything.
563563
*
564+
* ## Why `framework` moved UP — the maintainer ruling of 2026-09-08
565+
*
566+
* From 71,000 over a 61,465 payload to 100,000 over 72,245, the latter measured
567+
* on `3f775eeb8`. ⛔ The number is the MAINTAINER'S, taken after the trade-off
568+
* was put to them; it is not derived here, and nothing in this section should be
569+
* read as a derivation of it. What is recorded here is what the raise COSTS,
570+
* because that is the half a later reader cannot recover from the constant.
571+
*
572+
* ⛔ What the bytes buy: NOTHING IDENTIFIABLE, and that is the finding, not an
573+
* omission. The failure message this raise silences asks the author to "say in
574+
* the PR what the bytes buy". Nobody can: `Bundle Analysis` went red on `main`
575+
* at `f76f43628` with `40a7c538a` the last green, and the commits in that window
576+
* have never been bisected — this checker is a two-build predicate over them and
577+
* no one has run it. ⚠️ So this raise does not answer the attribution question,
578+
* it makes it HARDER TO ASK: the line that was holding the unexplained bytes in
579+
* view now passes over them. objectui#8542 owns that attribution and stays open;
580+
* objectui#8541 recorded the same red first and is closed as its duplicate.
581+
*
582+
* ⚠️ This also makes `framework` the LOOSEST ceiling in this object, measured
583+
* rather than asserted. All four were read from the one `3f775eeb8` console
584+
* build, against {@link REGRESSION_THIS_GATE_MUST_CATCH_BYTES}:
585+
*
586+
* | ceiling | headroom | multiple |
587+
* | `framework` | 27,755 | 0.30x |
588+
* | `vendor-objectstack` | 18,848 | 0.21x |
589+
* | `ui-components` | 5,729 | 0.06x |
590+
* | `i18n-locales` | 2,900 | 0.03x |
591+
*
592+
* ⇒ it carries more slack than the next loosest and an order of magnitude more
593+
* than the tightest, and it abandons the 0.10x convention objectui#7399 re-pinned
594+
* this key and `i18n-locales` to. It is still inside one regression — 1.00x is
595+
* where {@link evaluateHeadroomSensitivity} calls a line blind — but "not blind"
596+
* is the floor this file refuses to fall through, not a standard it aims at.
597+
*
598+
* ⛔ {@link REGRESSION_THIS_GATE_MUST_CATCH_BYTES} did NOT move, and this is the
599+
* exact case the rule under {@link MAX_EAGER_CLOSURE_GZIP_BYTES} was written for:
600+
* a ceiling that rises while the sensitivity relaxes is a gate quietly retiring
601+
* itself. Nothing else moved either — not the other three ceilings, not the
602+
* aggregate, not {@link BASELINE}. One ceiling and its baseline, in one commit.
603+
*
564604
* ## Raising one
565605
*
566606
* Same discipline as {@link MAX_EAGER_CLOSURE_GZIP_BYTES}, and the same two
@@ -581,7 +621,12 @@ export const PER_CHUNK_GZIP_CEILINGS = Object.freeze({
581621
// proportion the retiring pair carried (18,539 = 0.20x).
582622
'vendor-objectstack': 1_254_000,
583623
'i18n-locales': 455_000,
584-
framework: 71_000,
624+
// Raised by the maintainer ruling of 2026-09-08, ⛔ not by a measurement here:
625+
// `main` had been red on this line since `f76f43628` and the bytes that put it
626+
// there are UNATTRIBUTED. Headroom 27,755 bytes = 0.30x
627+
// REGRESSION_THIS_GATE_MUST_CATCH_BYTES on `3f775eeb8` — the loosest of the
628+
// four. See "Why `framework` moved UP" above for what that costs.
629+
framework: 100_000,
585630
'ui-components': 399_000,
586631
});
587632

@@ -596,22 +641,33 @@ export const PER_CHUNK_GZIP_CEILINGS = Object.freeze({
596641
* was raised with the aggregate. Same build as {@link BASELINE}, so the
597642
* two are directly comparable; it superseded `2c8474c04` (objectui#5490).
598643
* - `ui-components` — `2c8474c04` (objectui#5490).
599-
* - `framework`, `i18n-locales` — `e307c9896` plus objectui#7399's own
600-
* re-attribution diff; see "Why `framework` moved DOWN" above. Both were
601-
* read from ONE console build, so they are directly comparable to each
602-
* other and to the 523,959 the same tree measured with the groups still
603-
* tied. This `framework` reading supersedes objectui#7173's, whose
604-
* three-build attribution the paragraph above that one still explains, and
605-
* objectui#6759's `a64e96ca8` before it.
606-
*
607-
* ⚠️ Unlike every other entry here, these two are NOT a reading of an
608-
* unmodified tree: the chunks they name do not exist without the diff that
609-
* recorded them, because that diff is what creates the second one. The
644+
* - `framework` — `3f775eeb8`, the `main` tip this raise's branch was cut
645+
* from, read out of the `apps/console/dist/eager-closure.json` written by
646+
* `pnpm turbo run build --filter='./packages/*'` followed by
647+
* `pnpm --filter @object-ui/console build`, run on that tree with NO diff of
648+
* its own applied. See "Why `framework` moved UP" above for the ruling it
649+
* was measured for and what that raise costs. It supersedes objectui#7399's
650+
* `e307c9896` reading, objectui#7173's before that, and objectui#6759's
651+
* `a64e96ca8` before that. ⚠️ Unlike the entry below it, this one IS a
652+
* reading of an unmodified tree — the change it pins lives entirely in this
653+
* file, and `scripts/check-*.mjs` is not a console build input — so the
654+
* {@link BASELINE} argument DOES cover it, and it is ⛔ NOT comparable to
655+
* the `i18n-locales` figure below, which is an older build on another commit.
656+
* - `i18n-locales` — `e307c9896` plus objectui#7399's own re-attribution
657+
* diff; see "Why `framework` moved DOWN" above. It was read from ONE console
658+
* build together with the `framework` figure objectui#7399 recorded, so it
659+
* is directly comparable to the 523,959 that same tree measured with the
660+
* groups still tied — ⚠️ and, since objectui#8541's raise, ⛔ no longer to
661+
* the `framework` entry above it.
662+
*
663+
* ⚠️ Unlike every other entry here, this one is NOT a reading of an
664+
* unmodified tree: the chunk it names does not exist without the diff that
665+
* recorded it, because that diff is what creates it. The
610666
* `scripts/vite-*.ts`-versus-`scripts/check-*.mjs` argument {@link BASELINE}
611-
* makes about its own commit does NOT cover them — `apps/console/vite.config.ts`
667+
* makes about its own commit does NOT cover it — `apps/console/vite.config.ts`
612668
* IS a build input, deliberately, and moving it is the change. What keeps
613-
* them honest instead is that the gate re-reads them on every CI build of
614-
* the branch that carries the diff.
669+
* it honest instead is that the gate re-reads it on every CI build of the
670+
* branch that carries the diff.
615671
*
616672
* Exported so the ceilings are CHECKED against it instead of merely asserted
617673
* in this comment.
@@ -682,7 +738,10 @@ export const PER_CHUNK_BASELINE = Object.freeze({
682738
// `34a1578ef`, the same build as BASELINE above (objectui#7122).
683739
'vendor-objectstack': 1_235_029,
684740
'i18n-locales': 446_076,
685-
framework: 61_465,
741+
// `3f775eeb8`, its OWN console build — ⛔ not the one above it and not
742+
// BASELINE's. Moved with the ceiling in the same commit, per the maintainer
743+
// ruling of 2026-09-08 and the rule stated under "Raising one".
744+
framework: 72_245,
686745
'ui-components': 391_095,
687746
});
688747

0 commit comments

Comments
 (0)