Skip to content

spec: the root entry stops carrying the migration and conversion registries (about 1 MB of prose), so a console first screen no longer downloads os migrate text (the upstream payback of objectui#11088 D1) #20646

Description

@objectstack-fleet

Filed by the director seat (objectstack#12708, session_01AsCNgFBs8HCjwhyHQsFbx3) as the upstream payback card the maintainer's ruling on objectui#11088 (decision 1, letter A — raise the console first-screen ceiling now, pay it back at the source) names. ⛔ Not a claim.

What was measured (director seat, read-only, 2026-09-29)

  • objectui's 17.5.0 bump (PR objectui#11086) puts the console's eager closure at 3563.2 KB gzip against a 3149.4 KB budget: +413.8 KB, almost all of it @objectstack/spec's dist/index.js, which grew from 2,583,323 to 3,753,923 bytes (+45 %) between 17.4.0 and 17.5.0 (the objectui seat's reading of the two tarballs).
  • Where it comes from, compared at the tag @objectstack/spec@17.4.0 against main:
    • packages/spec/src/migrations/registry.ts: 1,100,789 → 1,936,632 bytes (+836 KB);
    • packages/spec/src/conversions/registry.ts: 391,787 → 559,713 bytes (+168 KB);
    • packages/spec/src as a whole: 16.5 MB → 22.3 MB.
      Those two files are almost entirely string literals — the retirement rationale fragments and the os migrate meta guidance texts landed this month — and pass into dist nearly 1 : 1, so they account for roughly 1.0 MB of the 1.17 MB dist/index.js growth.
  • Both are re-exported from the spec root entry: packages/spec/src/index.ts:224 export * from './conversions/index.js' and :227 export * from './migrations/index.js'. The package's exports map has no ./migrations subpath (it has ./data, ./ui, ./automation, … ./shared).

A console first screen validates and renders metadata; it never runs a migration. It pays for that text today because the root entry carries it.

What this card asks

The registries leave the root entry and become their own subpath (for example @objectstack/spec/migrations, carrying conversions too, or two subpaths); the consumers that need them import the subpath: os migrate and the CLI's migration guidance, metadata-core's forward conversion, check:migration-registry and the other repo gates, and whatever else git grep finds importing ALL_CONVERSIONS / RETIRED_KEYS_BY_MAJOR / the semantic ledger from the root. Whether the root keeps a lazy re-export or drops the names is the seat's to decide with Clause-② in view: dropping names from the root entry is a narrowing for any consumer importing them from @objectstack/spec and needs the BREAKING banner and a migration note; a subpath added beside an unchanged root is a widening. Either way, measure first — the acceptance is a number, not a shape.

Acceptance

  • @objectstack/spec dist/index.js (and the ESM root chunk a bundler pulls) shrinks by about the registries' size; the pin reads the built root entry's byte count against a ceiling, or the eager-closure budget in objectui once the pin moves.
  • objectui's eager closure drops back under the ceiling objectui#11088 D1 raised, so the raise is paid back; the objectui-side card (console lazy-loads the metadata-admin-only spec validation) carries the rest.
  • No runtime behaviour changes: os migrate meta, the metadata-core forward conversion and every repo gate read the same tables from the subpath.

Related: objectui#11088 (the ruling), objectui#11073 / PR objectui#11086 (the bump), objectui#5531 (the precedent raise), #20613 (unrelated, same day).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specenhancementNew feature or requestpm:dispatchedpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions