Skip to content

fix(plugin-detail): the inline date editor marks an impossible stored day instead of blanking it (objectui#10625) - #10648

Merged
objectstack-fleet[bot] merged 6 commits into
mainfrom
claude/issue-10625-inline-date-impossible-day
Sep 25, 2026
Merged

objectstack-fleet[bot] merged 6 commits into
mainfrom
claude/issue-10625-inline-date-impossible-day

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #10625 (the plugin-detail half). The data-table half is NOT in this PR: it is a dependency-graph fork that needs a PM or maintainer decision, described below. #10625 remains open for it.

What changed

InlineFieldInput's date branch (for date AND datetime fields) now renders @object-ui/fields' public DateField widget instead of a hand-rolled input type=date. DateField already answers a stored day that does not exist the objectui#10026 direction A way, since objectui#10567 (PR objectui#10618): the control is handed an empty value, marked aria-invalid, and its aria-describedby points at a notice naming the stored string. The judgement is isImpossibleStoredDay and the notice key is fields.date.impossibleDay, both reused through the widget. There is no second predicate and no new export.

  • Read side: toDateInputValue. A leading YYYY-MM-DD passes through verbatim, so an ISO timestamp is still sliced to its date, as before. A non-string value goes through local calendar getters, which gives the same day the old toLocaleDateString('en-CA') gave.
  • Write side stays this editor's own. The widget hands back the control's YYYY-MM-DD, which is re-emitted as full ISO at local midnight, exactly as before. It emits only on a user edit, never on mount.
  • The raw-text fallback below the date branch lost only its isDate ternaries. Its behaviour is unchanged.
  • Visible side effect (acceptance note): the date control is now the shadcn Input (the form's control) rather than the plain bordered input. On click it opens the native picker (openNativePicker), and it carries an explicit aria-invalid="false" when valid, as every fields widget does.

Reach measurement for the data table (measured before any edit)

Setup: the registered data-table renderer, editable: true, one column type: date and one type: datetime, onCellChange recording what was staged, happy-dom, TZ=UTC, origin/main 4a3d500fd. The probe was a throwaway test file, not committed.

stored control shows aria-invalid / describedby / notice committed with no edit committed after changing only the minutes
2026-02-30 (date) '' (value attribute 2026-02-30) null / null / none 2026-02-30 n/a
2026-02-30T10:00:00Z (datetime) 2026-03-02T10:00 null / null / none 2026-02-30T10:00:00Z 2026-03-02T10:05:00.000Z
2026-02-14 (date) 2026-02-14 null / null / none 2026-02-14 n/a
2026-02-14T10:00:00Z (datetime) 2026-02-14T10:00 null / null / none 2026-02-14T10:00:00Z n/a

So on a directly authored data-table the private copies do what the card says. The date copy blanks silently. The datetime copy shows the rolled day, and any user edit of the time writes the rolled day. Committing with no edit re-stages the stored string unchanged, so nothing rolls on mount or on a bare commit.

Scope of that reach: ObjectGrid (the object-view grid) injects renderCellEditor, which renders FieldEditWidget for every field type that has a widget, date and datetime included. So the object grid never reaches these private copies, and it already gets the repaired DateField / DateTimeField. The copies are reached by a schema-authored data-table node with editable: true and a date / datetime column, and by an ObjectGrid column that has no matching field definition.

The data-table fork (not implemented; PM decision needed)

The ruling says to replace the private toDateInputValue / toDateTimeInputValue copies in packages/components/src/renderers/complex/data-table.tsx with the shared @object-ui/fields adapters. That import cannot exist. @object-ui/fields declares @object-ui/components as a dependency, and 55 files under packages/fields/src import from it, so components importing fields is a package cycle. AGENTS.md section 3 also places components below fields (Atoms, then Fields). Per the dispatch, the work stopped there. Options are in the report on the card.

Red, then green

  • Red, on the first commit 61f0c0727 against the unfixed editor: pnpm exec vitest run packages/plugin-detail/src/__tests__/InlineFieldInput.impossibleDay-10625.test.tsx gives Tests 2 failed | 2 passed (4). Both impossible-day cases fail with AssertionError: expected null to be 'true' on aria-invalid. The control value was already empty (the silent blank). The real-day and no-emit pins pass.
  • Green on merged head 1e1a2cc14: the same file plus InlineFieldInput.test.tsx, InlineFieldInput.delegation.test.tsx and inlineEditTypeCoverage.test.tsx give Test Files 4 passed (4), Tests 117 passed (117).

Gates

  • pnpm --filter @object-ui/plugin-detail test: Test Files 212 passed | 1 skipped (213), Tests 2082 passed | 8 skipped (2090). This ran on the fix commit, before the merge of origin/main. The merge touched none of plugin-detail, fields, core, components or i18n.
  • pnpm --filter @object-ui/plugin-detail type-check: exit 0, after building the @object-ui/plugin-detail^... dependency closure with turbo.
  • pnpm --filter @object-ui/plugin-detail lint: exit 0, 0 errors.
  • check:changeset-claims, check:pending-changeset-literals, check:new-line-citations (0 new), check:control-bytes, check:i18n-keys, scripts/check-changeset-presence.mjs and scripts/check-changeset-no-major.mjs: all exit 0.
  • No i18n key was added, so no locale-completeness run was owed.
  • Repo-wide pnpm lint / pnpm test are left to CI.

Session https://claude.ai/code/session_01D486C1axmXnrkJMNUfz2eb, seat domain:ui#3.


Generated by Claude Code

…impossible day (objectui#10625)

Red against the unfixed editor: a stored 2026-02-30 on a date field, and
2026-02-30T10:00:00Z on a datetime field, render an empty input type=date
with aria-invalid null and no notice. The real-day and no-emit pins pass.

Co-Authored-By: Claude <noreply@anthropic.com>
… day instead of blanking it (objectui#10625)

InlineFieldInput's date branch (date and datetime fields) now routes to
@object-ui/fields' DateField, the editor objectui#10567 already fixed: a
stored nonexistent day (2026-02-30, or 2026-02-30T10:00:00Z on a datetime
field) opens an empty control marked aria-invalid, described by a notice
naming the stored string (isImpossibleStoredDay + fields.date.impossibleDay).
No second predicate. The write side keeps this editor's own shape: the
picked YYYY-MM-DD is re-emitted as full ISO at local midnight, on user edit
only.

The data-table half of the card is not in this commit: @object-ui/components
cannot depend on @object-ui/fields (fields already depends on components).

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3051.3 KB 3104.5 KB
Main entry chunk (gzip) 147.9 KB 350 KB
Entry file index-fOaHvbic.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.57KB 6.15KB
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) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.17KB 10.58KB
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.39KB 1.21KB
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.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
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) 27.13KB 7.95KB
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) 546.99KB 130.83KB
core (index.js) 9.22KB 3.71KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.91KB 62.28KB
fields (index.js) 260.06KB 65.86KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
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.33KB 3.07KB
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) 16.01KB 3.93KB
plugin-calendar (index.js) 51.49KB 14.64KB
plugin-charts (index.js) 74.94KB 20.89KB
plugin-chatbot (index.js) 198.36KB 47.20KB
plugin-dashboard (index.js) 133.60KB 35.41KB
plugin-designer (index.js) 216.25KB 44.39KB
plugin-detail (index.js) 232.85KB 61.58KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 152.20KB 39.05KB
plugin-gantt (index.js) 169.64KB 41.91KB
plugin-grid (index.js) 215.37KB 58.92KB
plugin-kanban (index.js) 48.35KB 15.08KB
plugin-list (index.js) 114.58KB 28.31KB
plugin-map (index.js) 22.42KB 7.38KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.67KB 8.95KB
plugin-tree (index.js) 10.52KB 3.69KB
plugin-view (index.js) 87.84KB 21.96KB
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) 116.21KB 38.14KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
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) 2.52KB 1.31KB
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

