Skip to content

fix(build): fail the build when tsc leaves an incomplete dist - #7001

Merged
zhuangjianguo merged 3 commits into
mainfrom
claude/issue-6703-types-dist-completeness
Aug 31, 2026
Merged

fix(build): fail the build when tsc leaves an incomplete dist#7001
zhuangjianguo merged 3 commits into
mainfrom
claude/issue-6703-types-dist-completeness

Conversation

@claude

@claude claude Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Fixes #6703

A tsc package's dist/ must now hold every file tsc says it emits, and the build fails when it does not.

The reproduction, established failing first

The card's binding instruction was to establish a reproduction that fails before trusting one that passes. That reproduction is deterministic, not concurrency-dependent — measured on 4357ec7, packages/types:

$ rm -rf packages/types/dist && ls packages/types/tsconfig.tsbuildinfo
packages/types/tsconfig.tsbuildinfo
$ cd packages/types && ../../node_modules/.bin/tsc ; echo $?
0
$ ls dist
ls: cannot access 'dist': No such file or directory

Zero of 40 top-level .d.ts, exit 0, 3s instead of 7s. Truncating to 4 of 40 instead of 0 and rebuilding reproduces the reported shape exactly: still 4 of 40, still exit 0. packages/permissions then reports 13 TypeScript errors, and the ones that cost the most name nothing at all about @object-ui/types:

src/MePermissionsProvider.tsx(215,62): error TS2339: Property 'retryAfterMs' does not exist on type 'Error'.
src/PermissionProvider.tsx(114,63): error TS7006: Parameter 'fp' implicitly has an 'any' type.

The mechanism — measured, not assumed

All twelve "build": "tsc" packages set composite: true, which implies incremental. Each therefore records what it emitted in a tsconfig.tsbuildinfo that TypeScript resolves next to tsconfig.json, outside the outDir it describes. When those two disagree tsc believes the record and never stats its own outputs.

Note what the dispatch flagged as unproven: an in-place emit is not the mechanism, and it does not explain the exit code. The buildinfo does, and it explains both halves.

rm -rf dist is not a hypothetical door into that state — it is literally the clean script of six of these packages, so pnpm clean && pnpm build was a two-command recipe for an empty dist/ and a green exit code.

Why it reached other people's checkouts — the concurrency the card describes

turbo.json caches build. A tsc that short-circuits still exits 0, so turbo records that run as a successful build and stores whatever dist/ happened to be there. The cache entry this produced for @object-ui/types:build held exactly two paths:

packages/types/tsconfig.tsbuildinfo
packages/types/.turbo/turbo-build.log

No dist/ at all — and it replays as cache hit … FULL TURBO, exit 0. The entry is a fixed point: restoring it puts the buildinfo back without a dist/, which is precisely the desync that makes the next tsc short-circuit again. .github/workflows/lint.yml already carries an independent sighting of the replay half; this names where such an entry comes from.

Turbo also reports using shared worktree cache — that store is keyed off the common .git directory, so one poisoned entry is visible to every worktree of the repository at once. That is the concurrency dependence: not two writers racing inside one dist/, but one short-circuited build recording a green, empty artifact that every other checkout then replays. It also explains why isolating the builds sequentially looked like a fix — a cache-busting change is what actually cleared it.

The remedy, and why it sits inside build

Because turbo only caches a task that exited 0, checking inside the build script is what matters: it stops the poisoned entry from ever being recorded, rather than detecting it afterwards.

Reverse-verified on the committed implementation — the original 4-of-40 state, rebuilt:

@object-ui/types:build:     packages/types/dist/data.d.ts
@object-ui/types:build:     … and 26 more
@object-ui/types:build:   packages/types/tsconfig.tsbuildinfo still records those files as emitted, so tsc will NOT
@object-ui/types:build:   re-emit them and will keep exiting 0. Repair:
@object-ui/types:build:       rm -f packages/types/tsconfig.tsbuildinfo
Failed:    @object-ui/types#build

turbo exit 1, and the only cached manifest for that task still holds the healthy 120-entry / 118-dist-file version. No poisoned entry was recorded. Before this change the same tree state exited 0.

Is "40" stable enough to assert against?

No — and it is also not the real number. 40 is the count of packages/types/src/*.ts at depth one; a complete build is 118 files (59 inputs, .js + .d.ts each). Nothing is hardcoded. The expected set is derived from TypeScript's own API — parseJsonConfigFileContent for the input set the package's own tsconfig selects, then getOutputFileNames per input. That is the same computation tsc --build uses to decide whether a project is up to date, so the gate cannot disagree with the compiler about what "complete" means, and it follows declaration, declarationMap, sourceMap and outDir per package without being told about any of them.

Verified against a full build of all twelve packages: 1,586 expected outputs derived, 0 missing. No false positives on a tree that is actually built.

Does this share a root cause with check:self-import?

No — same consequence class, different defect. check:self-import closes an ordering defect: type-check depends on ^build, never the package's own, so a self-import resolves to a dist/ whose production nothing sequenced. Here the dist/ is ordered and the build does run; the defect is a state desync between an artifact and the record that stands in for it. Both end in the same place — a green reading taken against a dist/ that is not what the reader assumes — which is why the remedies are siblings rather than one gate.

Scope note — this touches twelve packages, not one

The card names @object-ui/types; the hazard is provably identical in all twelve packages whose build is tsc (all composite, all with the buildinfo outside outDir), and the fix is one mechanical clause per script. Fixing only types would leave eleven open with the same measurement already in hand. packages/fields and apps/console open their build with tsc too, but as --noEmit type checks that emit through vite — the gate classifies them no-emit and does nothing, and reports that apart from "not built" so a package that stops emitting cannot hide as one that merely was not built yet.

Six clean scripts now take the buildinfo with the dist/ they describe. Without that, clean && build would go red on a documented workflow instead of working; with it, that sequence rebuilds correctly (measured: 0 to 40/40, exit 0).

What is deliberately not here, per the scope fence: no staging directory, no atomic swap, no change to turbo's task graph. The one architectural option worth a ruling is relocating tsBuildInfoFile into outDir, which would make the desync structurally impossible for any route that removes dist/ wholesale rather than merely detectable. That is a build-config change to twelve packages on a card with no triage ruling, so it is reported rather than built.

Verification

Union run at cd90cd1a:

  • pnpm exec vitest run scripts/__tests__/90 files, 2546 tests, all passing, with packages/app-shell/dist moved aside (see below).
  • Gate chain, exit 0: check-dist-completeness --all (12 complete, 1586 files verified), check-entry-guard + its --self-test, check-control-bytes, check-changeset-no-major, check-changeset-fixed, check-lint-coverage, check-type-check-coverage, check-package-self-import, check-phantom-dependencies.
  • pnpm exec eslint on both new files, exit 0. pnpm type-check:scripts, exit 0 — and --listFiles confirms both new files are inside that program rather than excluded from it.
  • check-changeset-presence: nothing owed; an empty-frontmatter changeset is included anyway as an explicit "no release" declaration, since twelve published manifests change.

Two failures seen during verification are pre-existing and already filed, and neither is touched by this diff:

  • scripts/__tests__/check-sdui-registration-pins.test.ts fails on any tree where packages/app-shell/dist exists — objectui#6893. Proven by ablation rather than asserted: with the directory moved aside the file passes 11/11 and the whole tree is 90/90; moved back, that one case fails again (892 files moved and restored, confirmed by observing state).
  • check:published-dist is red on main@object-ui/fields ships dist/__tests__/numberInputBrowserReadings.d.ts, whose source landed 2026-08-30 in fix(fields): announce bad input across the type="number" widget class #6801, a day before this branch. objectui#6943 and objectui#6861. This diff touches zero files under packages/fields.

Generated in session https://claude.ai/code/session_01GgDDqh6YnkXqsnVTCa7wHk


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 45 chunks) 3180.2 KB 3222.7 KB
Main entry chunk (gzip) 143.6 KB 350 KB
Entry file index-C9ZECNEe.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 12.46KB 4.71KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 512.08KB 116.42KB
core (index.js) 5.30KB 2.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 177.67KB 49.45KB
fields (index.js) 243.65KB 61.63KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.44KB 1.39KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 33.40KB 8.71KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.95KB 10.97KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.55KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useResponsiveConfig.js) 1.37KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 46.92KB 12.93KB
plugin-charts (index.js) 64.68KB 18.35KB
plugin-chatbot (index.js) 190.53KB 45.18KB
plugin-dashboard (index.js) 133.48KB 34.51KB
plugin-designer (index.js) 212.87KB 43.19KB
plugin-detail (index.js) 247.26KB 63.17KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 133.11KB 32.61KB
plugin-gantt (index.js) 165.21KB 40.37KB
plugin-grid (index.js) 202.08KB 54.61KB
plugin-kanban (index.js) 53.14KB 14.64KB
plugin-list (index.js) 113.15KB 27.59KB
plugin-map (index.js) 20.20KB 6.66KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 43.51KB 11.94KB
plugin-timeline (index.js) 29.05KB 8.37KB
plugin-tree (index.js) 8.98KB 3.08KB
plugin-view (index.js) 85.79KB 21.10KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 3.11KB 1.48KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 10.35KB 3.60KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.72KB 2.24KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

The exports-map pin asserted `scripts.build === 'tsc'` to mean 'no bundler
that could emit a second format'. Appending a non-emitting post-build
assertion turned it red while the CJS question was untouched.

The emit step must still be bare `tsc`; every later step is enumerated in
the test, so a bundler still cannot arrive without editing it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GgDDqh6YnkXqsnVTCa7wHk
@claude

claude Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

Patch round — 25af4a84. The Verification section in the body above was written at cd90cd1a and predates this.

Test (shard 4/4) was red on cd90cd1a, and it was this PR's own failure. packages/types/src/__tests__/package-exports-manifest.test.ts pins the build script to prove no bundler could emit a second (CJS) format, and it spelled that as expect(pkg.scripts?.build).toBe('tsc'). Appending a post-build assertion that emits nothing at all still turned it red — the spelling was stricter than its own stated meaning.

It now reads the build as a chain: the emitting step must be bare tsc, and every later step is enumerated in the test, so a bundler still cannot arrive without editing that expectation. Not deleted, skipped, or loosened — both spellings fail on any change to the script; this one fails for the right reason. Ablation confirms the teeth: appending tsup --format cjs goes red, and replacing the emit step with tsup --format cjs,esm goes red.

Importing buildsWithTsc() from scripts/check-dist-completeness.mjs was checked and is not available here — this package's test program sets allowJs: false and includes only src/**/*.test.ts, so a probe import fails with TS7016. The predicate is restated with the duplication marked structural, the way scripts/invoked-as.mjs documents its own.

A sweep across the repo for every test that pins a build or clean script found this as the only real break; the other readers are tolerant by construction. examples/schema-catalog looks like a thirteenth instance of the hazard but is not one — it sets neither composite nor incremental, so no buildinfo exists for its dist/ to desync from.

Test surface this time was the changed files rather than the declared file surface: all twelve touched packages plus scripts/__tests__1,033 files, 13,674 tests, all passing at 25af4a84, app-shell run in four shards. Full detail on issue #6703.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 45 chunks) 3180.2 KB 3222.7 KB
Main entry chunk (gzip) 143.6 KB 350 KB
Entry file index-C9ZECNEe.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 12.46KB 4.71KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 512.08KB 116.42KB
core (index.js) 5.30KB 2.13KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 177.67KB 49.45KB
fields (index.js) 243.65KB 61.63KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.44KB 1.39KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 33.40KB 8.71KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.95KB 10.97KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.55KB 0.62KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useResponsiveConfig.js) 1.37KB 0.63KB
mobile (useSpecGesture.js) 4.32KB 1.64KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 46.92KB 12.93KB
plugin-charts (index.js) 64.68KB 18.35KB
plugin-chatbot (index.js) 190.53KB 45.18KB
plugin-dashboard (index.js) 133.48KB 34.51KB
plugin-designer (index.js) 212.87KB 43.19KB
plugin-detail (index.js) 247.26KB 63.17KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 133.11KB 32.61KB
plugin-gantt (index.js) 165.21KB 40.37KB
plugin-grid (index.js) 202.08KB 54.61KB
plugin-kanban (index.js) 53.14KB 14.64KB
plugin-list (index.js) 113.15KB 27.59KB
plugin-map (index.js) 20.20KB 6.66KB
plugin-markdown (index.js) 13.72KB 4.69KB
plugin-report (index.js) 43.51KB 11.94KB
plugin-timeline (index.js) 29.05KB 8.37KB
plugin-tree (index.js) 8.98KB 3.08KB
plugin-view (index.js) 85.79KB 21.10KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 3.11KB 1.48KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 10.35KB 3.60KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 0.99KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.72KB 2.24KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 2.59KB 1.31KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 3.40KB 1.71KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review August 31, 2026 09:25
@zhuangjianguo
zhuangjianguo added this pull request to the merge queue Aug 31, 2026
Merged via the queue into main with commit 501041f Aug 31, 2026
32 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-6703-types-dist-completeness branch August 31, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

1 participant