Observation recorded while implementing #5160, deliberately not acted on there. Filing it so the trade is decided rather than taken silently.
The state after #5160
packages/components/README.md went from 5 diagnostics to 1:
packages/components/README.md:183:4 TS2304: Cannot find name 'Outlet'.
Its UNGATED_DOCS entry is now just 1 undefined-name diagnostic(s) — ….
That one block is a router-layout excerpt showing where the notification surfaces mount:
import{NotificationBanners,NotificationAlerts}from'@object-ui/components';<main><NotificationBanners/><Outlet/><NotificationAlerts/></main>Outlet is react-router's, supplied by the host. That is precisely the case scripts/check-doc-snippet-types.mjs names in its own header as a legitimate declared fragment — "a call into the host's own router". Marking it with the documented marker
<!-- doc-snippet: fragment — the host supplies react-router's Outlet -->
would take the document to zero, let its UNGATED_DOCS entry be deleted, and put every other ts/tsx block in this published README under the gate permanently. The ratchet would actually move, which no other document in the #5160 set can currently do.
Why #5160 did not just do it
Covering the document grows the gate's build filter. node scripts/check-doc-snippet-types.mjs --build-filter derives its turbo filters from what the covered documents import, and this README imports @object-ui/components — which is not in the filter today and is not reachable from anything that is (@object-ui/react does not depend on it; the dependency runs the other way). So covering it adds @object-ui/components plus @object-ui/i18n, @object-ui/react-runtime, @object-ui/sdui-parser to every gate run.
Measured on main + #5160, the filter is unchanged at 11 packages:
--filter=@object-ui/cli --filter=@object-ui/core --filter=@object-ui/data-objectstack
--filter=@object-ui/plugin-charts --filter=@object-ui/plugin-editor --filter=@object-ui/plugin-grid
--filter=@object-ui/plugin-markdown --filter=@object-ui/plugin-timeline --filter=@object-ui/plugin-view
--filter=@object-ui/react --filter=@object-ui/types
Per-PR build cost is exactly what the 2026-08-16 ruling on #4846 constrained, and the gate's own header calls the scoped build the reason --build-filter exists. Growing it is a cost decision, not a mechanical edit — so it was left to a maintainer instead of being taken as a rider on a documentation card.
The decision
- A. Declare the fragment, delete the ledger entry, accept
@object-ui/components in the filter. One published README moves from unverified to gated. - B. Leave it ungated. Zero CI cost; the README's other blocks stay unverified, and nothing stops the next
registerDefaultRenderers-shaped fabrication landing in it.
The same question will recur for every other near-zero document, so a stated rule ("cover it when it reaches zero, cost accepted" vs "cover it only when the package is already in the filter") is worth more than this one answer.
Related
Observation recorded while implementing #5160, deliberately not acted on there. Filing it so the trade is decided rather than taken silently.
The state after #5160
packages/components/README.mdwent from 5 diagnostics to 1:Its
UNGATED_DOCSentry is now just1 undefined-name diagnostic(s) — ….That one block is a router-layout excerpt showing where the notification surfaces mount:
Outletis react-router's, supplied by the host. That is precisely the casescripts/check-doc-snippet-types.mjsnames in its own header as a legitimate declared fragment — "a call into the host's own router". Marking it with the documented markerwould take the document to zero, let its
UNGATED_DOCSentry be deleted, and put every otherts/tsxblock in this published README under the gate permanently. The ratchet would actually move, which no other document in the #5160 set can currently do.Why #5160 did not just do it
Covering the document grows the gate's build filter.
node scripts/check-doc-snippet-types.mjs --build-filterderives its turbo filters from what the covered documents import, and this README imports@object-ui/components— which is not in the filter today and is not reachable from anything that is (@object-ui/reactdoes not depend on it; the dependency runs the other way). So covering it adds@object-ui/componentsplus@object-ui/i18n,@object-ui/react-runtime,@object-ui/sdui-parserto every gate run.Measured on
main+ #5160, the filter is unchanged at 11 packages:Per-PR build cost is exactly what the 2026-08-16 ruling on #4846 constrained, and the gate's own header calls the scoped build the reason
--build-filterexists. Growing it is a cost decision, not a mechanical edit — so it was left to a maintainer instead of being taken as a rider on a documentation card.The decision
@object-ui/componentsin the filter. One published README moves from unverified to gated.registerDefaultRenderers-shaped fabrication landing in it.The same question will recur for every other near-zero document, so a stated rule ("cover it when it reaches zero, cost accepted" vs "cover it only when the package is already in the filter") is worth more than this one answer.
Related