Skip to content

fix(types): drop stale source-line citations from 11 published describe() strings (form/layout) - #8822

Merged
os-warren merged 1 commit into
mainfrom
claude/issue-8478-zod-pins-form-layout
Sep 9, 2026
Merged

fix(types): drop stale source-line citations from 11 published describe() strings (form/layout)#8822
os-warren merged 1 commit into
mainfrom
claude/issue-8478-zod-pins-form-layout

Conversation

@os-warren

Copy link
Copy Markdown
Collaborator

Refs #8478

What

Removes the stale NAME.ext:NNN source-line address from 11 published .describe() strings in packages/types/src/zod/form.zod.ts (9) and zod/layout.zod.ts (2), per the triage ruling on #8478 (removal itself is certain; the remaining prose is decided per-address, not forced to one disposition).

Disposition split for this slice (all 11 kept as prose, address removed — 0 needed relocating to a code comment):

  • form.zod.ts TextareaSchema.wrapperClass
  • form.zod.ts SelectSchema.wrapperClass
  • form.zod.ts CheckboxSchema.required — rewritten to state the behaviour ("sets required on the Radix Checkbox and gates the label's * marker") instead of citing two line numbers
  • form.zod.ts CheckboxSchema.wrapperClass
  • form.zod.ts SwitchSchema.wrapperClass
  • form.zod.ts FileUploadSchema.buttonText — rewritten to state the fallback text instead of the code excerpt
  • form.zod.ts FileUploadSchema.wrapperClass
  • form.zod.ts DatePickerSchema.wrapperClass
  • form.zod.ts InputShorthandSchema.wrapperClass — address already duplicated in the adjacent maintainer-facing // comment two lines above (which cites renderers/form/input.tsx:42 and is unaffected by this PR, being a code comment rather than a published description), so nothing is lost by removing it from the published surface
  • layout.zod.ts TextSchema.content
  • layout.zod.ts HtmlElementSchema.href

Text only: no accept-set, key, or shape change. Clause-②: no.

Re-derived counts (call-scoped matcher, on my own head)

Matcher: for every .describe( call in packages/types/src, extract its argument text up to the matching close-paren (so a continuation-line address is not missed), and count it if that argument contains a NAME.ext:NNN token.

On origin/main at the branch's rebase point (dcbf0b2bc, after PR #8799 merged):

file addresses
zod/form.zod.ts 9
zod/layout.zod.ts 2
zod/complex.zod.ts 6 — control, untouched by this PR
zod/overlay.zod.ts / zod/data-display.zod.ts / zod/objectql.zod.ts 0 (cleared by PR #8776)

Firing control, same run: the same matcher over every string literal in all of packages/types/src (not just .describe() calls) returns 199 — non-zero, confirming the matcher isn't broken.

After this PR: form.zod.ts and layout.zod.ts both read 0 by the call-scoped matcher; complex.zod.ts — the file this PR does not touch — still reads 6, unchanged. That non-zero, untouched control is what makes the two zeros a removal rather than a broken matcher.

Scope — complex.zod.ts deliberately excluded

The dispatch held zod/complex.zod.ts out of scope: PR #8799 was in the merge queue modifying it at claim time. That PR (dcbf0b2bc, "execute the batch #70 ruling on the kanban arm") merged mid-round, but per the dispatch's explicit instruction the exclusion stands regardless — this PR does not touch complex.zod.ts, its 6 addresses stay on the card, and the card does not close on this PR (Refs, not Fixes).

Spot-check — two more drifted addresses found

Checked all 11 addresses in scope against the files they cite (not just the requested 3–5 sample):

  • renderers/form/checkbox.tsx:45 and :49 (cited by CheckboxSchema.required) have drifted: the actual required={schema.required} site is now :48, and the actual after:content-['*'] label-marker site is now :52 — both off by exactly +3 lines.
  • renderers/basic/text.tsx:162,167 (cited by TextSchema.content) has drifted: the actual {schema.content} sites are now :165 and :170 — again off by exactly +3.
  • The other 9 addresses checked out exactly (textarea.tsx:37, select.tsx:45, checkbox.tsx:36, switch.tsx:26, file-upload.tsx:123, file-upload.tsx:78, date-picker.tsx:35, input.tsx:42) — html-elements.tsx:74 (cited by HtmlElementSchema.href) lands inside the right function (sanitizeHref, lines 73–79) but 3 lines short of the actual regex check at :77, the same +3 offset, though arguably close enough to not count as "wrong" the way the other two are.

This is further evidence for the card's own pre-committed p3-to-p2 re-grade trigger (one instance already found and recorded on the card by the previous slice: ObjectKanban.tsx:264 → actual :365). Grading is the triage seat's act, not this dev seat's — reported on the card, not acted on here.

Changeset

.changeset/8478-zod-pins-form-layout.md@object-ui/types patch, matching the previous slice's precedent for this same card.

Gates (all green on rebased head 4cc013f35, merge-base dcbf0b2bc)

  • pnpm exec vitest run packages/types/ — 160 files / 3145 tests passed
  • pnpm --filter @object-ui/types build — dist completeness OK
  • pnpm --filter @object-ui/types type-checktsc --noEmit + examples + test configs, 0 errors
  • pnpm --filter @object-ui/types lint — 0 errors (271 pre-existing no-explicit-any warnings, unrelated to this diff)
  • node scripts/check-changeset-presence.mjs — declares the changeset
  • node scripts/check-changeset-no-major.mjs
  • node scripts/check-control-bytes.mjs
  • pnpm run check:spec-symbols
  • pnpm run check:designer-field-key-parity
  • pnpm run check:handler-key-reads
  • node scripts/check-governed-queue-guard.mjs --test THE-3-CHANGED-PATHS — NOT GOVERNED

apps/console swept: no reference to the edited .describe() text found (content/docs/** doesn't embed it either — it's manually-curated prose, not generated from .describe() output).


🤖 Generated with Claude Code

https://claude.ai/code/session_01Jmxdo7bmeqCQHLSfmLVX9w


Generated by Claude Code

…be() strings

form.zod.ts (9) / layout.zod.ts (2): remove the `NAME.ext:NNN` address from each
published .describe() string (#8478). Each was either
trimmed to its author-useful sentence (the line address removed, with no loss),
or rewritten to cite the same fact by identifier/behavior instead of file:line
(e.g. "sets `required` on the Radix Checkbox and gates the label's `*` marker"
instead of "read at renderers/form/checkbox.tsx:45 ... and :49").

Two of the eleven addresses removed had already drifted by exactly +3 lines:
checkbox.tsx:45/:49 (actual sites now :48/:52) and text.tsx:162,167 (actual
sites now :165/:170). This drift evidence is reported back on the card, not
acted on here.

Text only: no accept-set, key, or shape change.

The remaining 6 addresses (zod/complex.zod.ts) are out of scope for this
commit — held by another in-flight PR at claim time — so the tracking card
does not close here; card relationship is declared once, in the PR body.

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

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3484.5 KB 3512.7 KB
Main entry chunk (gzip) 144.0 KB 350 KB
Entry file index-CWnvOgcI.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) 500.00KB 114.54KB
core (index.js) 7.48KB 2.96KB
create-plugin (index.js) 26.68KB 8.94KB
data-objectstack (index.js) 198.39KB 55.29KB
fields (index.js) 245.88KB 62.02KB
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) 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) 49.03KB 13.93KB
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) 215.51KB 44.29KB
plugin-detail (index.js) 252.45KB 65.33KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 134.25KB 33.52KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 210.67KB 57.19KB
plugin-kanban (index.js) 56.49KB 16.07KB
plugin-list (index.js) 112.73KB 27.69KB
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.55KB 3.32KB
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 (strict-authoring-face.js) 14.27KB 5.47KB
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

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