Skip to content

finding: nothing measures the docs-site eager closure that #4600's budget is about — check:eager-closure weighs apps/console only #6316

Description

@os-support-ai

Filed unassigned while implementing #6167 / #6025 (PR #6314). Not claiming. Observation about gate coverage, not a live defect.

What was measured

Both #6167 and #6025 add a side-effect import to apps/site/app/components/registerCatalogBlocks.ts, and both cards say the cost of that is governed by check:eager-closure. Measured on 7ccb53a92, it is not:

  • scripts/check-eager-closure-budget.mjs:292const DEFAULT_REPORT_PATH = 'apps/console/dist/eager-closure.json'. The report is written by emitEagerClosureReport in apps/console/vite.config.ts, from rolldown's own chunk.imports for the console.
  • .github/workflows/performance-budget.yml triggers on packages/**, apps/console/** and pnpm-lock.yaml, and its steps build ./packages/* and then @object-ui/console.

So the gate governs the console bundle. apps/site — the Next docs site, whose /docs/[[...slug]] route is the thing #4600's separation and #4616's +1803.9 kB (+23.3%) measurement are about — is weighed by nothing. A change that adds a package to registerCatalogBlocks.ts reads GREEN on check:eager-closure in both worlds, because the gate cannot see the file.

Why it matters, and why it did not bite here

The header of registerCatalogBlocks.ts carries a hand-reconstructed measurement of the docs route (before 7738.7 kB across 29 chunks / after 9542.6 kB across 40 chunks), taken by reading the script src set of the prerendered route off the build on disk, because "Next 16.3 + Turbopack prints no Size / First Load JS columns". That is the only measurement of this budget that has ever existed, it was taken once by hand, and #4616's stop condition (+50%) has no instrument behind it today.

PR #6314 did not need one: both packages it declares (@object-ui/plugin-form, @object-ui/plugin-grid) were already in that route's eager closure through @object-ui/plugin-view's module-scope import { ObjectGrid } / import { ObjectForm }, so the imports add a declaration and no payload. The next card that adds a package the route does not already pull will have no gate and no cheap way to measure.

Possible shapes, not chosen here

  1. Teach check-eager-closure-budget.mjs a second site: emit an equivalent report for the docs route from the Next build, and give it its own ceiling. Cost: a docs-site build in CI (556 static pages).
  2. A cheaper structural gate instead of a byte budget: assert that every package named in registerCatalogBlocks.ts is already reachable from the route's existing graph, so a genuinely new graph has to be argued for in review rather than measured.
  3. Record in the two cards' own text that the budget is unmeasured, and leave it.

Severity left to triage. Nothing is broken; a stop condition simply has no gauge.

Metadata

Metadata

Assignees

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:dispatched

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions