Skip to content

test(parity): adapt the spec parity gates to 17.0.0 GA (ruled items 1-5); fork the four-block exemption - #4671

Merged
yinlianghui merged 3 commits into
mainfrom
claude/issue-4648-ga-parity-exemptions
Aug 15, 2026
Merged

test(parity): adapt the spec parity gates to 17.0.0 GA (ruled items 1-5); fork the four-block exemption#4671
yinlianghui merged 3 commits into
mainfrom
claude/issue-4648-ga-parity-exemptions

Conversation

@yinlianghui

@yinlianghuiyinlianghui commented Aug 15, 2026

Copy link
Copy Markdown
Collaborator

Part of #4648 — the ruled items whose measurement held. The card's headline item (reasoned exemptions for the four new GA object-* blocks) is not implemented here: the implementation measurement contradicted the ruling's premise, so it goes back as a fork report rather than being re-decided in a diff. The card stays open for that.

Pre-re-point adaptation for the GA pin bump (#4636 / PR #4639), alongside PR #4660 (symbol collisions) and #4649 (retirement unwind).

Per-item disposition

#itemmeasurementdisposition
four new GA blocks (object-form, object-grid, object-master-detail-form, object-metric)all 78 unpublished spec keys are honoured today by this repo's renderers — the premise said none wereFORKED back to #4648. No exemptions written
1element:record_picker.filterapplied: record-picker.tsx composes composed?.filter ?? props.filter and the fetch effect sets query.$filter = filter before adapter.findalready published (#3830); ruling satisfied, no change
2element:text_input.defaultValueapplied: text-input.tsx:73-76 seeds the bound page variable once on mount, :119 passes it as the uncontrolled initial valuealready published (#3808); ruling satisfied, no change
3record:highlights top-level readonlypremise corrected: the key set did not move (rc.6 and GA both carry fields/layout/aria top-level and readonly per entry), and this repo never published it. What moved is the refusal modegate adapted, nothing to stop publishing
4record:details stripped section member keysame shape: section member keys are identical on both pins (name/label/columns/fields); the renderer-only title/showBorder/hideEmpty are the undeclared three, and they are now refused instead of strippedgate adapted, nothing to stop publishing
5new FormFieldSchema keythe key is publicPicker; zero read points repo-wide — it gates objectstack's public-lookup REST route (403 LOOKUP_NOT_PUBLIC without it, objectstack#7467), a server capability with no destination in normalizeSectionFieldreasoned exemption in sectionFields.spec-parity
6$like / $ilikeout of scope per the ruling (folded into #4023 / #3567)untouched
+five GA keys on existing covered blocksnot among the ruled six, surfaced by the same measurement — page:header.maxVisible / .mobileMaxVisible, page:tabs.alwaysShowStrip, record:details.inlineEdit / .showHeader are all honoured todayGA-pending exemptions, declarations owned by #4668

The forked item, in one paragraph

The ruling chose reasoned exemptions on the measured premise that nothing in this repo reads the four blocks' authoring surfaces. Measured in implementation, the opposite holds: all four blocks are long-standing objectui renderers, and every one of the 78 keys their inputs omit is honoured today — either read off schema.* in the renderer, or delivered by SchemaRenderer's rest-prop spread onto a component whose props declare it one for one. ObjectGridSchema in @object-ui/types declares label / fields / sort / pagination / pageSize / showSearch / selectable / staticData and the rest of GA's list (several as its own @deprecated legacy spellings, which GA has now declared); ObjectMetricWidget declares format / currency / prefix / suffix / trend / compareTo / colorVariant / invert / fallbackValue; the form renderers declare submitText / cancelText / showSubmit / readOnly / initialValues and their siblings.

That inverts the defect class. These are not keys the renderer ignores (the silent-success class the ruling wanted to close) — they are keys that work while sdui-parser reports unknown-prop on the author who writes them, the designer panel hides them and sdui-intrinsics.d.ts denies them. Under this gate's own stated bar ("a spec key the renderer HONOURS and inputs omits is a plain defect and gets declared") they are A-class defects to declare. Writing the exemptions anyway would have meant acting on a falsified premise and rewriting the bar that governs the list. Both are the maintainer's call, so the measurement goes back to #4648 and nothing was added to UNPUBLISHED_EXEMPTIONS for those four blocks — a comment block in the file says so, so the next reader does not "fix" the red by quietly adding them.

Consequence, stated plainly: on a GA tree this PR takes the parity suites from 8 failures to 4, and the 4 remaining are exactly that forked item. It does not make the GA tree fully green, and it cannot until #4648 rules again.

What the code does

apps/console/src/__tests__/registry-inputs-spec-parity.test.ts

  • EXPECTED_COVERED becomes pin-aware: the four GA blocks are expected in covered exactly when the installed spec carries them. The expectation stays EXACT on either pin — the shrinking-contract reading is not weakened — and the pin-dependence itself is asserted, together with the pin-INDEPENDENT half (this repo registers all four with inputs either way, so a block leaving covered can only ever mean the spec stopped carrying it).
  • five GA-pending entries in UNPUBLISHED_EXEMPTIONS, one per honoured-but-unpublished key, each naming its read site and page:header / page:tabs / record:details: five keys spec 17.0.0 GA declares and the renderers already honour are never published as inputs #4668. They are dormant on the rc.6 pin and fully judged on a GA tree; the set allowed to be dormant is pinned by name, and its dormancy is asserted to track the installed element set in both directions, so a GA release that dropped one of these keys fails here instead of leaving an entry that covers nothing.

Why exemptions and not declarations: the pinned 17.0.0-rc.6 does not declare any of the five, so publishing the inputs today fails this same file's FORWARD direction, and a forward exemption to cover that would itself go stale — and red — the moment the pin moves. "Must stay green on current main" wins, the same collision PR #4660 recorded for SECRET_MASK. #4668 declares them once the pin lands, and each entry then dies by the file's own stale check.

packages/plugin-form/src/sectionFields.spec-parity.test.tspublicPicker exemption with the same GA-pending mechanism, plus an "every exemption cites an issue" assertion the console gate already had and this file did not.

packages/plugin-detail/src/__tests__/record{Details,Highlights}Inputs.spec-parity.test.ts — GA closed RecordHighlightsProps and the record:details section object under objectstack#4001 batch A, so an undeclared key raises unrecognized_keys with a named message where rc.6 dropped it silently. Both gates now assert the same verdict through whichever evidence the installed contract gives, with the mode probed behaviourally (a probe key no spec would declare) rather than read off a version string. The rejection branches assert the envelope — code plus the keys named — not a bare failure, so a refusal of fields or label cannot satisfy them.

A wrong probe cannot go vacuously green: taking the wrong branch fails on either pin, which is how these two were caught in the first place.

Evidence — both pins, at 6f96911dc (working tree clean)

GA readings use the npm-pack overlay from PR #4660's body: npm pack @objectstack/spec@17.0.0 unpacked inside this worktree's virtual store with the peer links mirrored, every @objectstack/spec symlink repointed at it, the real suites run unmodified, rc.6 restored afterwards. Version confirmed per package before each run (17.0.0-rc.6 vs 17.0.0).

Current pin, 17.0.0-rc.6 — green:

 Test Files 4 passed (4)
Tests 103 passed (103)

GA tree, @objectstack/spec@17.0.0 — 4 failures, all of them the forked item:

 × object-form publishes every top-level key its spec props schema declares
× object-grid publishes every top-level key its spec props schema declares
× object-master-detail-form publishes every top-level key its spec props schema declares
× object-metric publishes every top-level key its spec props schema declares
Test Files 1 failed | 3 passed (4)
Tests 4 failed | 107 passed (111)

Before this branch the same GA tree failed 8: the four above plus the coverage-set pin, page:header, page:tabs and record:details — and, on the per-block gates next door, the two strictness assertions.

gaterc.6GA
the four touched parity filesPASS (103)4 failed / 107 passed — the forked item only
plugin-detail package suitePASS (68 files / 582 tests)the two parity files PASS (18)
apps/console + plugin-form + plugin-detail scope sweepPASS (118 files / 1165 tests)
other parity suites (types, components, plugin-list, plugin-grid, plugin-dashboard)PASS (21 parity tests) — no further strictness fallout there
check-changeset-presencePASS
check-changeset-fixed / check-changeset-no-majorPASS
type-check (plugin-detail, plugin-form, console)PASS — "Scope: 3 of 47 workspace projects", closure built first
eslint --quiet over the 4 changed filesPASS (0 errors)
check:control-bytesPASS (4191 files)

The suite, type-check, lint and control-byte readings above were first taken at 7eeda7e93 and re-confirmed on both pins at 6f96911dc; the only delta between those two commits is the changeset file (git diff --stat 7eeda7e93 6f96911dc = 1 file, 4 insertions).

Reverse verification, direction predicted before running, both pins:

  • delete one GA-pending entry while leaving it in the pinned set, and rename the publicPicker entry ⇒ GA: 9 failures (the block assertion, both pending-set guards, has a behavioral row, has no stale rows); rc.6: 4 failures (the pending-set guards and the two plugin-form checks only — the block assertion stays green because rc.6 has no such key, which is the dormancy the mechanism claims). Restored from the commit, git status clean, re-run green.
  • the strictness adaptation's ablation is the pre-fix state itself, recorded above: red on GA, green on rc.6.

Scope and the changeset

Four test files, no source, no registry inputs and no published authoring surface change. Two of the four nevertheless live under released packages' src/ (plugin-form, plugin-detail), which the Changeset Declaration gate counts, so this carries the repo's explicit exemption for that case: an empty-frontmatter.changeset/brave-pandas-invent.md, the same answer PRs #4641 and #4666 gave the same gate. Its output at this head:

Compared the working tree with 6d4f5bd59 (merge-base with origin/main): 4 file(s) changed,
4 of them under the src/ of a package the release covers, 0 under a package changesets
ignores, 1 changeset(s) added.
✅ 4 source file(s) of 3 released package(s) changed, and this change declares 1 changeset(s):
.changeset/brave-pandas-invent.md.
Every one of them has an EMPTY frontmatter — declared as releasing nothing, which
is the explicit exemption and a complete answer to this gate.

(An earlier revision of this body claimed a skip-changeset label instead. That label does not exist in this repo — the empty-frontmatter changeset is the mechanism, and the label has been removed from this PR.)

No file outside this card's declared surface; the in-flight siblings' files (app-shell/views/RecordDetailView.tsx, plugin-grid + useConsoleActionRuntime, the catalog calendar entries) are untouched.


Generated by Claude Code

… new keys
Pre-re-point adaptation for the GA pin bump (#4636 / PR #4639), implementing
objectui#4648's delegated ruling for the items whose measurement held.
- registry-inputs parity: `EXPECTED_COVERED` becomes pin-aware, so the four
`object-*` blocks GA adds to `ComponentPropsMap` are expected exactly when the
installed spec carries them, with the pin-dependence asserted rather than
assumed.
- five GA-added keys the renderers already honour (`page:header.maxVisible` /
`.mobileMaxVisible`, `page:tabs.alwaysShowStrip`, `record:details.inlineEdit` /
`.showHeader`) get GA-pending unpublished-key exemptions: declaring the inputs
on the rc.6 pin would fail this file's own forward direction, so #4668 owns
declaring them once the pin moves.
- `sectionFields.spec-parity`: `FormFieldSchema.publicPicker` gets a reasoned
exemption (ruling item 5) — it gates objectstack's public-lookup REST route
and has zero read points here.
Both pending mechanisms are pinned sets whose dormancy is asserted to track the
installed spec's element set in both directions, so an entry cannot rot into a
silent allowlist.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnQd8iMMUwXQEV1crFmQiQ
…tes read GA's refusal, not rc.6's silent strip
objectui#4648 ruling items 3 and 4, measured. Neither key set moved between
17.0.0-rc.6 and 17.0.0 GA and objectui publishes neither key, so there was
nothing to stop publishing; what moved is HOW the spec says no. GA closed
`RecordHighlightsProps` and the `record:details` section object under
objectstack#4001 batch A, so an undeclared key now raises `unrecognized_keys`
with a named message where rc.6 dropped it in silence.
Both gates now assert the same verdict through whichever evidence the installed
contract gives, with the mode probed behaviourally rather than read off a
version string. A broken probe cannot go vacuously green: taking the wrong
branch fails on either pin.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnQd8iMMUwXQEV1crFmQiQ
@vercel

vercelBot commented Aug 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredAug 15, 2026 6:52am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)24.7 KB350 KB
Entry fileindex-Bq8naT7s.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.56KB3.59KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)25.13KB5.40KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)38.46KB10.17KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.35KB1.07KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.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)489.91KB108.67KB
core (index.js)3.79KB1.52KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)163.56KB44.83KB
fields (index.js)230.37KB57.17KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.32KB1.77KB
i18n (index.js)3.35KB1.38KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.12KB7.62KB
i18n (useDisplayLocale.js)2.84KB1.45KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)38.98KB10.85KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.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.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)8.75KB3.06KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)3.67KB1.12KB
permissions (evaluator.js)4.41KB1.44KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.55KB0.71KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.86KB12.91KB
plugin-charts (index.js)62.10KB17.67KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)121.84KB31.74KB
plugin-designer (index.js)212.58KB42.83KB
plugin-detail (index.js)239.93KB60.01KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)114.72KB27.70KB
plugin-gantt (index.js)164.30KB40.02KB
plugin-grid (index.js)190.02KB50.48KB
plugin-kanban (index.js)52.74KB14.53KB
plugin-list (index.js)111.82KB27.23KB
plugin-map (index.js)18.16KB5.81KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)41.38KB11.09KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)83.81KB20.49KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.71KB3.53KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.67KB2.37KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)27.64KB9.44KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.26KB0.67KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)4.09KB1.74KB
sdui-parser (index.js)4.47KB2.03KB
sdui-parser (parse.js)10.04KB2.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)4.69KB1.48KB
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-retry.js)4.32KB2.02KB
types (index.js)3.05KB1.52KB
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 (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
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

The empty-frontmatter changeset is this repo's explicit exemption for a diff
that touches released packages' src/ without changing published behaviour —
the same answer PRs #4641 and #4666 gave the same gate. Two of the four touched
test files live under plugin-form / plugin-detail src/, which the gate counts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RnQd8iMMUwXQEV1crFmQiQ
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Main entry (gzip)24.7 KB350 KB
Entry fileindex-Bq8naT7s.js
StatusPASS

📦 Bundle Size Report

PackageSizeGzipped
app-shell (index.js)9.56KB3.59KB
app-shell (runtime-config.js)7.42KB2.32KB
app-shell (types.js)0.01KB0.04KB
app-shell (urlParams.js)8.92KB3.41KB
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)25.13KB5.40KB
auth (AuthShell.js)3.49KB1.40KB
auth (ForgotPasswordForm.js)12.21KB3.45KB
auth (LoginForm.js)18.13KB5.39KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)6.64KB2.21KB
auth (SocialSignInButtons.js)9.60KB3.89KB
auth (UserMenu.js)3.40KB1.22KB
auth (auth-gate-events.js)1.29KB0.66KB
auth (authStyles.js)5.04KB1.72KB
auth (createAuthClient.js)38.46KB10.17KB
auth (createAuthenticatedFetch.js)6.34KB2.43KB
auth (index.js)2.35KB1.07KB
auth (org-roles.js)6.66KB2.78KB
auth (phone-identifier.js)1.11KB0.66KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)5.02KB0.88KB
auth (useIsWorkspaceAdmin.js)1.61KB0.85KB
collaboration (CommentThread.js)26.07KB7.56KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)6.49KB2.64KB
collaboration (PresenceProvider.js)2.79KB1.13KB
collaboration (index.js)1.65KB0.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)489.91KB108.67KB
core (index.js)3.79KB1.52KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)163.56KB44.83KB
fields (index.js)230.37KB57.17KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.32KB1.77KB
i18n (index.js)3.35KB1.38KB
i18n (pickLocalized.js)3.69KB1.73KB
i18n (provider.js)23.12KB7.62KB
i18n (useDisplayLocale.js)2.84KB1.45KB
i18n (useObjectLabel.js)27.59KB6.63KB
i18n (useSafeTranslation.js)7.77KB3.13KB
layout (index.js)38.98KB10.85KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (createOfflineDataSource.js)5.61KB1.74KB
mobile (index.js)1.50KB0.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.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)4.32KB1.64KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (MePermissionsProvider.js)8.75KB3.06KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)3.67KB1.12KB
permissions (evaluator.js)4.41KB1.44KB
permissions (index.js)0.91KB0.41KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)1.55KB0.71KB
plugin-ai (index.js)15.75KB3.80KB
plugin-calendar (index.js)46.86KB12.91KB
plugin-charts (index.js)62.10KB17.67KB
plugin-chatbot (index.js)181.21KB43.14KB
plugin-dashboard (index.js)121.84KB31.74KB
plugin-designer (index.js)212.58KB42.83KB
plugin-detail (index.js)239.93KB60.01KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)114.72KB27.70KB
plugin-gantt (index.js)164.30KB40.02KB
plugin-grid (index.js)190.02KB50.48KB
plugin-kanban (index.js)52.74KB14.53KB
plugin-list (index.js)111.82KB27.23KB
plugin-map (index.js)18.16KB5.81KB
plugin-markdown (index.js)13.72KB4.69KB
plugin-report (index.js)41.38KB11.09KB
plugin-timeline (index.js)26.68KB7.66KB
plugin-tree (index.js)8.50KB2.88KB
plugin-view (index.js)83.81KB20.49KB
providers (DataSourceProvider.js)0.75KB0.39KB
providers (MetadataProvider.js)1.37KB0.59KB
providers (ThemeProvider.js)1.90KB0.85KB
providers (UploadProvider.js)11.71KB3.53KB
providers (index.js)0.44KB0.22KB
providers (types.js)0.01KB0.04KB
react-runtime (index.js)5.67KB2.37KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)27.64KB9.44KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.26KB0.67KB
react (schema-input.js)1.45KB0.83KB
react (spec-input.js)0.20KB0.18KB
sdui-parser (codegen.js)4.09KB1.74KB
sdui-parser (index.js)4.47KB2.03KB
sdui-parser (parse.js)10.04KB2.82KB
sdui-parser (types.js)0.29KB0.24KB
sdui-parser (validate.js)4.69KB1.48KB
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-retry.js)4.32KB2.02KB
types (index.js)3.05KB1.52KB
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 (system-fields.js)3.33KB1.54KB
types (theme.js)0.20KB0.18KB
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

@yinlianghui
yinlianghui marked this pull request as ready for review August 15, 2026 07:04
@yinlianghui
yinlianghui added this pull request to the merge queueAug 15, 2026
Merged via the queue into main with commit 541c724Aug 15, 2026
21 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-4648-ga-parity-exemptions branch August 15, 2026 07:05
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.

2 participants

@yinlianghui@claude