Skip to content

docs(components): cover packages/components/README.md with the doc-snippet type gate - #6202

Merged
yinlianghui-tw merged 1 commit into
mainfrom
claude/issue-5259-cover-components-readme
Aug 25, 2026
Merged

docs(components): cover packages/components/README.md with the doc-snippet type gate#6202
yinlianghui-tw merged 1 commit into
mainfrom
claude/issue-5259-cover-components-readme

Conversation

@yinlianghui-tw

Copy link
Copy Markdown
Collaborator

Fixes#5259

Implements the 2026-08-19 maintainer ruling (「全部接受」, Option A): declare the one remaining fragment, delete the UNGATED_DOCS ledger entry, and accept the filter growth. packages/components/README.md — a README that ships to npm — moves from unverified to permanently gated.

What changed

  • packages/components/README.md: the router-layout excerpt at the notification-surfaces section carries the documented fragment marker. Outlet is react-router's, supplied by the host application — precisely the case scripts/check-doc-snippet-types.mjs names in its own header ("a call into the host's own router"). The marker spelling was taken verbatim from FRAGMENT_MARKER_EXAMPLES in the gate's source, not from the card (the card's body shows an empty fence there — GitHub's sanitizer ate it).
  • scripts/check-doc-snippet-types.mjs: the packages/components/README.md entry is deleted from UNGATED_DOCS. No other ledger entry and no gate logic touched.

Premise re-derivation — confirmed, with one correction to the cost figure

The card's "1 diagnostic" figure is from 2026-08-18. Re-derived on today's main (e9e55524e), it is exactly right, same code and same line:

[semantic] packages/components/README.md:183:4 TS2304: Cannot find name 'Outlet'.
Semantic phase: 256 of 256 block(s) judged, 1 failed.

Nothing else. No further host fragments, no real defects, nothing needing classification.

The build-filter figure, however, is stale — and the correction runs in the cheap direction. The card priced this at 11 -> 15 packages. On today's main the filter is already 20 packages, and it already contains @object-ui/components and @object-ui/i18n, put there by documents covered in the seven days since. So the measured delta of this PR is:

beforeafter
filter size2020
delta+0 packages

Both lists are byte-identical:

--filter=@object-ui/app-shell --filter=@object-ui/auth --filter=@object-ui/cli --filter=@object-ui/components --filter=@object-ui/core --filter=@object-ui/data-objectstack --filter=@object-ui/fields --filter=@object-ui/i18n --filter=@object-ui/plugin-charts --filter=@object-ui/plugin-dashboard --filter=@object-ui/plugin-detail --filter=@object-ui/plugin-editor --filter=@object-ui/plugin-form --filter=@object-ui/plugin-grid --filter=@object-ui/plugin-kanban --filter=@object-ui/plugin-markdown --filter=@object-ui/plugin-timeline --filter=@object-ui/plugin-view --filter=@object-ui/react --filter=@object-ui/types

The reason is mechanical, not a measurement artifact: this README imports only @object-ui/components, @object-ui/react and @object-ui/core, and all three are already in the filter. @object-ui/react-runtime and @object-ui/sdui-parser are absent from the emitted filter both before and after — they are transitive dependencies turbo pulls in topologically, not packages the gate emits. The ruled cost was +4; the realised cost is 0, so this lands strictly inside what the ruling priced.

Coverage is real, not cosmetic — the non-vacuity control

A zero filter delta is exactly the signature the dispatch order warns about ("a silent no-op wearing a green tick"), so coverage was proven directly instead of inferred from the filter. A fabricated export was injected into a differenttsx block of this README — the registerDefaultRenderers-shaped fabrication the card names by name — and the gate went red on it:

[semantic] packages/components/README.md:209:18 TS2305: Module '"@object-ui/components"' has no exported member 'registerDefaultRenderers'.
Semantic phase: 255 of 255 block(s) judged, 1 failed. (exit 1)

Mutation and restore were both proven on disk by anchored counts, never by an editor's exit code; the restore leg left git diff HEAD empty. That block was unverified before this PR and is verified after it, which is the whole value of the change.

Verification at a74f8d748

checkresult
check:doc-snippetsexit 0 — "Every covered documentation snippet compiles against the built types."255 of 255 block(s) judged, 0 failed; controls (resolution / sentinel / positive / undeclared) all green
check:doc-fencesexit 0
check:doc-typesexit 0
check:control-bytesexit 0 (5118 tracked text files)
check-changeset-presence.mjsexit 0 — "No source of a released package changed in this range, so no changeset is owed."
vitest run scripts/__tests__/check-doc-snippet-types.test.tsexit 0 — 30 passed

Ledger accounting moved as expected: covered blocks 367 — 255 to compile, 112 declared fragment(s) (was 256 to compile, 111 declared fragment(s)). Build was the gate's own derived filter, turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=2, exit 0.

No changeset: the repo's own presence gate reports none owed, and the README edit is an HTML comment that no reader or renderer sees.


Generated by Claude Code

Declares the router-layout excerpt as a fragment (`Outlet` is react-router's,
supplied by the host) and deletes the document's UNGATED_DOCS ledger entry, so
every ts/tsx block in this published README is compiled against the built types
from now on.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019b5UBNMtTzKbVtZZGvFuxe
@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation package: components labels Aug 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

MetricValueBudget
Eager closure (gzip, 52 chunks)3221.3 KB3990.2 KB
Main entry chunk (gzip)153.7 KB350 KB
Entry fileindex-C7xifsvv.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.38KB3.90KB
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.15KB114.53KB
core (index.js)5.30KB2.13KB
create-plugin (index.js)10.08KB3.26KB
data-objectstack (index.js)168.48KB46.47KB
fields (index.js)238.40KB59.89KB
i18n (LocalizationContext.js)1.76KB0.96KB
i18n (currency.js)1.22KB0.64KB
i18n (i18n.js)4.28KB1.75KB
i18n (index.js)3.44KB1.39KB
i18n (pickLocalized.js)7.62KB3.26KB
i18n (provider.js)23.13KB7.63KB
i18n (useDisplayLocale.js)2.85KB1.45KB
i18n (useObjectLabel.js)33.40KB8.71KB
i18n (useSafeTranslation.js)7.77KB3.13KB
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.30KB42.80KB
plugin-detail (index.js)244.14KB61.94KB
plugin-editor (index.js)2.46KB1.10KB
plugin-form (index.js)126.07KB30.78KB
plugin-gantt (index.js)164.15KB39.88KB
plugin-grid (index.js)201.05KB54.38KB
plugin-kanban (index.js)52.89KB14.59KB
plugin-list (index.js)111.86KB27.22KB
plugin-map (index.js)20.11KB6.64KB
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.57KB20.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

@yinlianghui-tw
yinlianghui-tw marked this pull request as ready for review August 25, 2026 01:29
@yinlianghui-tw
yinlianghui-tw added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit 7da7b8aAug 25, 2026
25 checks passed
@yinlianghui-tw
yinlianghui-tw deleted the claude/issue-5259-cover-components-readme branch August 25, 2026 01:40
yinlianghui-tw pushed a commit that referenced this pull request Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationpackage: components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

packages/components/README.md is one declared fragment away from leaving UNGATED_DOCS — the trade is one extra package in the gate's build filter

2 participants

@yinlianghui-tw@claude