✅ ACCEPTED — PR objectui#10648 at 1e1a2cc14 (the plugin-detail half of objectui#10625)

domain:ui seat 3, session_01D486C1axmXnrkJMNUfz2eb, 2026-09-25T14:26Z.

Reviewed: the diff was read at the head.

  • InlineFieldInput's date / datetime branch now renders the public @object-ui/fields DateField. That reuses isImpossibleStoredDay and fields.date.impossibleDay in PR objectui#10618's form, with ⛔ no second predicate and no new export.
  • DateField's edit face depends only on value: toDateInputValue, then the impossible-day check. A datetime field's stored ISO is sliced to its day exactly as the old branch did.
  • The write side is unchanged: ISO at local midnight, emitted only on a user edit.
  • The raw-text fallback keeps its testid and its aria-invalid marker.

Pins:

  • RED at 61f0c0727: 2 of 4 failed, on the impossible-day aria-invalid for date and for datetime.
  • GREEN: the plugin-detail suite passes 212 files and 2082 tests.
  • On the merged head, the pin plus InlineFieldInput, delegation and inlineEditTypeCoverage pass 117/117.

Gates: these all exit 0: plugin-detail type-check (after building its dependencies), lint, the changeset presence, no-major, claims, literal and citation checks, control bytes, and check:i18n-keys. Trailers are model-free.

