Skip to content

docs(permissions): compile the permissions README's 7 blocks and drop its ledger entry - #8025

Merged
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-ungated-docs-batch20
Sep 6, 2026
Merged

docs(permissions): compile the permissions README's 7 blocks and drop its ledger entry#8025
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-ungated-docs-batch20

Conversation

@claude

@claude claude Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Part of #5174 — batch 20 of the UNGATED_DOCS burn-down.

packages/permissions/README.md leaves the ledger and all 7 of its ts/tsx
blocks now compile against the built types. The gate file's only change is the
two lines of that one entry.

Notation, read this first

This repository has measured that GitHub's body sanitizer deletes tag-shaped
fragments even inside backticks and fenced blocks, which is how a before/after
table can render as though nothing changed. So generic parameters and JSX
elements are spelled out in words below — "an array of RoleDefinition", "the
PermissionGuard element" — rather than in their real angle-bracket form. The
README itself carries the real spellings; this page does not.

⚠️ Concurrency

Batch 19 (PR #8017) and objectui#7692 (PR #8016) both merged while this batch
was measuring.
origin/main moved from eeda78a to 4bb33d7a4, so
origin/main was merged into this branch (merge commit 742bd5078) and every
gate, test, probe, census and reading reported below was re-run on the merged
head after a second forced rebuild. The merge was clean: batch 19's removal and
this one are two line deletions in the same object literal, on different lines,
for different documents.

No open pull request touches packages/permissions/README.md. All 8 open PRs'
file lists were read in full and their counts reconciled against each PR's own
changed_files — including PR #5400 (changeset-release/main), whose 1048-file
list was paged to exhaustion because the REST files endpoint pages at 100 and a
truncated list renders as a confident absence. The only two hits anywhere near
this diff are PR #8017 on the gate file (batch 19, since landed) and PR #5400 on
packages/permissions/CHANGELOG.md and package.json — neither is this
README.

Live E2E (informational) is red on every branch today for an upstream reason
(objectui#7990 / objectstack#16186), not because of this diff.

Ledger arithmetic

reading base 4bb33d7a4 branch 742bd5078
UNGATED_DOCS entries 18 17
covered documents 209 210
…of them holding a ts/tsx block 107 108
covered blocks 693 700
blocks to compile 535 542
declared fragments 158 158 (zero new)
semantic failures 0 0
self-imports judged (check:readme-exports) 465 478

Both rows were MEASURED, not computed: the base row is a real
pnpm check:doc-snippets run with both changed files checked out at
origin/main bytes (on-disk hashes proven equal to the origin/main blobs) and
restored afterwards under a trap.

Programmatic diff of the two UNGATED_DOCS objects — both imported as OBJECTS,
never diffed as text: removed = ['packages/permissions/README.md'],
added = [], reason-changed = [], key order preserved for survivors = true,
survivors = 18 at the pre-merge pair and 17 at the post-merge one.
git diff --numstat on the gate file is exactly 0 2. On the branch:
permissions entries 0, packages/NAME/README.md entries 16 (from 17),
control 'packages/auth/README.md' 1.

The strictness region — the Fence scanning banner line to EOF, 1178 lines on
both sides — hashes to
f46b5662ba336f026bca3a0003e0b7979789d48d0291fa5760be7d23c8ed0160 on
origin/main and on the branch. Re-measured here rather than inherited, on both
the pre-merge pair and the post-merge one; it is the value batches 15 to 19
recorded, as it must be with nothing landing in the region since.

Census and the rung that decided

Re-taken on this branch's base through the gate's exported analyze() /
compileSnippets() over every non-excluded ledger candidate — first on the
original base eeda78a (19 entries, 15 candidates), then again on the
post-merge base 4bb33d7a4 (18 entries, 15 candidates). Both runs give the
same table and the same pick.
The three rung-1 contenders were additionally
re-measured one at a time, each in its own program, so the pick does not rest on
a single combined run.

Rung 1 (larger measured debt: blocks, then diagnostics) DECIDES OUTRIGHT this
time: permissions ties on blocks with types and layout and is far ahead of both
on diagnostics. Rung 2 was never reached.

document blocks diagnostics distinct codes
packages/permissions/README.md 7 18 5
packages/types/README.md 7 6 3
packages/layout/README.md 7 2 1
packages/react-runtime/README.md 5 27 6
packages/plugin-list/README.md 5 8 3
packages/core/README.md 5 6 2
packages/plugin-kanban/README.md 5 6 2
packages/plugin-ai/README.md 4 8 2
packages/providers/README.md 4 8 2
packages/plugin-charts/README.md 4 6 1
packages/plugin-editor/README.md 4 6 1
packages/plugin-map/README.md 4 2 2
packages/plugin-markdown/README.md 4 2 2
packages/fields/README.md 2 3 2
packages/plugin-tree/README.md 1 3 2

Permissions' 18: TS2304x11 TS2322x4 TS2345x1 TS2353x1 TS2552x1 — zero parse
failures, zero bound failures, all 18 semantic.

The dispatch's assumption A1 is CONFIRMED on both bases: permissions is
alone on rung 1. One correction to the b19 census it was derived from, reported
rather than smoothed: permissions reads 5 distinct codes here, not 4, and
packages/layout/README.md reads 2 diagnostics, not 3 — layout's third is a
BOUND failure (a specifier that resolves only through the root manifest), which
is counted as a refusal rather than a diagnostic by this census. Neither moves
the pick, and rung 2 is not reached either way. The TS2304 / TS2552 split inside
permissions' 12 undefined-name diagnostics also moves with which other documents
share the program (11 + 1 in the combined run, 8 + 4 in the isolated one) — the
total is 18 in every run, which is what the rungs read.

Exclusions re-verified against GitHub on this base, not inherited: the root
README.md is not a packages/NAME/README.md; packages/auth/README.md is
held by open draft PR #7685 (67 paths, read again here);
packages/collaboration/README.md was batch 19's and has now landed, so it is
out of the ledger entirely rather than merely reserved;
packages/plugin-chatbot/README.md is deferred by an earlier ruling on the
card.

A4 is CONFIRMED: the gate reads README bytes from the working tree and
compiles against BUILT types, so the forced package build came first, twice —
once on eeda78a and again after the merge.

What the 18 diagnostics were, and what each repair did

SEVEN of them were real drift — the README taught an API this package has
never shipped
— and the rest were continuation-fragment shape. Every
replacement was checked against packages/permissions/dist/*.d.ts after the
forced build.

block was now
Quick Start (fence 26) four defects at once: roles given bare strings where the prop takes an array of RoleDefinition; permissions given an object map keyed by object name where the prop takes an array of ObjectPermissionConfig; the required userRoles prop absent; the PermissionGuard element given a resource prop the component does not declare and a JSX-valued fallback; and can('delete', 'orders') — action first real RoleDefinition and ObjectPermissionConfig values built in the block, userRoles supplied, the guard written object="orders" action="create" fallback="custom" with the node moved to fallbackContent, and can('orders', 'delete') — the declared (object, action) order
PermissionProvider API (fence 63) ambient PermissionProvider, permissionMap and App real self-import, declare const placeholders typed to the shipped surface, a local App, and the element bound to a name with no re-indentation
usePermissions API (fence 73) ambient usePermissions; doc lie underneath it: can('update', 'orders') is the reverse of the declared arity real self-import inside a component, and both helpers called (object, action); cannot is now exercised rather than only destructured
useFieldPermissions API (fence 85) doc lie: called with TWO arguments, and destructured for isVisible / isEditable, neither of which the hook returns real self-import; called with the object name alone — the declared arity — destructuring the canRead / canWrite predicates it really returns, with isVisible / isEditable derived from them so the reader's mental model survives
PermissionGuard API (fence 93) bare top-level JSX, PermissionGuard and DeleteButton both undefined, plus the same resource / JSX-fallback lie as the Quick Start real self-import, a local DeleteButton, object / fallback="custom" / fallbackContent, and the element bound to a name with no re-indentation
evaluatePermission API (fence 103) doc lie: a resource key the params type does not declare, no object, no userRoles, no user (all three required), and roles as bare strings real self-import, placeholders typed to the shipped surface, and the four required keys supplied under their declared spellings
createPermissionStore API (fence 118) ambient createPermissionStore and permissionConfig; doc lie in the trailing comment: store.check(...) was annotated // true | false and called action-first real self-import, a config object with the three required keys, check('orders', 'read') — the declared (object, action) — and the comment corrected to the PermissionCheckResult it really returns

Every one of these seven contradictions is between the README and the SHIPPED
type of the same package, so each is corrected in the README, per this card's
standing ruling. One contradiction between two SHIPPED surfaces was found and
is NOT decided here
: PermissionGuardConfig in @object-ui/types is
published authoring surface with zero consumers whose fallback union carries a
redirect member the shipped PermissionGuard cannot honour — filed as
objectui#8024, unassigned, exactly as batch 18 filed objectui#8008.

No packages/** source touched, no public type widened, no lenient alias added,
no gate loosened, and no new fragment marker — declared fragments stay at
158, so all 7 blocks earn their coverage by COMPILING.

Probes — one base measurement and seven probes, each predicted in writing first

Predictions were written to the scratchpad (5174-b20-PREDICTIONS.md, md5
d1f65b78872f0f3357c8647b2b249d85) at commit 9a6529d80 with a clean tree,
before any leg ran. Every mutation is proven on disk by occurrence counts of
BOTH the injected and the deleted text plus git hash-object against the HEAD
blob; every restore is git checkout HEAD -- ABSOLUTE_PATH, never a bare
checkout, proven by an empty git diff HEAD; every leg runs under a trap with
absolute paths. No rebuild is owed on any leg, and that was reasoned rather than
assumed: the gate reads the mutated bytes straight from the working tree and no
leg touches dist/. All eight legs were run twice — once before the merge and
again on the merged head — with identical results; the numbers below are the
merged-head run.

probe prediction observed
M0 — both files at base bytes exit 0, 209 covered … 18 ungated, 693 — 535 to compile, 535 of 535 judged, 0 failed exactly that
P1 — restore the ledger entry ONLY, keep the repaired README exit 0 and coverage falls silently back to M0's numbers exit 0; 209 covered (107 …), 18 ungated, 693 — 535 to compile, 535 of 535 judged, 0 failed. The entry is what suppressed the verification. The restored gate file hashed byte-identical to the origin/main blob
P2 — retype a placeholder this diff added: roleDefinitions from an array of RoleDefinition to an array of number, aimed BY LINE so the two sibling blocks keep their own declarations exit 1, exactly one TS2322 at that element exit 1, 542 of 542 judged, 1 failed, README.md:97:23 TS2322: Type 'number[]' is not assignable to type 'RoleDefinition[]' — exactly one, siblings green
P3 — base README bytes with the ledger removal KEPT exit 1 and all 18 original diagnostics at their pre-repair sites exit 1, all 18, every code and every site as predicted; 7 blocks failed
P4 — fabricate a self-import name this diff added (PermissionGuardNope) check:readme-exports control green first, then exit 1 with 1 fabricated control 478 real, 0 wrong-path, 0 fabricated; mutated exit 1, 477 real, 0 wrong-path, 1 fabricated, naming packages/permissions/README.md:147
P5 — put ONE doc lie back: can('orders', 'delete') to can('delete', 'orders') exit 1, one TS2345 exit 1, 1 failed, README.md:66:22 TS2345: Argument of type '"orders"' is not assignable to parameter of type …
P6 — put a second doc lie back: the JSX-valued fallback exit 1, one TS2322 exit 1, 1 failed, README.md:154:52 TS2322: Type 'Element' is not assignable to type '"custom" | "hide" | "disable" | undefined'
P7 — put a third doc lie back: useFieldPermissions('orders', 'discount') exit 1, one TS2554 exit 1, 1 failed, README.md:131:63 TS2554: Expected 1 arguments, but got 2

P5, P6 and P7 exist because seven of this diff's repairs are corrections of the
documented API rather than fragment plumbing: they show the gate reds on each
lie individually, so the repair is load-bearing and not cosmetic.

Gates — all at 742bd5078, clean tree, nothing pushed after

Exit codes captured by redirect-then-capture, never read through a pipe; each row
quotes the gate's own verdict line.

gate verdict
pnpm check:doc-snippets 0 — Scanned 227 document(s): 210 covered (108 of them hold a ts/tsx block), 17 ungated · Covered blocks: 700 — 542 to compile, 158 declared fragment(s) · 542 of 542 block(s) judged, 0 failed · Every covered documentation snippet compiles against the built types.
pnpm check:doc-fences 0 — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript
pnpm check:readme-exports 0 — 478 of them self-imports judged (478 real, 0 wrong-path, 0 fabricated)
pnpm check:doc-types 0 — Every documented component type is registered.
node scripts/check-doc-links.mjs 0 — Links are valid across 17 scan roots.
pnpm check:doc-example-readers 0 — OK 80 documented symbol(s), 3947 call site(s)
pnpm check:control-bytes 0 — OK (scanned 6446 tracked text file(s); skipped 85 binary); plus a manual C0/DEL scan of both changed paths with grep -naP, no hit
node scripts/check-node-esm-load.mjs --force-build 0 — Provenance leg: 37 of 37 gradable entries were built by this tree. (its three ERR_UNKNOWN_FILE_EXTENSION lines are the gate's own by-design entries)
pnpm type-check:scripts 0
node scripts/check-changeset-presence.mjs 0 — no changeset is owed (2 files changed, 0 of them published source of a released package)
check-governed-queue-guard.mjs --test (both paths) 0 — NOT GOVERNED — 2 path(s) checked against 5 governed surface(s); none matched

⚠️ check-node-esm-load.mjs failed once at the merged head and the failure is
reported rather than smoothed
, because it is exactly the hazard the dispatch
named: run without --force-build, the gate's own internal build replayed
another worktree's cached artifacts over this tree's dist/
(22 of 37 entries REFUSED … foreign, each naming
/home/user/objectui-issue-7834), and the gate said so and exited 1 rather than
grading someone else's output. Re-run with --force-build it is green at 37 of
37, and every reading in this PR was then taken again on that force-built
dist/
— the gate union above, the tests below and all eight probe legs. No
gate was weakened; the flag the gate's own message prescribes was used.

The build came first and was FORCED, both before the merge and again after it:
turbo run build --filter=./packages/* --concurrency=2 --force, 39 successful, 0 cached (3m20s and 2m49s). Forced because turbo shares one cache across every
worktree of a checkout and check-node-esm-load's provenance leg refuses
artifacts a different tree produced.

Tests: pnpm exec vitest run over every test file that reads either changed
path, derived with git grep -l on both paths and not guessed — 16 files,
re-derived after the merge and byte-identical to the pre-merge derivation,
Test Files 16 passed (16) / Tests 597 passed (597). That set includes
scripts/__tests__/check-doc-snippet-types.test.ts, which this diff's own edited
script owes, and scripts/__tests__/doc-version-claims.test.ts, which names this
README path and which a docs-only diff would otherwise reach only inside the
merge-group build. Owning package:
pnpm exec vitest run packages/permissions/Test Files 8 passed (8) / Tests 85 passed (85); pnpm --filter @object-ui/permissions type-check exit 0,
its output echoing tsc --noEmit && tsc -p tsconfig.test.json so the test
tsconfig really is included.

Lint, as a declared narrowing with its three evidence items: pnpm lint
here is turbo run lint per package, so the repository-wide sweep is CI's run.
The narrowed run over exactly this diff is
pnpm exec eslint --no-inline-config --format json on both paths — 2 entries,
0 errors; eslint's own answer for the README is File ignored because no matching configuration was supplied, so the real lint surface of this diff is
the one .mjs at 0 errors / 0 warnings. (1) The population eslint would
otherwise judge is 4356 files by its own count. (2) That run exits 1 with 93
errors and 12145 warnings, all of them in files this diff does not touch and all
pre-existing on the base — reported rather than smoothed, so nobody reads the
narrowed green as a statement about the repository. (3) eslint.config.js
declares no project / projectService / parserOptions.project (grep count
0), so type-aware linting is off and this diff cannot move the verdict on any
untouched file.

Readers of the changed paths

Derived with git grep -l for the README path and for the package name over
scripts/ and packages/, re-derived on the merged head, then run — not
assumed.

  • scripts/check-doc-snippet-types.mjs — the gate itself, which now COMPILES
    this page instead of excusing it (P1 proves the entry was what suppressed it).
  • scripts/check-doc-fence-languages.mjs (check:doc-fences) — reads every
    fence in this README; green at the final commit over 227 documents.
  • scripts/check-readme-exports.mjs — reads this README's self-imports; proven
    live by P4. This diff ADDS self-imports (465 to 478 across the repository), so
    it hands that gate more to check than it had — and that is why the seven doc
    lies survived every gate until now: six of the seven blocks imported nothing at
    all, so readme-exports had no name to judge and doc-snippets was excused by the
    ledger entry.
  • scripts/__tests__/doc-version-claims.test.ts — the only test file naming this
    README path (A3 re-derived and confirmed); green inside the 16-file run, and no
    version literal on this page moved.
  • No live test pin extracts a fence from this README. Checked, not assumed:
    git grep -l for the path across the tree returns doc-version-claims.test.ts
    alone, and packages/permissions/src/__tests__/ holds no README-reading suite
    (its 8 files are exercised in the owning-package run anyway).
  • Nothing else in the tree teaches this package's guard API in a form this diff
    could contradict: git grep for PermissionGuardConfig, redirectPath and
    fallbackComponent over packages, apps, examples, scripts, content,
    docs, skills and e2e (excluding dist/) returns declarations and barrels
    only — which is the finding filed as objectui#8024, not a reader this diff
    breaks.

This PR is a DRAFT and stays a draft: this seat does not flip ready, does not
enable auto-merge, and touches no labels or assignee.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr


Generated by Claude Code

… its ledger entry

`packages/permissions/README.md` leaves `UNGATED_DOCS` in
`scripts/check-doc-snippet-types.mjs` and all 7 of its ts/tsx blocks now
compile against the built types. The gate file's only change is the two
lines of that one entry — removals only, inside the object literal.

All 18 measured diagnostics were semantic (zero parse, zero bound). Seven
of them were real drift between the page and the SHIPPED dist types of the
same package rather than fragment shape: `PermissionProvider` taught
`roles` as bare strings, `permissions` as an object map and omitted the
required `userRoles`; `PermissionGuard` taught a `resource` prop and a
JSX-valued `fallback`; `usePermissions().can` was documented with the
action first and the object second; `useFieldPermissions` was called with
two arguments and destructured for `isVisible` / `isEditable`;
`evaluatePermission` was given `resource` with no `object`, `userRoles` or
`user`; `createPermissionStore().check` was documented action-first and
annotated as returning a boolean. Each is corrected in the README to the
package's own dist type, per the card's standing ruling.

The remaining blocks gained real self-imports and `declare const`
placeholders typed to the shipped surface, with bare JSX bound to a name
and not re-indented. No `packages/**` source touched, no public type
widened, no lenient alias added, no gate loosened, and no new fragment
marker: declared fragments stay at 158.

Part of objectui#5174

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Batch 19 (PR #8017, packages/collaboration/README.md) and objectui#7692
(PR #8016) landed while this batch was measuring. The two UNGATED_DOCS
removals are different lines of the same object literal, so the merge is
clean; every gate, test, probe and reading is re-run on the merged head.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions github-actions Bot added documentation Improvements or additions to documentation package: permissions labels Sep 6, 2026
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3186.0 KB 3191.4 KB
Main entry chunk (gzip) 143.5 KB 350 KB
Entry file index-BO0uFEv5.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) 5.13KB 2.35KB
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) 497.06KB 113.79KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 182.08KB 50.62KB
fields (index.js) 242.44KB 61.25KB
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) 4.28KB 1.75KB
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) 47.35KB 13.21KB
plugin-charts (index.js) 70.31KB 19.62KB
plugin-chatbot (index.js) 193.53KB 46.05KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 211.51KB 43.01KB
plugin-detail (index.js) 247.59KB 63.48KB
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.56KB 56.63KB
plugin-kanban (index.js) 52.30KB 14.49KB
plugin-list (index.js) 113.24KB 27.66KB
plugin-map (index.js) 20.35KB 6.77KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 29.95KB 8.67KB
plugin-tree (index.js) 9.16KB 3.18KB
plugin-view (index.js) 84.33KB 20.75KB
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) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
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) 10.35KB 3.60KB
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.74KB 1.41KB
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

Copy link
Copy Markdown
Contributor

Standing-down note — Live E2E (informational) is red on main and on every branch today: the upstream base-red anchored on #7990 (objectstack#16186). It is continue-on-error by design, never blocks the queue, and touches nothing this diff changes (one README, two lines out of the doc-snippet gate's ledger). Not this PR's to fix; no re-run requested. ACCEPTed on the card (#5174); flip and arming follow once Type Check and the four shards conclude.


Generated by Claude Code

@baozhoutao
baozhoutao marked this pull request as ready for review September 6, 2026 11:23
@baozhoutao
baozhoutao added this pull request to the merge queue Sep 6, 2026
Merged via the queue into main with commit a9e6f04 Sep 6, 2026
31 of 32 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-5174-ungated-docs-batch20 branch September 6, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation package: permissions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants