Skip to content

refactor(plugin-gantt): drop the deprecated width from the drawer default, state the navConfig comment once - #6305

Merged
os-support-ai merged 2 commits into
mainfrom
claude/issue-6259-gantt-navconfig-size-bucket
Aug 25, 2026
Merged

refactor(plugin-gantt): drop the deprecated width from the drawer default, state the navConfig comment once#6305
os-support-ai merged 2 commits into
mainfrom
claude/issue-6259-gantt-navconfig-size-bucket

Conversation

@os-support-ai

@os-support-aios-support-ai commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Fixes#6258
Fixes#6259

Two-card family dispatch on four consecutive lines of packages/plugin-gantt/src/ObjectGantt.tsx. One commit per member. Base origin/main @ 090927f4f; all evidence below at ae7898efb.


#6258 — the comment (commit 21cfe3142)

The block above navConfig repeated its own last two lines verbatim, so the text ran on into a fragment. On 090927f4f it was five lines, :1147-:1151:

1147 // Default to a right-side drawer so clicking a task opens an editable
1148 // detail panel inline (no full-page navigation). Schema can override by
1149 // providing its own `navigation` config (e.g., page mode).
1150 // detail panel inline (no full-page navigation). Schema can override by
1151 // providing its own `navigation` config (e.g., page mode).

:1147-:1149 already state the sentence completely and in order; :1150-:1151 were a byte-for-byte repeat of :1148-:1149. Removed :1150-:1151.

Judge — the sentence appears exactly once, in full, in order: PASS.
Ablation — re-inserting the duplicate pair (proved on disk: each line's count 1→2, blob 82ede3822d30b9) turns that judge red (VERDICT=FAIL, exit 1) while the gantt suite stays green. The suite is not the judge for this leg; the explicit check is.


#6259 — the deprecated width in the drawer default (commit ae7898efb)

- const navConfig = schema.navigation ?? { mode: 'drawer', width: 'min(960px, 60vw)' };+ const navConfig = schema.navigation ?? { mode: 'drawer' };

width is @deprecated [#2578 → size] in the spec that owns the shape, and resolveOverlayWidth gives an explicit width priority oversize — so while the default spelled it, a gantt declaring no navigation could never be reached by the size buckets, and the deprecated branch stayed load-bearing on the path most gantts take.

Dropping widthwithout adding size removes that branch at a measured zero-pixel change: resolveOverlayWidth returns undefined, and RecordDetailDrawer's own width default supplies the byte-identical min(960px, 60vw).

Why not size: 'lg'

The bucket is not equivalent. Measured on the real render path (gantt with no navigation, drawer opened, asserting the resolved width — not a className, not "it renders"):

viewporttoday / after this PRsize: 'lg'delta
414248.4380.9+53.3%
768460.8706.6+53.3%
1024614.4942.1+53.3%
1280768.0960.0+25.0%
1440864.0960.0+11.1%
1600960.0960.0equal
1920960.0960.0equal

The shared 960px cap is real but reached at different viewports: 1600px for min(960px, 60vw) vs 1043.5px for lg's min(92vw, 960px). Below the cap the two take different proportions of the viewport — 60% vs 92%; on a phone the drawer would stop being a side panel. That is a real layout change across three renderers and is not made here — it stays with the maintainer on #6259 / #6303.

The pin (new)

Nothing pinned this width before: a repo-wide search for min(960px, 60vw) returned only producers, zero assertions, and the full 402-test gantt suite stayed identically green when the value was changed. Since the resolved width now comes from RecordDetailDrawer's default, a later move of that default would propagate here invisibly — so ObjectGantt.navWidthDefault.test.tsx pins both halves, which fail for different reasons:

halfassertsred when
1the gantt hands the drawer no width of its ownthe gantt re-injects a width
2the real drawer then resolves to min(960px, 60vw)the drawer's own default moves

Ablation, both directions, each proved on disk (injected text and removed text grepped separately):

  • Mutating RecordDetailDrawer's own default (min(960px, 60vw)min(800px, 50vw), blob da15724323f315) → half 2 red, half 1 green.
  • Re-injecting the deprecated width into navConfig (blob ae81c5ce34659f) → half 1 red, half 2 green — the resolved string is identical, so half 2 cannot see it, which is precisely why half 1 exists.

Restored under trap ... EXIT INT TERM with absolute paths; git diff HEAD --stat empty and both blob hashes back to their HEAD values afterwards.

plugin-calendar, plugin-kanban, RecordDetailDrawer and their render-site ?? 'min(960px, 60vw)' fallbacks are deliberately untouched — that is #6303's surface, and #6303 is blocked behind the bucket decision.


Verification at ae7898efb

  • pnpm exec vitest run packages/plugin-gantt48 files / 404 tests passed (was 47/402; +1 file, +2 tests = the new pin)
  • turbo run type-check --filter=@object-ui/plugin-gantt --force → exit 0, 14/14 tasks (cache bypass, force executing — not a cached green). The package's type-check is tsc --noEmit && tsc -p tsconfig.test.json, so the new test file is type-checked too.
  • check-changeset-presence → ✅ "Every one of them has an EMPTY frontmatter — declared as releasing nothing"
  • check-changeset-no-major → ✅ "No changeset declares a major bump."
  • check-changeset-fixed → ✅ "All workspace packages are in the changeset fixed group."
  • check-control-bytes → ✅ "OK (scanned 5197 tracked text file(s))"
  • check-vi-mock-specifiers → ✅ OK · check-shell-escape-residue → ✅ OK
  • ESLint: repo-wide pnpm lint exceeds the container's foreground cap (exit 124, still in app-shell). Declared narrowing with its three proofs: ① CI's pnpm lint is turbo run lint, each package running eslint ., and this PR touches exactly one package; ② eslint packages/plugin-gantt --format json78 files, 0 errors (270 warnings; the 6 added by the new test are no-explicit-any, matching the neighbouring gantt tests); ③ eslint.config.js configures no type-aware linting, so no rule's verdict on an untouched file can depend on this diff. CI runs the full farm regardless.

Generated by Claude Code

The comment block above `navConfig` carried a verbatim repeat of its own
last two lines, so the text ran on into a fragment: "…providing its own
`navigation` config (e.g., page mode). detail panel inline (no full-page
navigation). Schema can override by providing its own `navigation`
config (e.g., page mode)."
The first three lines already state the sentence completely and in the
right order; the two removed lines were a byte-for-byte duplicate of the
two before them. Comment-only, no behaviour change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011SfZeFWrhGLHmfq61xbz4q
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Eager closure (gzip, 52 chunks)3222.9 KB3266.6 KB
Main entry chunk (gzip)154.1 KB350 KB
Entry fileindex-BHAA5kjr.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.96KB4.16KB
app-shell (runtime-config.js)18.10KB6.51KB
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)505.63KB114.68KB
core (index.js)5.30KB2.13KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)171.74KB47.48KB
fields (index.js)238.40KB59.89KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (fallbackInterpolation.js)6.25KB2.77KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.44KB1.39KB
i18n (pickLocalized.js)7.62KB3.26KB
i18n (provider.js)26.89KB9.04KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)33.40KB8.71KB
i18n (useSafeTranslation.js)5.60KB2.33KB
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)188.21KB44.67KB
plugin-dashboard (index.js)133.35KB34.45KB
plugin-designer (index.js)212.33KB42.81KB
plugin-detail (index.js)245.10KB62.31KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)126.92KB30.85KB
plugin-gantt (index.js)164.17KB39.89KB
plugin-grid (index.js)201.14KB54.40KB
plugin-kanban (index.js)52.83KB14.55KB
plugin-list (index.js)111.94KB27.24KB
plugin-map (index.js)20.09KB6.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)9.26KB3.13KB
plugin-view (index.js)84.55KB20.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)4.47KB1.63KB
react (SchemaRenderer.js)54.84KB18.43KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.35KB0.70KB
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)2.74KB1.41KB
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 (icon-key-migration.js)4.26KB1.63KB
types (index.js)4.49KB2.14KB
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

…efault
The renderer default was `{ mode: 'drawer', width: 'min(960px, 60vw)' }`.
`width` is `@deprecated [#2578 -> size]` in the spec that owns the shape, and
`resolveOverlayWidth` gives an explicit `width` priority OVER `size` — so
while the default spelled it, a gantt declaring no `navigation` could never be
reached by the size buckets, and the deprecated branch stayed load-bearing on
the path most gantts take.
The default is now `{ mode: 'drawer' }`. `resolveOverlayWidth` returns
`undefined` and RecordDetailDrawer's own `width` default supplies the
identical `min(960px, 60vw)`, so the resolved overlay width is unchanged on
every viewport — measured, not assumed.
Deliberately not converged on `size: 'lg'`: that bucket is `min(92vw, 960px)`,
which matches the current default only at viewport >= 1600px and is up to 53%
wider below it (+11% at 1440px, +25% at 1280px). That is a real layout change
across three renderers and stays with the maintainer.
Nothing pinned this width before — a repo-wide search returned only producers,
zero assertions, and the full 402-test gantt suite stayed green when the value
was changed. ObjectGantt.navWidthDefault.test.tsx now pins both halves: that
the gantt injects no width of its own, and that the real drawer still resolves
to the same value.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011SfZeFWrhGLHmfq61xbz4q
@os-support-aios-support-ai changed the title docs(plugin-gantt): state the navConfig comment oncerefactor(plugin-gantt): drop the deprecated width from the drawer default, state the navConfig comment onceAug 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Eager closure (gzip, 52 chunks)3222.9 KB3266.6 KB
Main entry chunk (gzip)154.1 KB350 KB
Entry fileindex-w4HS6mdi.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.96KB4.16KB
app-shell (runtime-config.js)18.10KB6.51KB
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)505.63KB114.68KB
core (index.js)5.30KB2.13KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)171.74KB47.48KB
fields (index.js)238.40KB59.89KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (fallbackInterpolation.js)6.25KB2.77KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.44KB1.39KB
i18n (pickLocalized.js)7.62KB3.26KB
i18n (provider.js)26.89KB9.04KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)33.40KB8.71KB
i18n (useSafeTranslation.js)5.60KB2.33KB
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)188.21KB44.67KB
plugin-dashboard (index.js)133.35KB34.45KB
plugin-designer (index.js)212.33KB42.81KB
plugin-detail (index.js)245.10KB62.31KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)126.92KB30.85KB
plugin-gantt (index.js)164.14KB39.87KB
plugin-grid (index.js)201.14KB54.40KB
plugin-kanban (index.js)52.83KB14.55KB
plugin-list (index.js)111.94KB27.24KB
plugin-map (index.js)20.09KB6.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)9.26KB3.13KB
plugin-view (index.js)84.55KB20.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)4.47KB1.63KB
react (SchemaRenderer.js)54.84KB18.43KB
react (data-invalidation.js)5.05KB2.08KB
react (index.js)1.35KB0.70KB
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)2.74KB1.41KB
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 (icon-key-migration.js)4.26KB1.63KB
types (index.js)4.49KB2.14KB
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-support-ai
os-support-ai marked this pull request as ready for review August 25, 2026 12:39
@os-support-ai
os-support-ai added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit 67c5d1eAug 25, 2026
28 checks passed
@os-support-ai
os-support-ai deleted the claude/issue-6259-gantt-navconfig-size-bucket branch August 25, 2026 13:06
os-support-ai pushed a commit that referenced this pull request Aug 26, 2026
…dth as a renderer default
`min(960px, 60vw)` was a house default duplicated across the record-navigation
drawers of three renderers. #6305 converged ObjectGantt only; kanban and
calendar still carried the old shape at two sites each — the `navConfig`
default and a render-site `?? 'min(960px, 60vw)'` fallback, the second of which
would have kept the old width alive had only the first been taken.
`width` is `@deprecated [#2578 -> size]` and `resolveOverlayWidth` gives an
explicit `width` priority OVER `size`, so spelling it kept the deprecated
branch load-bearing on the path most boards and calendars take (no declared
`navigation`) and made the size buckets unreachable there. Omitting both leaves
`resolveOverlayWidth` returning `undefined`, which is what RecordDetailDrawer's
own `width` default is for; that default is the identical `min(960px, 60vw)`,
so this is a zero-pixel change on every viewport.
Not converged on `size: 'lg'`: that bucket is `min(92vw, 960px)`, up to 53%
wider below a 1600px viewport. That move is a real behaviour change and stays
open for a human ruling.
Pinned by ObjectKanban.navWidthDefault.test.tsx and
ObjectCalendar.navWidthDefault.test.tsx, both halves each, because the
equivalence now depends on the drawer's own default too.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011SfZeFWrhGLHmfq61xbz4q
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

2 participants

@os-support-ai@claude