Skip to content

Refresh the lockfile to @objectstack/* 17.2.0 — fs stops reaching the browser bundle - #5790

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-5668-spec-1720-lockfile-refresh
Aug 23, 2026
Merged

Refresh the lockfile to @objectstack/* 17.2.0 — fs stops reaching the browser bundle#5790
os-zhuang merged 2 commits into
mainfrom
claude/issue-5668-spec-1720-lockfile-refresh

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Fixes#5668

The residual action the ruling on that card named (Decision 1, comment 5381285629: option A — wait for upstream, then "an objectui lockfile refresh"), executed now that all six @objectstack/* packages published at 17.2.0 in lockstep (2026-08-23T07:00:22–07:00:47Z) with the upstream browser-condition change (objectstack-ai/objectstack#11072) verified in the published tarball (comment 5384839941 on the card). Every ⛔ of the ruling is honored: no pin revert, no bundler shim, no docs-site rerouting.

⚠️ The Build Docs check on THIS PR is a path-filtered skip, not the evidence

This diff touches nothing under content/ or apps/site/, so ci.yml's step-level path filter reports Build Docs green in ~11 seconds having built nothing — the false-green recorded twice on the card (comments 5379267156, 5384090119). The acceptance evidence is the local before/after measurement below, taken with the same instrument as the 2026-08-22 bisect. main's own push run after the merge is the confirming CI reading — on push the job takes the early return and always builds.

The measurement — observed, not predicted

Both legs run as pnpm turbo run build --filter='@object-ui/site' --concurrency=2 from this worktree, output redirected to file before any pipe, exit captured from the verify-lock wrapper that wraps turbo itself:

leglockfileturbo's own tallyexit
before — base 72ffc3496, all six @objectstack/* at 17.1.0unrefreshedTasks: 28 successful, 29 total · Failed: @object-ui/site#build · Error: Module not found: Can't resolve 'fs' at pg-connection-string@2.14.0/index.js:881
after — refreshed lockfile, all six at 17.2.0this PRTasks: 29 successful, 29 total · Time: 4m16.247s · Cached: 0 cached — fully uncached0
re-run on HEAD 1218dcc9a (current)this PRTasks: 29 successful, 29 total · Cached: 0 cached, 29 total — fully uncached again (fresh worktree, cold cache)0

Lockstep, proven by absence

pnpm-lock.yaml resolves exactly one version of each: spec, client, core, formula, lint, sdui-parser — all 17.2.0. A grep for any remaining @objectstack/*@17.1.0 returns zero. The specifier set is untouched: 37 × ^17.0.0, no manifest changed, and the root pnpm.overrides still carries nothing under @objectstack/* — the #5529 shape ("Lockfile refresh only — every manifest already declared ^17.0.0").

Declared, not hidden: the non-frozen install floated two in-range transitive patches that are outside the @objectstack subtree — seroval 1.6.2→1.6.3 (under @tanstack/router-core) and fast-uri 3.1.5→3.1.6 (under ajv). Hand-reverting lockfile integrity hunks was the riskier move, so they ride along. CI installs --frozen-lockfile, which is why the refreshed lockfile is committed.

Green-keeping — three edits, all forced by the new build

17.2.0 ships the spec's theme-module retirement (objectstack#10485). The #5716 localization (packages/types/src/theme.ts, landed as PR #5752) predicted in its own header that on this refresh "both turn stale/red … which is how that refresh announces itself here":

  • scripts/check-spec-symbol-derivation.mjs — the Theme/ThemeMode/ColorPalette ALLOW entries stopped colliding and went stale; deleted, exactly as their own comment prescribed ("The refresh PR deletes these three entries"). Gate now green: 1297 files scanned against 4959 spec export names.
  • packages/types/src/__tests__/page-nav-misc-spec-parity.test.ts — the two spec-side theme legs (mutual assignability with the spec Theme; ThemeParsed.mode required) had nothing left upstream to pin against; retired, and replaced with vacancy pins following the file's own GestureType/GestureConfig road: Theme, ThemeMode, ColorPalette asserted absent from the spec export set, so an upstream re-publish is a loud collision. The local authoring pin (mode optional) stays executable. 45/45 pass.
  • scripts/__tests__/vite-objectstack-spec-dist.test.ts (commit 1218dcc9a, caught by Test (shard 1/4) on 9f24ecbb1 — the pin doing its anti-vacuity job on a real bump) — the exports-map count pins move 18 → 19. The moved entry is measured, not assumed: diffing the published 17.1.0 exports map (18 keys, read from the registry) against the installed 17.2.0 (19 keys) shows exactly one addition, ./meta-spelling (→ dist/meta-spelling/index.mjs under the import condition) and no removal. The alias table itself needed no change — it is derived from the exports map at runtime, and the reconciliation case proves the new entry gets a real alias agreeing with Node's own resolver (import.meta.resolve), not just a number that agrees: 25/25 in the file, 61 files / 1631 tests across scripts/__tests__/. The exact-count assertion stays exact — no toBeGreaterThan. Prose counts stating current facts moved with the pin; the two dated historical records (the rc.6 measurement, the objectui#5388 narrative) stay as written.

PM assumption 5, partially falsified — reported, not silently absorbed. TS2305 did appear in packages/types on the refresh — but only in the drift-guard test's deliberate spec-side import, which is the announcement mechanism #5716 built, not a gap in what it localized. The runtime surface (theme.ts, packages/providers) compiles clean; full repo type-check is 81/81 on the refreshed lockfile. No contract call was made here: the ownership question was already ruled on #5716 (option A — localize), and the edits execute instructions written into the files by that ruling.

Verification on HEAD 1218dcc9a

  • pnpm turbo run build --filter='@object-ui/site' — 29/29, fully uncached (table above). Earlier on 9f24ecbb1: pnpm turbo run build 44/44 uncached, pnpm turbo run type-check 81/81 with zero TS errors (the shard-1 fix touches only scripts/, re-covered by type-check:scripts exit 0).
  • Gates re-run on 1218dcc9a, each exit 0: check:spec-symbols, check:action-forward-parity, check:phantom-deps, check:esm-specifiers, check:node-esm-load, check:published-dist, check:eager-closure (verdict on 9f24ecbb1: Console eager closure is 3225.1 KB gzipped across 52 of 508 chunks (budget: 3990.2 KB, headroom: 765.1 KB) — no re-baseline needed this round, unlike Pin @objectstack/* to 17.1.0 #5529), check:doc-types, check:doc-snippets, check:control-bytes, changeset presence, changeset no-major, type-check:scripts.
  • Tests, declared narrowing: all 390 test files that textually reference @objectstack (the direct consumption radius of the moved packages), run from the repo root: 155 files / 2010 tests + 235 files / 3512 tests (1 skipped), all green — plus the full scripts/__tests__/ directory (61 files / 1631 tests) after the shard-1 fix. The full vitest farm and repo-wide lint are CI's runs; ESLint on the edited files is clean.
  • The declared-BREAKING 17.2.0 entry (http_request_errors_total retired, objectstack#9834) re-verified inert: the name and its four spelling/registry variants match zero files in this repo.

Out-of-scope notes: #5493 and #5494 (spawned by #5529) remain open and are untouched here; Test (coverage) remains red on main per #5436 and is not this PR's. None of the in-flight lanes' files (packages/plugin-timeline/src/ObjectTimeline.tsx, packages/app-shell/src/views/metadata-admin/**, packages/app-shell/src/__tests__/widget-dom-leak-sweep.test.tsx) is touched. The ./shared concern raised on the card measures away — see issue comment 5385206676.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m

Generated by Claude Code

… reaching the browser bundle
Lockfile-only refresh, the residual action the objectui#5668 ruling named
(Decision 1, option A — wait for upstream, then "an objectui lockfile
refresh"): every manifest already declared ^17.0.0, which admits 17.2.0, so
no dependency range changed. All six @objectstack packages move in lockstep
(spec, client, core, formula, lint, sdui-parser) — a split resolution is what
produced the dual-version spec graph that reddened check:spec-symbols in this
repo's history — and no 17.1.0 resolution remains in pnpm-lock.yaml. Two
incidental in-range transitive patch floats rode the non-frozen install:
seroval 1.6.2 -> 1.6.3 (under @tanstack/router-core) and fast-uri
3.1.5 -> 3.1.6 (under ajv).
The fix consumed: @objectstack/spec@17.1.0 imported pg-connection-string at
the top level of dist/index.mjs with no browser export condition, so the
apps/site production build failed with "Module not found: Can't resolve 'fs'"
— red on main since 2026-08-22. 17.2.0 ships the objectstack#11072 browser
conditions (., ./data, ./system, ./kernel, ./cloud -> dist/browser/**).
Measured locally on this branch, same instrument as the 2026-08-22 bisect:
before (17.1.0) Tasks: 28 successful, 29 total / turbo exit 1; after
(17.2.0) Tasks: 29 successful, 29 total / turbo exit 0, uncached.
Green-keeping, forced by the new build and nothing else — both halves the
objectui#5716 localization planted deliberately as the refresh's tripwire
("both turn stale/red on the pin refresh, which is how that refresh
announces itself here"):
- check-spec-symbol-derivation: delete the Theme / ThemeMode / ColorPalette
ALLOW entries, stale now that 17.2.0 ships the spec's theme-module
retirement (objectstack#10485) and the names no longer collide — exactly
the deletion their own comment prescribed ("The refresh PR deletes these
three entries").
- page-nav-misc-spec-parity.test: retire the two spec-side theme legs
(mutual assignability with the spec Theme, ThemeParsed.mode required) —
nothing is left upstream to pin against — and pin the vacancy instead:
Theme, ThemeMode and ColorPalette asserted ABSENT from the spec export
set, the GestureType/GestureConfig road, so an upstream re-publish is a
loud collision. The local authoring pin (mode optional) stays executable.
The declared-BREAKING 17.2.0 entry (http_request_errors_total retired,
objectstack#9834) is inert here: the name and its four spelling/registry
variants match zero files.
Fixes#5668
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Eager closure (gzip, 52 chunks)3225.0 KB3990.2 KB
Main entry chunk (gzip)152.6 KB350 KB
Entry fileindex-VwKXQgMw.js
StatusPASS

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

PackageSizeGzipped
app-shell (consoleActionDispatch.js)0.20KB0.19KB
app-shell (index.js)10.04KB3.72KB
app-shell (runtime-config.js)12.80KB4.47KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)10.06KB3.86KB
auth (ActiveOrganizationStorage.js)25.05KB9.16KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)2.07KB1.00KB
auth (AuthProvider.js)33.99KB8.57KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.15KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.65KB2.22KB
auth (SocialSignInButtons.js)9.61KB3.89KB
auth (UserMenu.js)3.41KB1.23KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)40.21KB10.80KB
auth (createAuthenticatedFetch.js)8.46KB3.43KB
auth (index.js)3.19KB1.44KB
auth (invitation-status.js)1.22KB0.70KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.30KB1.02KB
auth (useWorkspaceAdminStatus.js)5.13KB2.35KB
collaboration (CommentThread.js)26.08KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.68KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)503.77KB113.91KB
core (index.js)4.92KB1.97KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)164.55KB45.67KB
fields (index.js)238.40KB59.89KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.44KB1.39KB
i18n (pickLocalized.js)7.62KB3.26KB
i18n (provider.js)23.13KB7.63KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)33.40KB8.71KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)38.95KB10.97KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.75KB
mobile (index.js)1.55KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.72KB0.42KB
mobile (useResponsiveConfig.js)1.37KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.53KB3.38KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.64KB1.50KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.93KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.53KB
permissions (usePermissions.js)1.93KB0.88KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.65KB18.32KB
plugin-chatbot (index.js)181.41KB43.22KB
plugin-dashboard (index.js)128.41KB32.95KB
plugin-designer (index.js)212.30KB42.80KB
plugin-detail (index.js)242.34KB60.98KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)125.63KB30.64KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)200.79KB54.26KB
plugin-kanban (index.js)52.93KB14.60KB
plugin-list (index.js)111.80KB27.20KB
plugin-map (index.js)20.06KB6.62KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)43.49KB11.93KB
plugin-timeline (index.js)26.49KB7.59KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)84.61KB20.74KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.45KB0.23KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)44.39KB14.99KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.33KB0.69KB
react (schema-input.js)2.32KB1.24KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)5.41KB2.34KB
sdui-parser (index.js)4.77KB2.16KB
sdui-parser (input-type.js)2.84KB1.40KB
sdui-parser (parse.js)12.13KB3.65KB
sdui-parser (provenance.js)3.66KB1.82KB
sdui-parser (types.js)0.28KB0.23KB
sdui-parser (validate.js)6.92KB2.40KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-inflight.js)8.87KB3.73KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.88KB1.85KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (spec-ui-namespace.js)0.20KB0.19KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)3.40KB1.68KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

…eta-spelling
Green-keep forced by the refresh, caught by the pin itself: Test (shard 1/4)
on 9f24ecb failed exactly the two count assertions in
vite-objectstack-spec-dist.test.ts (declared.length 18, injectedSpecKeys 18),
which is the anti-vacuity property doing its job on a real bump.
The moved entry is measured, not assumed: diffing the published 17.1.0
exports map (18 keys, via the registry) against the installed 17.2.0 (19
keys) shows exactly one addition — ./meta-spelling, resolving to
dist/meta-spelling/index.mjs under the import condition — and no removal.
The alias table needs no code change: it is derived from the exports map at
runtime, and the reconciliation case proves the new entry gets a real alias
agreeing with Node's own resolver (25/25 pass, and the whole
scripts/__tests__ directory is 1631/1631).
Prose counts that state current facts move with the pin (the map has 19,
mutation legs read 19-vs-18 / gains 19 keys, the fixture note reads
19-entry); the two dated historical records (the rc.6 measurement, the
objectui#5388 incident narrative) stay as written. The exact-count assertion
stays exact — no toBeGreaterThan.
Refs #5668
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EuPCi56cnGyykygi3z9w4m
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Eager closure (gzip, 52 chunks)3225.0 KB3990.2 KB
Main entry chunk (gzip)152.6 KB350 KB
Entry fileindex-CFjwcPSR.js
StatusPASS

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

PackageSizeGzipped
app-shell (consoleActionDispatch.js)0.20KB0.19KB
app-shell (index.js)10.04KB3.72KB
app-shell (runtime-config.js)12.80KB4.47KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)10.06KB3.86KB
auth (ActiveOrganizationStorage.js)25.05KB9.16KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)2.07KB1.00KB
auth (AuthProvider.js)33.99KB8.57KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.15KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.65KB2.22KB
auth (SocialSignInButtons.js)9.61KB3.89KB
auth (UserMenu.js)3.41KB1.23KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)40.21KB10.80KB
auth (createAuthenticatedFetch.js)8.46KB3.43KB
auth (index.js)3.19KB1.44KB
auth (invitation-status.js)1.22KB0.70KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.30KB1.02KB
auth (useWorkspaceAdminStatus.js)5.13KB2.35KB
collaboration (CommentThread.js)26.08KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.68KB0.73KB
collaboration (useCollaborationTranslation.js)6.05KB2.52KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)503.77KB113.91KB
core (index.js)4.92KB1.97KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)164.55KB45.67KB
fields (index.js)238.40KB59.89KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.44KB1.39KB
i18n (pickLocalized.js)7.62KB3.26KB
i18n (provider.js)23.13KB7.63KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)33.40KB8.71KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)38.95KB10.97KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.75KB
mobile (index.js)1.55KB0.62KB
mobile (offlineQueue.js)3.91KB1.35KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (serviceWorkerSource.js)3.41KB1.48KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)6.96KB1.98KB
mobile (useOfflineSync.js)1.99KB0.72KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.72KB0.42KB
mobile (useResponsiveConfig.js)1.37KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)9.53KB3.38KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)4.64KB1.50KB
permissions (evaluator.js)5.12KB1.74KB
permissions (index.js)0.93KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.53KB
permissions (usePermissions.js)1.93KB0.88KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.62KB12.83KB
plugin-charts (index.js)64.65KB18.32KB
plugin-chatbot (index.js)181.41KB43.22KB
plugin-dashboard (index.js)128.41KB32.95KB
plugin-designer (index.js)212.30KB42.80KB
plugin-detail (index.js)242.33KB60.97KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)125.63KB30.64KB
plugin-gantt (index.js)164.10KB39.87KB
plugin-grid (index.js)200.79KB54.26KB
plugin-kanban (index.js)52.93KB14.60KB
plugin-list (index.js)111.80KB27.20KB
plugin-map (index.js)20.06KB6.62KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)43.49KB11.93KB
plugin-timeline (index.js)26.49KB7.59KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)84.61KB20.74KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.66KB3.50KB
providers (index.js)0.45KB0.23KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.62KB2.34KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)44.39KB14.99KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.33KB0.69KB
react (schema-input.js)2.32KB1.24KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)5.41KB2.34KB
sdui-parser (index.js)4.77KB2.16KB
sdui-parser (input-type.js)2.84KB1.40KB
sdui-parser (parse.js)12.13KB3.65KB
sdui-parser (provenance.js)3.66KB1.82KB
sdui-parser (types.js)0.28KB0.23KB
sdui-parser (validate.js)6.92KB2.40KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.87KB0.99KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (dashboard-filter-alias.js)6.23KB2.74KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)1.87KB0.85KB
types (disclosure.js)0.20KB0.18KB
types (error-code.js)1.54KB0.88KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (http-inflight.js)8.87KB3.73KB
types (http-retry.js)4.32KB2.02KB
types (index.js)3.88KB1.85KB
types (layout.js)0.20KB0.18KB
types (managed-by.js)0.19KB0.18KB
types (mobile.js)2.59KB1.31KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (record-semantics.js)1.28KB0.67KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (spec-report.js)5.05KB1.93KB
types (spec-ui-namespace.js)0.20KB0.19KB
types (system-fields.js)3.33KB1.54KB
types (theme.js)3.40KB1.68KB
types (ui-action.js)3.40KB1.71KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB

Size Limits

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

@os-zhuang
os-zhuang marked this pull request as ready for review August 23, 2026 09:55
@os-zhuang
os-zhuang added this pull request to the merge queueAug 23, 2026
Merged via the queue into main with commit e067173Aug 23, 2026
32 of 33 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-5668-spec-1720-lockfile-refresh branch August 23, 2026 09:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Build Docs is red on main: fs reaches the browser bundle via @objectstack/specpg-connection-string

2 participants

@os-zhuang@claude