Skip to content

feat(plugin-dashboard): publish the honoured dashboard inputs, pin the two ruled-out keys (#5742) - #5829

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-5742-dashboard-declare-honoured-inputs
Aug 23, 2026
Merged

feat(plugin-dashboard): publish the honoured dashboard inputs, pin the two ruled-out keys (#5742)#5829
os-zhuang merged 2 commits into
mainfrom
claude/issue-5742-dashboard-declare-honoured-inputs

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Fixes#5742

What

The dashboard registration (packages/plugin-dashboard/src/index.tsx) published exactly three inputs — columns, gap, className — while DashboardRenderer honoured far more, so validateTree over the live manifest reported unknown-prop on keys that work, widgets included: the very prop whose contents the #5709unconsumed-widget-option warning descends into. dashboard is in PUBLIC_BLOCKS, so inputs is contract surface, serialized into sdui.manifest.json and sdui-intrinsics.d.ts. public-blocks.ts is untouched (reference surface, not the fix site).

Not "declare all of them": per #5091's precedent this is a per-key triage, with the deliberate exclusions pinned so they read differently from an oversight.

Per-key triage — a reviewer can strike any one row without unpicking the rest

The line applied is the one both shipped precedents (#4668, #5091) drew: declare a key only when the renderer reads it AND the spec's strict DashboardSchema accepts it (so the manifest never offers a key the save gate refuses); a spec-rejected honoured key becomes a pinned non-author exclusion.

keyrenderer read (measured)spec verdict (measured)disposition
widgetspervasive (schema.widgets ?? [], layout/reorder/mobile split); defaultProps already carried widgets: []accepted (required on the document form)declared, array. Not required on the inline node: the renderer has a live default and every widget-less node today is legal — making it a hard error is a strictness increase beyond this card
labelschema.title || schema.label header title (spec-canonical spelling, framework#1878)accepted, string | inline locale mapdeclared, ['string','object']
descriptionheader description (+ DashboardView chrome)accepted, string | inline locale mapdeclared, ['string','object']
headershowTitle / showDescription / actions[]accepted, strict { showTitle?, showDescription?, actions? }declared, object
globalFiltersfilter bar → dashboard variables (objectui#4032)accepted, strict GlobalFilter[]declared, array
dateRangedate-range filter configaccepted, strict { field?, defaultRange?, allowCustomRange? }declared, object
refreshIntervalauto-refresh timer (<= 0 disables; needs host onRefresh)accepted, plain number (0 / negative / fractional all parse — renderer semantics stated in the input description per the 2026-08-17 "spec is the sole judge of values" ruling)declared, number
titleread as the legacy fallback — the read staysrejected by name (unrecognized_keys: title)non-author, pinned — declaring it would publish a key the save gate refuses; documents in the wild keep rendering
ariano read site — measured: zero schema.aria reads in this package (the issue body listed it among the honoured reads; that one claim is false)tombstoned: spec refuses every value with a removal message (#3896 audit close-out — "no dashboard renderer ever applied it")non-author, pinned (unpublished + spec-refused). No "renderer still reads it" leg, deliberately — there is no read
nameread — keys the dashboards.{name}.* translation lookupsaccepted on the document form, where it is required — not on the inline nodenon-author, RULED (PM, 2026-08-23) — pinned on producer evidence; see below

name — RULED non-author (PM, 2026-08-23; issue #5742 comment 5386380368)

This was opened as a question and has since been decided. name is not an author input on the inline dashboard node.

⚠️The exclusion reason is NOT the same as title's, and the difference is load-bearing.title and aria are excluded because the spec rejects them by name. name is excluded because the shipped "spec accepts + renderer reads → declare" line never fires here: the spec accepts (indeed requires) name on the document form, not on the inline node, so the heuristic's premise is about a different shape. A reader who sees name excluded next to title and assumes "spec rejects it" would be wrong.

Two consequences carried into the code comments:

  • The schema.nameread stays untouched — it still keys the dashboards.{name}.* lookups.
  • The pin rests on producer evidence alone (DashboardView / the document loader hands the loaded document to the renderer), which makes it a weaker pin than the title / aria ones, each of which can assert a re-checkable spec verdict. That weakness is stated in the docblock rather than papered over, and ⛔ no spec rejection is asserted for name anywhere.

Supporting reason: publishing name inline would teach authors — AI authors especially — to fabricate a dashboard identity that resolves no translations and fails silently. That is a newly manufactured silently-inert key: the exact defect class this PR exists to remove.

Tests

packages/plugin-dashboard/src/__tests__/dashboardAuthoredInputs.test.tsx (30 tests), all three faces with silenced-check controls:

  • Author reach (the 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 shape): every declared key now draws no diagnostic on an inline dashboard node, judged by the same manifestFromConfigs + validateTree pair the save gate and JSX-page compiler use; an undeclared probe key still draws unknown-prop (the check is live); off-arm values still draw type-mismatch (declaring is not disarming); both union arms are derived from the spec's own verdicts.
  • Exclusion pins (the gridNonAuthorKeys shape): title / aria not published (with label / widgets as declared controls), spec rejects title by name and refuses every aria value through the standing tombstone, both draw unknown-prop from the real validator, and the legacy title read still renders its header title (canonical label as the control).
  • Generated artifacts: the manifest entry publishes exactly the triaged input list, and generateDts (the same generator gen-manifest.ts runs) types the new keys — unions included — with title / aria absent from the emitted DashboardProps block. sdui.manifest.json / sdui-intrinsics.d.ts are build-time codegen (not checked in), so the change to them is pinned through their own generators rather than hand-shown.

Verification (all from repo root)

Head is now 77295c734. The readings below were taken at 6a1e9040e; the only commit since is the comment-only amendment recording the name ruling above (every changed line is a comment line, mechanically verified), and the pin suite was re-run green on the new head — 30/30 on the pin file, 712/712 across packages/plugin-dashboard/.

  • pnpm exec vitest run packages/plugin-dashboard/ apps/console/src/__tests__/registry-inputs-spec-parity.test.ts apps/console/src/__tests__/public-contract.test.ts apps/console/src/__tests__/ga-honoured-inputs-author-reach.test.ts apps/console/src/__tests__/component-input-union-specimens.test.ts apps/console/src/__tests__/public-block-binding-reach.test.tsx81 files / 836 tests passed (run at 6a1e9040e, the branch head).
  • pnpm --filter @object-ui/plugin-dashboard type-check and lint → clean (0 errors; pre-existing warnings only), after building the dependency closure.
  • node scripts/check-changeset-presence.mjs, check-phantom-dependencies.mjs (new @object-ui/sdui-parser devDep), check-control-bytes.mjs, check-doc-component-types.mjs, check-doc-snippet-types.mjs (on a built tree: "Every covered documentation snippet compiles against the built types"), check-changeset-fixed.mjs, check-changeset-no-major.mjs → all exit 0, verdict lines verified.
  • Reverse verification, against the commit: git checkout HEAD~1 -- packages/plugin-dashboard/src/index.tsx20 of 30 tests red (all 9 author-reach rows via restored unknown-prop, all 7 off-arm rows, the 2 not-published control legs, both artifact legs); restore → git diff HEAD --stat empty → 30/30 green. Legs that do not discriminate the registration change, by design: reachability + probe-key control, the five spec-verdict legs (they pin the spec, not the registry), unknown-prop on title/aria (true before and after), and the two render legs (the reads were never touched).

Scope notes


Generated by Claude Code


Generated by Claude Code

…e two ruled-out keys (#5742)
The `dashboard` registration published exactly three inputs (columns/gap/
className) while DashboardRenderer honoured widgets, label (legacy title),
description, header, globalFilters, dateRange and refreshInterval — so
`validateTree` and the generated sdui.manifest.json / sdui-intrinsics.d.ts
warned authors off keys that work, `widgets` included: the very prop the
objectui#5709 unconsumed-options warning descends into.
Per-key triage (the shipped #4668 / #5091 line — declare only what the spec's
strict DashboardSchema accepts AND the renderer reads):
- DECLARED: widgets, label (string | locale map), description (string |
locale map), header, globalFilters, dateRange, refreshInterval — plus the
existing columns/gap/className, untouched.
- NON-AUTHOR, pinned: `title` (legacy spelling; spec rejects it by name; the
`schema.title || schema.label` read stays for documents in the wild) and
`aria` (spec tombstone from the #3896 audit close-out; measured: this
package has NO aria read site, correcting the issue body on that one key).
- RAISED, not guessed: `name` (spec accepts it; renderer reads it for the
dashboards.{name}.* translation lookups; but it is document identity
written by the stored-dashboard path, no docs example authors it inline,
and no sibling registration declares a name input). Open question on #5742.
The new dashboardAuthoredInputs test pins all three faces: author reach
(previously-unknown-prop keys now clean on an inline dashboard node, with
off-arm and silenced-check controls), the exclusion pins in the
gridNonAuthorKeys shape, and the generated manifest/intrinsics via the same
manifestFromConfigs/generateDts pair gen-manifest.ts uses.
Fixes#5742
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)3227.9 KB3990.2 KB
Main entry chunk (gzip)152.7 KB350 KB
Entry fileindex-CuZRKxwx.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.13KB3.77KB
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)40.18KB10.59KB
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.98KB113.95KB
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.66KB18.32KB
plugin-chatbot (index.js)186.86KB44.21KB
plugin-dashboard (index.js)130.36KB33.64KB
plugin-designer (index.js)212.30KB42.80KB
plugin-detail (index.js)242.34KB60.99KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)125.63KB30.64KB
plugin-gantt (index.js)164.15KB39.88KB
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.51KB20.72KB
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)52.40KB17.45KB
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 (dashboard-widget-options.js)3.08KB1.30KB
sdui-parser (index.js)4.93KB2.24KB
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)7.54KB2.63KB
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)6.28KB2.87KB
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

…ne (#5742)
Comments only; no behaviour, no test, no declared input changes.
The registration comment and the pin-test docblock both carried `name`'s
absence from `inputs` as "pending (not ruled)". It is now ruled non-author
for the inline node, and both markers are replaced with the ruling and,
importantly, with the REASON — which is not the one the neighbours carry:
- It is NOT a spec rejection. `title` and `aria` are excluded because the
spec rejects them by name. The spec ACCEPTS `name`, but on the DOCUMENT
form where it is required, not on the inline node — so the shipped
"spec accepts + renderer reads => declare" line never fires here at all.
Left unsaid, a reader seeing `name` excluded beside `title` would assume
the same reason and be wrong.
- The `schema.name` read is untouched; it still keys the
`dashboards.{name}.*` translation lookups.
- The evidence is producer-side alone (`DashboardView` / the document
loader hands the loaded document to the renderer), which makes this a
weaker pin than the other two — each of which asserts a re-checkable
spec verdict — and is why `name` carries no `NON_AUTHOR` row. Both
comments say so plainly rather than papering over it.
Supporting reason, recorded in both places: publishing `name` inline would
teach authors, AI authors especially, to fabricate a dashboard identity that
resolves no translations and fails silently — a newly manufactured
silently-inert key, the exact defect class this card removes.
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)3227.9 KB3990.2 KB
Main entry chunk (gzip)152.7 KB350 KB
Entry fileindex-CuZRKxwx.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.13KB3.77KB
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)40.18KB10.59KB
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.98KB113.95KB
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.66KB18.32KB
plugin-chatbot (index.js)186.86KB44.21KB
plugin-dashboard (index.js)130.36KB33.64KB
plugin-designer (index.js)212.30KB42.80KB
plugin-detail (index.js)242.34KB60.99KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)125.63KB30.64KB
plugin-gantt (index.js)164.15KB39.88KB
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.51KB20.72KB
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)52.40KB17.45KB
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 (dashboard-widget-options.js)3.08KB1.30KB
sdui-parser (index.js)4.93KB2.24KB
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)7.54KB2.63KB
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)6.28KB2.87KB
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 14:41
@os-zhuang
os-zhuang added this pull request to the merge queueAug 23, 2026
Merged via the queue into main with commit 2e471a6Aug 23, 2026
23 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-5742-dashboard-declare-honoured-inputs branch August 23, 2026 14:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants

@os-zhuang@claude