Part of #10625 stays. The data-table half is decided by seat answer A on the card and ships as a separate PR under a re-scoped claim. Merging this one must not close the card.

Next: ready + auto-merge once CI is green on this head.


Generated by Claude Code

…InlineFieldInput call site (objectui#10625)

The inline date branch no longer calls d.toLocaleDateString('en-CA'); it
routes to DateField. The census's DECLARED entry for that site (count 1)
now finds 0 and reds "every declared exemption matches exactly the sites
it declares", so the entry goes with the call site.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 1 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/9909-machine-locale-sweep.md

  • names machineLocaleCensus-9909.test.ts → packages/i18n/src/__tests__/machineLocaleCensus-9909.test.ts — edited by this change

    One census, repository-wide. plugin-detail's machine-locale census pin (objectui#9786) is now a single test, machineLocaleCensus-9909.test.ts in @object-ui/i18n, covering every workspace package whose manifest depends on @object-ui/i18n. It refuses any call site that passes nothing, undefined, the 'default' pseudo-tag (a subtag no locale data answers, so Intl resolves it to the machine's locale) or a hard-coded tag, unless the site is declared with its reason — for example the catch fallback for a tag Intl itself rejected, or an ISO formatter feeding ANGLE-BRACKETS(input type="date"). Each declared site is counted exactly, so deleting one without its entry is refused too. The per-package pin it replaces is deleted. The runtime tripwire that observes the argument each locale-taking call (Intl constructors, Date and Number toLocale*) actually receives moved into the private @object-ui/test-support package, and every surface above is pinned with it: the same data under two declared locales must render differently, NO locale-taking call may receive the machine's locale (nothing, undefined or 'default'), and the surface's own calls must receive the declared tag. A call carrying another declared tag, such as the 'en' of the session's UI language, is tolerated by design: only the machine's locale is the defect.

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.

Angle-bracketed names in the quoted prose above are rewritten as ANGLE-BRACKETS(name): GitHub deletes tag-shaped fragments from a stored body, and a quote that silently loses the identifier it is about is worse than a visible repair.

Compared the checked-out tree with f99f9cde7 (merge-base with origin/main): 3 file(s) changed outside .changeset/, read against 1499 pending declaration(s) that publish a body (2083 pending in total). · run

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

✅ ACCEPTED (round 2) — PR objectui#10648 at a7c1349e1

domain:ui seat 3, session_01D486C1axmXnrkJMNUfz2eb, 2026-09-25T14:35Z.

What was red. CI failed on 1e1a2cc14, in Test (shard 7/8) (and the Test rollup).

  • The failing test is machineLocaleCensus-9909: "every declared exemption matches exactly the sites it declares".
  • It reported InlineFieldInput.tsx · d.toLocaleDateString('en-CA') — declared 1, found 0.
  • The cause is this PR: it deleted that call site, and the ratchet requires the exemption to go with it.

The fix. Commit a7c1349e1 deletes exactly that one DECLARED entry: 9 lines removed, nothing else.

Evidence:

  • RED: the census reproduced 1 failed and 6 passed on 1e1a2cc14.
  • GREEN: at a7c1349e1, the census plus the seven InlineFieldInput* test files pass: 8 files, 87 tests.
  • No other test file names both InlineFieldInput and toLocaleDateString.
  • It is a new commit, not an amend, and the trailer is model-free.

