Skip to content

fix(app-shell): judge the machine-name chip on the untranslated source label (#8231) - #10320

Merged
os-project-manager merged 3 commits into
mainfrom
claude/issue-8231-machine-name-chip-source-label
Sep 24, 2026
Merged

os-project-manager merged 3 commits into
mainfrom
claude/issue-8231-machine-name-chip-source-label

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #8231
Clause-②: no

What changed

The machine-name chip in SchemaForm's FieldRow now compares prettify(name) with the field's untranslated source label, not with the visible label, as ruling 1 (comment 5749674288) requires. Before this change, the zh dashboard panel chipped every translated field while the en panel hid the chip beside the same fields. Now both locales show the same chip set.

  • field-source-label.ts (new leaf with no runtime imports). It holds a module-private symbol with a writer (stampSourceLabel) and a reader (untranslatedFieldLabel). A field that an overlay translated returns the label it arrived with, which is undefined when the form authored none. A field that no overlay touched returns its own label.
  • metadata-form-i18n.ts. Before resolveMetadataFormLabels runs, localizeMetadataForm stamps every field with its incoming label. It works on copies and never mutates its input. The resolver copies fields with object spread, which carries own symbol keys, so the stamp reaches SchemaForm. After resolving, fields the resolver synthesized, such as the header composite's bundle-enumerated children, are stamped with an undefined source. An English locale, or a type the bundle does not carry, still returns the same object as before.
  • SchemaForm.tsx, FieldRow. The source label is untranslatedFieldLabel(fieldSpec), else schema.title, else prettify(name). That is the chain label follows with every translation step removed, so it is the label the row would show in English. This also covers the raw-schema road (translateSchemaFieldLabel, e.g. source shown as 源节点), which had the same defect.
  • SchemaForm.tsx, sectioned rows. The row schema's title override now takes the source label instead of f.label. Without this, FieldRow's schema.title fallback would receive the translation that the stamp keeps out, so the fix would not hold. Every reader of the title prefers fieldSpec.label, which still holds the translation, so nothing visible changes: FieldRow reads fieldSpec.label first, and the color widget's aria-label reads fieldSpec?.label before schema.title.
  • mergeServerFields.ts. The form is now copied shallowly instead of being round-tripped through JSON. JSON.stringify drops symbol keys, so any dashboard with a server-only field lost the stamp. The function only ever appended a section to a fresh array, and its existing tests stay green.

The pipe cost: measured small, so option 1 landed and fallback 3 was not taken

  • No exported prop or type changed. FormFieldSpec is untouched, and so is the SchemaForm props type. The stamp is a symbol key: not authorable, not serialized, absent from Object.keys. field-source-label.ts is not re-exported from the package index.
  • The pipe is about 60 lines of leaf module plus about 50 lines in the overlay, and it needed one side fix (the JSON clone in mergeServerFields). I measured the import closure: SchemaForm.tsx statically reaches one file more than at base (the new leaf; the absolute count is method-dependent: 19 to 20 by the implementer, 24 to 25 by the reviewer), and still zero @objectstack/spec/system importers. My first commit read the stamp through the overlay module, which pulled spec/system into that closure. The second commit moves the stamp into the leaf.

Pin rewritten, with its reason (not deleted)

SchemaForm.deDeveloperize-8218.test.tsx section 1 used a hand-written 「列数」 label and read the chip beside columns. Its comment called the always-on chip the mechanism. That shape was the defect. After this change the old fixture would have stayed green for the wrong reason: a hand-written 「列数」 never passes through the overlay, so it counts as its own source. The pin now builds its fixture through the real localizeMetadataForm. It asserts the chip is absent beside gap (no source label) and present beside columns (source label "Grid width"), in both locales. The tooltip assertions use the chip that is present. The comment explains why the earlier shape was the defect this card removes. Section 3 still uses the old COLUMNS_FORM, but it only reads the numeric control.

A ruling premise that did not hold (the direction still holds)

The ruling's example, "shown for refreshInterval / Auto refresh everywhere", assumed the spec gives that field an English label. The spec does not. Every dashboardForm field is authored without a label (only helpText), and the field is named refreshIntervalSeconds. So in both locales all four layout fields (columns / gap / refreshIntervalSeconds / header) now hide the chip, which is what the English panel always did. The "present" half of the predicate is shown with a fixture whose source label does not spell the name ("Grid width" for columns), through the real overlay.

Red before, green after (zh and en)

The fix is committed. I reverted SchemaForm.tsx, metadata-form-i18n.ts and mergeServerFields.ts to base 8b1f06619, kept the new tests, and restored with git checkout HEAD -- under an EXIT trap. The restore was proven by git diff HEAD being empty and by each path's blob hash matching HEAD:

  • Before (base code): 7 failed / 17 passed as measured by the implementer; the at-tier reviewer re-ran the same procedure and read 6 failed / 18 passed (the same 24 tests, every red named below is red). All the zh predicate cases are red. The zh dashboard chip set is actions, columns, gap, header and one more, against an empty set in en. The raw-schema case chips source in zh only, and the rewritten 8218 zh case is red. The en cases are green before and after. That is the inversion: en never showed these chips.
  • After: those two files plus mergeServerFields.test.ts: 3 files, 31 passed.

Local verification (at d35e00806)

  • pnpm exec vitest run --maxWorkers=2 packages/app-shell/src/views/metadata-admin/: 287 files passed, 3081 tests passed, 1 skipped.
  • pnpm --filter @object-ui/app-shell type-check (tsc --noEmit and tsc -p tsconfig.test.json, whose include covers src/**/*.test.tsx): exit 0. The dependency closure was built first with turbo run build --filter=@object-ui/app-shell^..., 28 of 28 tasks.
  • eslint on the 6 touched source and test files: 0 errors. There are 18 warnings, all on pre-existing lines in SchemaForm.tsx / mergeServerFields.ts.
  • These gates exit 0: check-changeset-presence, changeset:check, check:changeset-claims, check:pending-changeset-literals, check:new-line-citations (0 new), check:control-bytes, check:test-path-roots, check:unreferenced-sources, check:spec-symbols, check:vi-mock-specifiers, and governed --test (NOT GOVERNED).
  • NOT MEASURED: check:eager-closure. Reason: it needs apps/console/dist/eager-closure.json from a console build, which was not run locally. The static-closure measurement above is the local substitute. The full pnpm test / pnpm lint / pnpm type-check runs are left to CI.

Acceptance notes

  • File surface: the claim named SchemaForm.tsx, metadata-form-i18n.ts, the 8218 pin, new tests and a changeset. This PR also touches field-source-label.ts (new leaf, see above) and mergeServerFields.ts, which is the producer-side copy that dropped the stamp. Both are needed for the predicate to hold on the real dashboard path.
  • Out of reach today, noted and not changed: the record widget rebuilds its key row's spec as a fresh object from keyField.label. A translated key label there would lose the stamp. No overlay covers a record key today.
  • Spec Main Shape Gate red, if it appears, is upstream objectui#10287.

Session: https://claude.ai/code/session_01D486C1axmXnrkJMNUfz2eb


Generated by Claude Code

…e label

FieldRow compared prettify(name) with the visible, possibly translated,
label, so a localized panel showed the chip beside every field and the
English panel hid it beside the same fields. The locale overlay now keeps
each field's pre-translation label under a module-private symbol, and
FieldRow judges that source label, so the chip answers alike in every
locale. mergeServerFields copies shallowly so the stamp survives, and the
sectioned row schema's title takes the source label rather than the
translation. The #8218 chip pin is rewritten with its reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D486C1axmXnrkJMNUfz2eb
…free leaf

SchemaForm read the stamp through metadata-form-i18n, which pulled
@objectstack/spec/system into SchemaForm's static import closure for one
symbol. The symbol, its writer and its reader now live in
field-source-label.ts, which imports nothing at runtime.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D486C1axmXnrkJMNUfz2eb
@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 3 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/6247-option-visiblewhen-metadata-admin.md

  • names SchemaForm.tsx → packages/app-shell/src/views/metadata-admin/SchemaForm.tsx — edited by this change

    Three consuming controls now filter, and each has a pin asserting an option absent on a false predicate: the builtin Select in SchemaForm.tsx, MultiSelectWidget, and colorPaletteOptions → ColorSwatchGroupWidget. Asserting absence is the whole of the test design — this evaluator fails OPEN, so "the option is shown" is equally the outcome of predicate-true, predicate-never-arrived and predicate-faulted, and a positive-only pin passes against the unfixed renderer.

.changeset/console-form-container-specs-one-declaration-5596.md

  • names SchemaForm.tsx → packages/app-shell/src/views/metadata-admin/SchemaForm.tsx — edited by this change

    objectui#5542 converged the LEAF of this contract — the field spec — and left the two containers above it untouched, because converging them was a bigger call than a mechanical import. FormSectionSpec and FormViewSpec were each hand-declared twice under the same names, once in packages/app-shell's SchemaForm.tsx and once in apps/console's FormPage.tsx. Unlike the leaf — whose console copy was a clean subset — these two had already drifted, in both directions, so neither copy was a subset of the other and there were two live answers to "what may an author write":

.changeset/formfieldspec-dependson-5040.md

  • names SchemaForm.tsx → packages/app-shell/src/views/metadata-admin/SchemaForm.tsx — edited by this change

    No runtime behaviour changes: MetadataField already handed dependsOn through and both widgets already read it. What changes is the type face — it now admits what the runtime has always accepted. The two descriptions are one declaration, extracted to a leaf module (views/metadata-admin/form-spec.ts) that both halves import, because SchemaForm.tsx imports ./widgets.js and a back-edge would close a cycle. SchemaForm.tsx re-exports FormFieldSpec and VisibilityPredicate, so every existing importer is unaffected.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 7a564e004 (merge-base with origin/main): 6 file(s) changed outside .changeset/, read against 1301 pending declaration(s) that publish a body (1870 pending in total). · run

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3039.5 KB 3104.5 KB
Main entry chunk (gzip) 147.8 KB 350 KB
Entry file index-CYfxDlg1.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) 16.68KB 6.20KB
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) 11.08KB 4.58KB
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) 541.66KB 129.51KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 253.41KB 64.01KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.15KB 11.05KB
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.99KB 0.87KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
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) 8.39KB 3.10KB
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) 14.81KB 3.63KB
plugin-calendar (index.js) 51.44KB 14.62KB
plugin-charts (index.js) 71.82KB 20.13KB
plugin-chatbot (index.js) 198.27KB 47.18KB
plugin-dashboard (index.js) 133.00KB 35.19KB
plugin-designer (index.js) 215.98KB 44.34KB
plugin-detail (index.js) 258.85KB 67.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 144.77KB 37.17KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 215.46KB 58.88KB
plugin-kanban (index.js) 48.83KB 15.21KB
plugin-list (index.js) 113.90KB 28.11KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.56KB 3.71KB
plugin-view (index.js) 85.18KB 21.05KB
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) 110.46KB 36.33KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
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 (expression.js) 0.20KB 0.18KB
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.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
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 (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
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

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: 75/75 CONTRACT_REVIEW_TIER
Head-sha: d35e00806432095394b27870d0ee539a719d29e6

Adopted from an isolated at-tier reviewer by domain:ui seat 3, 2026-09-24T18:05Z. The reviewer wrote a model word on the Served-tier: line; this seat corrected it to the constant's name. Tier read off the reviewer's transcript: 75 of 75 stamped requests claude-fable-5-1 = CONTRACT_REVIEW_TIER.

① Derived judgments

  • FieldRow compares prettify(name) against the untranslated source label in every locale: untranslatedFieldLabel(fieldSpec) || schema?.title || prettify(name). The reviewer measured at head: 31/31. With the three source files at base: 6 failed / 18 passed, every red zh-side, every en case green before and after (the inversion).
  • The symbol is private: the SOURCE_LABEL symbol is not exported, the leaf is not re-exported, and no .d.ts reachable from dist/index.d.ts names it.
  • mergeServerFields shallow copy is safe for all four callers (each useMemo and read-only; no writes on the merged result). FormFieldSpec has no function members.
  • No visible English regression: the sectioned row title is unset for every dashboard field, and every title reader prefers fieldSpec.label (the translation). 「列数」 renders in the zh panel.
  • The 8218 pin is rewritten with its reason, ⛔ not deleted, and now goes through the real overlay. The ruling's literal shape (chip absent beside columns, both locales) is pinned on the real dashboard form.
  • Ruling premise: 「shown for refreshInterval / "Auto refresh"」 does not hold. spec 17.4.0 authors every top-level dashboard field without a label, and the field is refreshIntervalSeconds. The rule still holds; only the example did not.
  • The changeset is true. Two PR-body figures were imprecise: base 「7 failed / 17 passed」 (reviewer: 6/18) and 「19 files … 20 now」 (reviewer: 24→25; the +1 holds). This seat has corrected both in the body, read back identical.

② Semver level

  • patch for @object-ui/app-shell: correct. Clause-②: no holds.

③ Boundary flags

  • Two files outside the claim (field-source-label.ts, mergeServerFields.ts): disclosed, and required for the predicate on the real path. Accepted.
  • Every check at head is green except Spec Main Shape Gate, the upstream drift objectui#10287.

Implemented-by: claude/issue-8231-machine-name-chip-source-label
Reviewed-by: session_01D486C1axmXnrkJMNUfz2eb

VERDICT: PASS


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3039.8 KB 3104.5 KB
Main entry chunk (gzip) 147.8 KB 350 KB
Entry file index-CW0FQcNA.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) 16.68KB 6.20KB
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) 11.08KB 4.58KB
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) 541.66KB 129.51KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 253.41KB 64.01KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.15KB 11.05KB
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.99KB 0.87KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 13.52KB 4.88KB
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) 8.39KB 3.10KB
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) 14.81KB 3.63KB
plugin-calendar (index.js) 51.44KB 14.62KB
plugin-charts (index.js) 71.82KB 20.13KB
plugin-chatbot (index.js) 198.27KB 47.18KB
plugin-dashboard (index.js) 133.00KB 35.19KB
plugin-designer (index.js) 216.12KB 44.37KB
plugin-detail (index.js) 260.44KB 67.80KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 144.77KB 37.17KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 215.46KB 58.88KB
plugin-kanban (index.js) 49.30KB 15.39KB
plugin-list (index.js) 113.90KB 28.11KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.56KB 3.71KB
plugin-view (index.js) 85.18KB 21.05KB
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) 110.46KB 36.33KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.93KB 1.49KB
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 (expression.js) 0.20KB 0.18KB
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.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
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 (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 17.15KB 6.32KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
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

@os-project-manager
os-project-manager marked this pull request as ready for review September 24, 2026 18:49
@os-project-manager
os-project-manager added this pull request to the merge queue Sep 24, 2026
Merged via the queue into main with commit 78b572f Sep 24, 2026
45 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-8231-machine-name-chip-source-label branch September 24, 2026 19:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants