Skip to content

fix(types): declare the six spec members on record:details sections (objectui#8583, item 1) - #8601

Merged
os-warren merged 2 commits into
mainfrom
claude/issue-8583-record-details-sections-member-parity
Sep 8, 2026
Merged

os-warren merged 2 commits into
mainfrom
claude/issue-8583-record-details-sections-member-parity

Conversation

@os-warren

@os-warren os-warren commented Sep 8, 2026 •

Copy link
Copy Markdown
Collaborator

Refs #8583 (item 1: the six omitted members)

RecordDetailsComponentProps.sections[] in @object-ui/types now declares the six member keys the installed @objectstack/spec 17.3.0 RecordDetailsProps.sections[] declares and this type omitted: columns, icon, description, showBorder, defaultCollapsed, headerColor. Contract-first: the code moves to the contract. Additive only — no existing member moves; the collapsed member that item 2 of the card is about is untouched and its disposition stays on the card, so #8583 remains open after this merges.

What changed

  • packages/types/src/record-components.ts — the six members, each optional and typed as the spec's authoring surface types them (columns a number, icon/description strings, showBorder/defaultCollapsed booleans, headerColor the closed six-token vocabulary muted | muted/50 | accent | primary/10 | secondary/10 | destructive/10), each with a short docblock naming the spec key it tracks and whether the spec permits it beside group.
  • packages/types/src/__tests__/record-details-section-members-8583.test.ts — ONE new pin. Compile-time half: invariant Equal between each local member type and the spec's z.input type for a sections[] entry, four @ts-expect-error direction proofs (the instrument refuses false, never, any, and an undeclared key), the card's own repro literal { group: 'terms', columns: 2 }, and an excess-key literal that must not compile. Runtime half: the two-control probe on the installed spec (below).
  • .changeset/8583-record-details-section-members.md — @object-ui/types: minor. ⚠️ This was originally graded patch, citing objectui#8497 as precedent; a contract review at CONTRACT_REVIEW_TIER failed that grade and it was corrected in f299618. Adding six members to an exported interface of a published package is backwards-compatible new public-API surface — semver §7 MINOR — not an internal fix. The #8497 precedent is the weak one: its types move rode inside a plugin-detail runtime crash fix and was graded as that fix, never reviewed as a standalone widening. Four counter-precedents grade a standalone TypeScript-face widening minor: 7767-collapsible-trigger-union.md (which explicitly rejects the same "declaration catching up with what ships" argument), 7952-dashboard-widgets-component-arm.md, 7697, 7083. Verdicts: objectui#8583 comments 5587871554 (FAIL) and 5588057698 (PASS on the corrected head).

Zone 2 — the PM's mechanism assumptions, measured

(a) Live reader for each of the six — HOLDS. RecordDetailsRenderer (packages/plugin-detail/src/renderers/record-details.tsx) maps every authored entry as { ...s, title, showBorder: s.showBorder ?? derived, fields } — the spread carries every authored key — and DetailView passes each entry verbatim as the section prop of DetailSection (DetailView.tsx lines 1559 and 1748). DetailSection.tsx reads: section.defaultCollapsed (the initial open state), section.columns (through applyDetailAutoLayout, which honours an explicit value), section.showBorder (the flat render and the border-none variant), section.headerColor (through headerColorClass), section.icon (the SectionIcon in both header variants) and section.description (the sub-heading paragraph in both header variants). Six of six have a reader; none is declared without one.

(b) Spec member list and types re-derived from the INSTALLED spec — HOLDS, with one extra row. @objectstack/spec is installed at 17.3.0 as seen from packages/types (node_modules/.pnpm/@objectstack+spec@17.3.0_ai@7.0.65_zod@4.4.3_). The sections[] element is a strict object (catchall never) with 12 keys: name, label, columns, group, fields, hideEmpty, collapsible, showBorder, defaultCollapsed, icon, description, headerColor. Two-control probe on that call shape: a canonical section carrying all six parsed with zero issues (control A); the same section plus __objectui_8583_probe__ failed with unrecognized_keys naming exactly that key (control B). Value probes: columns is an integer 1..4 (too_big at 5, too_small at 0, invalid_type at 2.5 and at the string "2"); headerColor refuses bg-muted with invalid_value and accepts accent; the other four refuse the wrong primitive with invalid_type. Beside group: columns/showBorder/headerColor accepted, icon refused by the spec's group-reference refinement — the docblocks say which. The extra row: the spec-only set is seven, not six — hideEmpty is declared upstream at 17.3.0 (it parsed green), but it has NO reader by maintainer ruling (objectui#7129, 2026-09-01: DetailSection deliberately reads it nowhere) and is already recorded as the one deliberately-unread key in the record:details registry description; it fails Zone 2(a) and is not declared here.

(c) No parity-ledger row moves — HOLDS, measured. packages/types/src/__tests__/zod-mirror-parity.test.ts contains no RecordDetails / record-components reference (grep: 0 hits; there is no .zod.ts mirror for this file), and the real instrument agrees: the third type-check leg compiles that ledger (it is in the --listFiles output) and passed. check:spec-symbols stayed at 19 unbacked claims / 14 untriaged collisions — RecordDetailsComponentProps keeps its existing CLAIM_DEBT row, unchanged.

Validation (code measurements on 88ee0c7; f299618 differs by the one changeset line only)

  • pnpm --filter @object-ui/types build — exit 0; dist completeness: 1 package(s) complete (124 emitted files verified).
  • pnpm --filter @object-ui/types type-check (all three legs) — exit 0. Leg-3 evidence: tsc -p tsconfig.test.json --listFiles lists 149 test files, the new pin among them.
  • pnpm exec vitest run packages/types/ --maxWorkers=2 — Test Files 149 passed (149), Tests 2849 passed (2849). The pin alone: 6 passed.
  • Consumer: packages/plugin-detail tsc --noEmit (the only importer of RecordDetailsComponentProps, by grep) — exit 0.
  • Reverse verification (ablation): with the fix committed, packages/types/src/record-components.ts was reverted on disk to the branch base 3e71b26 (blob 6f29bb7, proven by git hash-object; the headerColor?: declaration anchor went 1 to 0) and leg 3 re-run: exit 2, 9 errors, all in the new pin, 0 elsewhere — TS2339 on each of the six member reads, TS2353 on both literals. Restored with git checkout HEAD -- path; disk blob 6a26170 equals the HEAD blob, git diff HEAD empty. The contract reviewer reproduced this ablation independently. ⚠️ A first attempt was a no-op by its own anchor (it counted every headerColor occurrence, and the base file already mentions the word once in the group docblock, so the script refused to run); the anchor was corrected to the declaration line and the run above is the one that counts.
  • ESLint on the two edited TS files — 0 errors (2 pre-existing-class no-explicit-any warnings, one on an untouched line).
  • Gates derived from package.json check:* and every .github/workflows/*.yml run: line, exit code captured before any pipe — all exit 0: control-bytes, changeset-presence, changeset-no-major, changeset-overwrite, changeset-fixed, shell-escape-residue, phantom-deps, self-import, published-tsconfig-exclude, vi-mock-specifiers, vi-mock-inherit, readme-exports (after the tree was built; the first run was a prerequisite-not-met, not a measurement), unreferenced-sources, handler-key-reads, designer-field-key-parity, icon-record-names, side-effects-array, element-data-source-declaration, action-forward-parity, doc-example-readers, comment-mask-corpus, action-ref-convention, spec-symbols, esm-specifiers, governed-queue-guard --test (NOT GOVERNED).
  • NOT MEASURED locally, declared to CI: check:published-dist (a release-time/nightly gate by ruling objectui#4846; the reviewer measured its criterion on the types tarball — 128 files, 0 tooling paths, no dist/__tests__), check:dist-completeness --all, repo-wide pnpm lint, pnpm check, the doc-* gates and type-check for packages other than types and plugin-detail. ⚠️ Correction of record: pnpm check is run by CI — .github/workflows/lint.yml:481, step "Verify the CLI's own check command passes on this repository"; the Lint job log on f299618 shows it executing and passing (Analyzing 627 files... ✓ All checks passed). A contrary claim in the first review verdict was falsified and is corrected at objectui#8583 comment 5587960301.

验收备注

  • noted, not filed: packages/types/src/__tests__/p1-spec-alignment.test.ts lines 525-532 describe the pre-fix state ({ group: 'terms', columns: 2 } does NOT compile) and name this card as the follow-up; the sentence is now dated by this PR. Outside the dispatched file surface (record-components.ts plus one new pin), so left as is. 承接者: the seat that lands item 2 of this card, which touches the same interface.
  • FILED by the seat from the reviewer's findings: objectui#8603 — the objectui#7129 hideEmpty retirement was ruled on the premise that the spec refuses the key, and the pin moved to 17.3.0 six days later, where it is declared with a describe() promising the behaviour this repo removed. objectui#8604 — the top-level RecordDetailsComponentProps.columns is number while the spec declares z.enum(['1','2','3','4']), so { columns: 2 } type-checks here and is refused at publish. ⚠️ Note the asymmetry: sections[].columns really is number and this PR is correct on it.
  • observation for the collapsed remainder (not acted on, not annotated): on the record:details render path (RecordDetailsRenderer → DetailView → DetailSection) nothing reads a section's collapsed; DetailSection seeds its open state from defaultCollapsed only, and the installed spec answers unrecognized_keys naming collapsed. A repo-wide census of other readers was not run, and that gap belongs in the decision block for item 2.

Dispatch and identity: the PM claim comment on the card, session session_01Jmxdo7bmeqCQHLSfmLVX9w, branch claude/issue-8583-record-details-sections-member-parity.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w

…objectui#8583, item 1)

`RecordDetailsComponentProps.sections[]` omitted six member keys the installed
`@objectstack/spec` 17.3.0 `RecordDetailsProps.sections[]` declares — `columns`,
`icon`, `description`, `showBorder`, `defaultCollapsed`, `headerColor` — while
`RecordDetailsRenderer` spread every authored section through to `DetailSection`,
which reads all six. A spec-valid section such as `{ group: 'terms', columns: 2 }`
rendered correctly and was refused by `tsc` alone.

The six now carry the spec's authoring types, all optional. Pinned compile-time
(reached by the package's `tsc -p tsconfig.test.json` leg) and at runtime by a
two-control probe on the installed spec: a canonical section carrying all six
parses with no issues, and the same section plus an undeclared key draws
`unrecognized_keys` naming exactly that key.

Additive only; no existing member moves.

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

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3476.3 KB 3512.7 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-D0mlV0GC.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) 15.67KB 5.75KB
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) 498.93KB 114.12KB
core (index.js) 7.48KB 2.96KB
create-plugin (index.js) 10.12KB 3.28KB
data-objectstack (index.js) 192.72KB 53.55KB
fields (index.js) 243.69KB 61.54KB
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) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
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) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
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) 5.12KB 1.74KB
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) 15.16KB 3.68KB
plugin-calendar (index.js) 49.00KB 13.91KB
plugin-charts (index.js) 71.39KB 19.92KB
plugin-chatbot (index.js) 194.53KB 46.34KB
plugin-dashboard (index.js) 131.43KB 34.44KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 250.72KB 64.81KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.30KB 56.63KB
plugin-kanban (index.js) 55.44KB 15.73KB
plugin-list (index.js) 112.74KB 27.70KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.54KB 20.84KB
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) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
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) 4.73KB 2.28KB
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 (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

…(objectui#8583)

Contract review on PR #8601 (card comment 5587871554) failed the semver axis
only: six new members on an exported interface of a published type-only
package are backwards-compatible new public-API surface (semver section 7),
not an internal fix. The repository's own precedents for a standalone
TypeScript-face widening agree — 7767, 7952, 7697, 7083 all graded `minor`;
the cited #8497 `patch` rode inside a runtime crash fix and was never graded
as a widening. One line: `'@object-ui/types': patch` to `minor`. No code change.

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

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3476.3 KB 3512.7 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-CFuSIsFQ.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) 15.67KB 5.75KB
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) 498.93KB 114.12KB
core (index.js) 7.48KB 2.96KB
create-plugin (index.js) 10.12KB 3.28KB
data-objectstack (index.js) 192.72KB 53.55KB
fields (index.js) 243.74KB 61.55KB
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) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
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) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
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) 5.12KB 1.74KB
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) 15.16KB 3.68KB
plugin-calendar (index.js) 49.00KB 13.91KB
plugin-charts (index.js) 71.39KB 19.92KB
plugin-chatbot (index.js) 194.53KB 46.34KB
plugin-dashboard (index.js) 131.43KB 34.44KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 250.72KB 64.81KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.30KB 56.63KB
plugin-kanban (index.js) 55.44KB 15.73KB
plugin-list (index.js) 112.74KB 27.70KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.54KB 20.84KB
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) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
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) 4.73KB 2.28KB
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 (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-warren
os-warren marked this pull request as ready for review September 8, 2026 16:15
@os-warren
os-warren added this pull request to the merge queue Sep 8, 2026
Merged via the queue into main with commit 555b4ec Sep 8, 2026
35 checks passed
@os-warren
os-warren deleted the claude/issue-8583-record-details-sections-member-parity branch September 8, 2026 16:32
os-justin pushed a commit that referenced this pull request Sep 8, 2026
Second sync during the same run: #8601, #8607 and #8608 landed while this
branch was being re-verified. None of them touches
`packages/types/src/__tests__/zod-mirror-parity.test.ts`, so this merge is
clean; #8601 does move a DECLARATION the parity ledger reads
(`packages/types/src/record-components.ts`), which is why the branch is
re-measured on top of it rather than left behind.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YBWFb5YgMU5dw8p2VKj16S
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.

2 participants