Everything in the round-1 ACCEPT stands, including Part of #10625.

Next: ready + auto-merge once CI is green on this head.


Generated by Claude Code

…5 removed the InlineFieldInput en-CA exemption

The pending body said the census declares InlineFieldInput's en-CA as an
exemption and carries it forward. objectui#10625 deleted that call (the
inline date editor now renders @object-ui/fields' DateField) and the
exemption with it. Prose only; frontmatter unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
… the InlineFieldInput entry's removal (objectui#10625)

Its reason read "the same ISO-8601 formatter", pointing at the
InlineFieldInput entry removed earlier on this branch. Reworded to name
what it is on its own. Prose only: file, expression and count unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

✅ ACCEPTED (round 3) — PR objectui#10648 at b7dda301d

domain:ui seat 3, session_01D486C1axmXnrkJMNUfz2eb, 2026-09-25T14:38Z.

Two prose-only commits have gone on since round 2:

6cb663bd0 answers the changeset-claim re-read (5834175134).

  • .changeset/9786-detail-timestamps-display-locale.md said the census "declares" and "carries forward" InlineFieldInput's en-CA exemption, which this PR removes.
  • It now says the exemption was declared at the time. It adds that objectui#10625 later removed the call, because the inline date editor renders DateField now, and the exemption went with it.
  • The frontmatter is untouched.
  • 9909-machine-locale-sweep.md stays as it is: it cites an ISO formatter feeding <input type="date"> only as an example, and the GanttView task.start / task.end en-CA exemptions still exist.
  • The re-run bot comment no longer lists 9786.

b7dda301d: the GanttView task.start reason in the census said "the same ISO-8601 formatter …", pointing at the removed entry. It now reads "an ISO-8601 formatter, not a display locale: …". Count, expression and verdict are untouched. The other "same" / "above" reasons still point at entries that exist.

Gates:

  • check:changeset-claims, check:pending-changeset-literals, check:new-line-citations and check:control-bytes all exit 0.
  • The census passes 7/7.
  • Both trailers are model-free.

The rounds 1 and 2 ACCEPTs stand, including Part of #10625. The Test red on a7c1349e1 was the run cancelled when a newer commit was pushed, not a finding.

Next: ready + auto-merge once CI is green on this head.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3051.3 KB 3104.5 KB
Main entry chunk (gzip) 147.9 KB 350 KB
Entry file index-fOaHvbic.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.57KB 6.15KB
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) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.17KB 10.58KB
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.39KB 1.21KB
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.52KB 3.45KB
auth (index.js) 3.63KB 1.64KB
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) 27.13KB 7.95KB
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) 546.99KB 130.83KB
core (index.js) 9.22KB 3.71KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 223.91KB 62.28KB
fields (index.js) 260.06KB 65.86KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.24KB 2.27KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.40KB 12.91KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.28KB 11.09KB
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.33KB 3.07KB
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) 16.01KB 3.93KB
plugin-calendar (index.js) 51.49KB 14.64KB
plugin-charts (index.js) 74.94KB 20.89KB
plugin-chatbot (index.js) 198.36KB 47.20KB
plugin-dashboard (index.js) 133.60KB 35.41KB
plugin-designer (index.js) 216.25KB 44.39KB
plugin-detail (index.js) 232.85KB 61.58KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 152.20KB 39.05KB
plugin-gantt (index.js) 169.64KB 41.91KB
plugin-grid (index.js) 215.37KB 58.92KB
plugin-kanban (index.js) 48.35KB 15.08KB
plugin-list (index.js) 114.58KB 28.31KB
plugin-map (index.js) 22.42KB 7.38KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.67KB 8.95KB
plugin-tree (index.js) 10.52KB 3.69KB
plugin-view (index.js) 87.84KB 21.96KB
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) 116.21KB 38.14KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.03KB 1.86KB
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) 2.52KB 1.31KB
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
objectstack-fleet Bot marked this pull request as ready for review September 25, 2026 14:54
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 25, 2026
Merged via the queue into main with commit 8848ce4 Sep 25, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-10625-inline-date-impossible-day branch September 25, 2026 15:06
Sign up for free to 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.

1 participant