Repository navigation
refactor(components)!: retire 44 more zero-consumer entry exports - #30791
Conversation
The @object-ui/components entry stops exporting the menubar, navigation-menu, input-otp and carousel family heads (every outside hit is a homonym), the filter-builder, record-currency, record-list-face, popper-layer and sidebar-width helpers, DataLoadingState, KbdGroup and the notifications/severity module. The item parts, NativeSelect, ResizableHandleProps and useRelatedCount had no reader in the package either and are deleted. shadcn registry files under src/ui are untouched. Claude-Session: https://claude.ai/code/session_01L6bhgWd23yaWptSYazSPUo Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6bhgWd23yaWptSYazSPUo Co-authored-by: Claude <noreply@anthropic.com>
A Zod schema's describe text names both, so the ADR-0087 runtime-export-retired disposition cannot claim them. Claude-Session: https://claude.ai/code/session_01L6bhgWd23yaWptSYazSPUo Co-authored-by: Claude <noreply@anthropic.com>
…em parts left Claude-Session: https://claude.ai/code/session_01L6bhgWd23yaWptSYazSPUo Co-authored-by: Claude <noreply@anthropic.com>
|
domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL Contract-review-claim: session_01L6bhgWn6zhNa4LL7VB1rtL · head ecad190 · 2026-11-06T03:22Z |
|
domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL Contract reviewServed-tier: ① Derived judgmentsAccept-set / public-surface changes the diff implies, each judged on the tree:
② Semver level
③ Boundary flags
④ Design judgmentThe narrowing read against the published surface on Findings:
Check-runs on the head (read after every run completed): 55 check-runs, 44 Implemented-by: VERDICT: PASS |
…igration Claude-Session: https://claude.ai/code/session_01L6bhgWd23yaWptSYazSPUo Co-authored-by: Claude <noreply@anthropic.com>
|
domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL Regen-provenance: 6676114298 · The hop is prose-only: one line of |
|
domain:ui#1 · os-sales · session_01L6bhgWn6zhNa4LL7VB1rtL 维护者速读
席位核对 — ACCEPT · head e1178e9
|
Requested by Sales · project thread
Part of #25921. The umbrella stays open; this is barrel batch 7, claim 6674577823 (seat
domain:ui#1), batch amendments 6674785161 and 6674939838. Earlier batches: #30541, #30576, #30629, #30650, #30708, #30752.Clause-②: no (narrowing)
Metadata-protocol: none
维护者速读
@object-ui/components的包入口再少导出 44 个名字。其中 13 个包内也无人读,直接删除(item.tsx的 9 个子件、整个native-select.tsx、ResizableHandleProps、useRelatedCount);其余 31 个只离开入口,留在原模块供本包渲染器、筛选器和通知组件使用。@object-ui/*包、所有 schema 节点类型、筛选器和五种通知照常。custom/index.ts的 8 行export *改成具名列表,反向探针证明其余 364 个入口名一个不少。回滚即 revert 本 PR。ui/packages/components/src/custom/index.ts(具名列表,漏列即丢活名)、src/custom/item.tsx(删掉 9 个子件)、.changeset/25921-components-helpers-and-family-heads.md(迁移说明)。git grep -l -w -e ItemMedia -e NativeSelect -e notificationSeverityStyle -- ':!ui/packages/components' ':!**/CHANGELOG.md'应只命中本 PR 的 changeset。What changes
@object-ui/components, deleted (nothing inside the package read them, tests included): the item sub-partsItemMedia,ItemContent,ItemActions,ItemGroup,ItemSeparator,ItemTitle,ItemDescription,ItemHeader,ItemFooter(with the localitemMediaVariants;Itemstays);src/custom/native-select.tsxwithNativeSelectandNativeSelectProps; the type aliasResizableHandleProps; the hookuseRelatedCount(one doc line that recommended it now points atRelatedCountStore.getunderuseRelatedCountVersion()).item.tsxis listed undercustomComponentsinshadcn-components.jsonandnative-select.tsxis not listed at all, sopnpm shadcn:updaterestores neither.@object-ui/components, off the entry only (module files untouched except the deletions above; the shadcn registry files undersrc/ui/are not edited):src/ui/index.ts:MenubarMenu,MenubarItem,NavigationMenuItem,InputOTPGroup,InputOTPSeparator,CarouselItem(the batch-6 family heads, per the seat's ruling).input-otpandnavigation-menuleave the entry entirely;Menubar,CarouselandCarouselApistay (see Acceptance notes).src/custom/index.ts:export *overfilter-builder,filterRecordCurrency,kbd,navigation-overlay,view-states,mobile-dialog-contentbecomes named lists,native-selectgoes, therecord-list-facelist keeps onlyActiveListRecordProvider. Off:mountedOperatorValue,retypeFilterValue,narrowFilterValueToOptions,CURRENCY_COMPANION_SUFFIX,currencyCompanionId,currencyCompanionOf,pairedCurrencyField,KbdGroup,SIDEBAR_WIDTH_FALLBACK,SIDEBAR_WIDTH_ICON_FALLBACK,DataLoadingState,DataLoadingStateProps,isInsidePopperLayer,usePopperAwareInteractOutside,useIsActiveListRecord,useScrollActiveListRecordIntoView,ActiveListRow,listRecordIdOf. Each named list was built from the checker's export list of that module, so no name a module re-exports is lost.src/notifications/index.ts: theseverityblock goes (NOTIFICATION_ACTION_BUTTON_VARIANTS,NOTIFICATION_POSITION_CLASSES,NOTIFICATION_SEVERITY_STYLES,notificationActionVariant,notificationIcon,notificationSeverityStyle,NotificationSeverityStyle); the four surfaces read it from the module file already.renderers/overlay/menubar.tsx,renderers/basic/navigation-menu.tsx,renderers/form/input-otp.tsx,renderers/complex/carousel.tsx,renderers/complex/data-table.tsx,custom/panel-toggles.tsx,custom/navigation-overlay.tsx, the notification surfaces and the tests), so no import path changes.__tests__/empty-description-props-name-the-element-8571.test.tsxwalks every wrapper function undersrc/custom/and floors the population at 12; deleting the item parts leaves 11, so the floor is now 8 (still above the seven-memberEmptyfamily a broken walk would stop at), with the comment saying why..changeset/25921-components-helpers-and-family-heads.md: patch level,!title, BREAKING paragraph that separates the 13 deleted names from the 31 off-entry ones, FROM/TO lines for every retired name, ADR-0087 markernot-required (runtime-export-retired …)naming all 44 operands. No pending25921-*changeset is edited.Why
Card #25921 narrows
ui/packagesbarrels to names someone imports. The checker export list after this PR is exactly the base list minus these 44 (408 to 364), nothing added.Tests
Census on
origin/mainb309866 with the method of batches 1 to 6 (full per-name table with same-module controls: project fileissue-25921-seat6/census-b7.md): entry names from the TypeScript checker (getExportsOfModuleonsrc/index.ts, 408); per namegit grep -l -w -Foutside the package minus**/CHANGELOG.md,pnpm-lock.yaml,.changeset/**(tests and prose count); the package*.md,docs/,*.jsonminus its CHANGELOG; keep rule 3 by an identifier walk of the builtdist/**/*.d.tsfrom every kept export (through local declarations and reached candidates, to fixpoint) plus a source read where the d.ts inlines a type; a TS parse of every tracked source and doc file for named imports from@object-ui/components(0 for every retired name); hotcrm6961ab1(0 hits for all 44; hotcrm does not import the package, controlSelect8 files).KanbanSkeleton,FormSkeleton,ListSkeleton,KanbanSkeletonProps)Menubar,Carousel,CarouselApi)Controls (outside hits, same module as retired names):
FilterBuilder63,NavigationOverlay54,DataEmptyState30,RelatedCountStore37,NotificationSnackbar10,MobileDialogContent5,Kbd4,ResizablePanel5,ActiveListRecordProvider2,Select458,Command215.Readings at
ecad190f(branch head;origin/mainhas since moved 5 commits, none touchingui/packages/components, and a re-grep of the 44 names there outside the package answers only the six family heads' homonym files the census lists, 0 files for the other 38):Build, type-check, package tests
pnpm --filter '@object-ui/components...' build(the package and its dependency closure) on the base: VERDICT command-exit 0; components rebuilt on the final head (vite build, declarations rebuilt).pnpm --filter @object-ui/components type-check(tsc --noEmit && tsc -p tsconfig.test.json): exit 0.pnpm --filter @object-ui/components test: Test Files 477 passed, 1 skipped (478); Tests 4565 passed, 24 skipped (4589); VERDICT command-exit 0. The first run (at da20801) had 1 red,empty-description-props-name-the-element-8571.test.tsx"finds the population" (expected 11 to be ≥ 12), the consequence of deleting the item parts; re-floored in ecad190, single-file run 7/7 green, then the full run above.Reverse check over every former entry name
A temporary probe under
ui/packages/plugin-view/srcimporting ALL 408 base entry names of@object-ui/components(asimport type),tsc --noEmit -pinui/packages/plugin-viewagainst the rebuiltdist/index.d.ts: exactly 44 errors in the probe (TS230535,TS27249), and the set of names they name is identical (diffempty) to the 44 retired names; the other 364 resolve. The run's 3 other errors are unbuilt sibling packages imported byObjectView.tsx(plugin-grid,plugin-form,permissions), outside the probe. Probe deleted;git statusclean.Gates
node scripts/pm/dispatch-gates.mjs --commands: 35 derived families, each run on ecad190 with its exit code captured before any pipe, all exit 0 (pnpm --dir ui exec vitest run scripts/under the lock: Test Files 170 passed, 2 skipped (172), Tests 4970 passed, 2 skipped;check:type-check-debtafter dogfood under the lock: OK, 0 raw tsc errors).check-adr-0087-registration --base origin/mainwas red on da20801: predicate 2 (no-metadata-surface) refusedMenubarandCarousel(Zod describe strings, see Acceptance notes). Both were put back in 76d6484; green since, with all 44 operands verified.dispatch-gates --ran: 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero: all 35 recorded an exit code, none 3).node scripts/check-platform-checklist.mjs --changed-from origin/main: exit 0, 0 anchored files in the change set.Dogfood (narrowing arm)
pnpm --workspace-concurrency=2 --filter '@objectstack/dogfood^...' build && pnpm --filter @objectstack/dogfood testunderos-verify-lockon ecad190: VERDICT command-exit 0; Test Files 422 passed, 3 skipped (425); Tests 3527 passed, 41 skipped (3568); no failures.No ablation: export lines, deleted declarations nothing read, and one population floor re-measured.
Acceptance notes
MenubarandCarouselstay on the entry, against the first amendment, andCarouselApiwith them (thesetApiprop ofCarouselnames it).check-adr-0087-registration --base origin/mainrefusesruntime-export-retiredfor both under predicate 2 (no-metadata-surface):ui/packages/types/src/zod/overlay.zod.tscarries.describe('Menubar menus')andzod/complex.zod.tscarries.describe('Carousel items'), and the gate deliberately counts a string inside a Zod schema as a reference. Retiring them would need an ADR-0087 ledger entry underpackages/spec, outside the claim; the seat ruled to keep them (amendment 6674939838) and puts them back on the card's open list.KanbanSkeleton,FormSkeleton,ListSkeletonandKanbanSkeletonPropshave zero readers anywhere, but the releasedViewSkeletonretirement inui/packages/components/CHANGELOG.mdsays the other skeletons "stay exported unchanged" and gives them as its FROM/TO targets; the seat ruled them kept.Itemstays: its outside hits are the generic word (346 files, 0 named imports) and cannot be shown hit by hit to be homonyms.MenubarMenu,MenubarItem,NavigationMenuItem,InputOTPGroup,InputOTPSeparatorandCarouselItemamong the names that stay; this changeset says in its body that they leave now. That changeset is not edited (claim rule).Verification
Reviewer:
git grep -l -w -e ItemMedia -e NativeSelect -e notificationSeverityStyle -- ':!ui/packages/components' ':!**/CHANGELOG.md'answers only this PR's changeset; the CIType Check UIlane compiles every@object-ui/*consumer against the narrowed entry.Generated by Claude Code