Skip to content

docs(app-shell): record the objectui#7612 ruling where AUTHOR_SHAPE_ONLY_TYPES states its ingress condition (objectui#10150) - #10316

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-10150-author-shape-header-ruling
Sep 24, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-10150-author-shape-header-ruling

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #10150
Clause-②: no

What

The docblock above AUTHOR_SHAPE_ONLY_TYPES in the metadata-admin clientValidation ended on a plan: switch the sharing_rule edit gate on once the _diagnostics ingress is closed, and not before. That condition was met. The switch was then put to the maintainer on objectui#7612, with the condition already measured, and the ruling was option A: the edit door stays with the server. So a reader who checked the stated condition would find it met, and the header gave them no reason to stop short of switching the gate on.

The ending now records the ruling where that reader meets the condition:

  • that the ingress was closed, cited by content: objectui#7603 stripped the read decorations off the pending draft, and objectui#8181 hoisted the strip into extractDraftBody, which removes the spec's own list through the spec's stripReadDecorations;
  • that the switch was therefore put to the maintainer on objectui#7612, with a finished implementation beside it (PR objectui#10054, which was not merged);
  • the ruling: maintainer, 2026-09-20, option A, verbatim 「7612 只需要服务端校验」, with an English gloss;
  • that a closed ingress is not a reason to take sharing_rule out of the set, and that only a new ruling re-opens the question.

Kept as it was: the measurement above it (the ADR-0010 envelope family, the _diagnostics read decoration, the objectstack#5316 inversion, the measured read-path table). One sentence in it quotes the pre-strip getDraft().item assembly, and it stays verbatim. The new ending marks it as the path objectui#6982 measured, and points at ResourceEditPage.readDecorationStrip.test.tsx for the live answer instead of restating that answer (AGENTS.md #9). AUTHOR_SHAPE_ONLY_TYPES still lists sharing_rule, and no code line in the file moved.

The header also names objectui#10150 as a second place where the ruling is recorded. The reason: from this container, the objectui#7612 issue page answers 404 today (see Acceptance notes).

Premise, re-derived on origin/main (8b1f0661) before editing

  • The header ended "Turning this gate on is gated on the _diagnostics ingress being closed first … Until then a gate here would refuse legitimate author input", and the set was ['sharing_rule'].
  • The precondition is met in code. All three client.getDraft results in ResourceEditPage go through extractDraftBody(draftResp) before the { ...baseline, ...draftReal } merge. extractDraftBody in @object-ui/data-objectstack returns stripReadDecorations(body), imported from @objectstack/spec/kernel.
  • As the card warned, PR objectui#10054's shape (an empty set, and the BOTH DOORS comment) is not on main.

The pin

clientValidation.authorShapeRuling-10150.test.ts sits beside the other clientValidation tests and runs in the unit project. It is a source scan of the ONE docblock directly above const AUTHOR_SHAPE_ONLY_TYPES. The test locates that docblock and does not mask anything.

  • It requires the docblock to name objectui#7612 and extractDraftBody. These are named subjects. The ruling's wording is not pinned, because nothing parses it.
  • CONTROL: the same reader finds the measurement the header must keep (ADR-0010, _diagnostics, objectstack#5316). Its read is also bounded on both sides: the code above and the comment below are in the file but not in the block. So an empty or misplaced read cannot pass as a scan of nothing.

The pin cannot judge prose intent. A header that cites the ruling and also re-states the plan would pass. The pin's own docblock says so.

Ablation (a one-time proof, run from the committed fix at a87fe06e)

The ablation ran through objectstack's scripts/ablation-replace.mjs in WRAP mode, inside a script with its own trap restore on EXIT, INT and TERM. The mutation swapped the new ending back for the old one.

  • The anchor hit once, and its count went from 1 to 0. Blob 4181dbb6 became d7ba23ed, which is exactly the file's base blob on 8b1f0661. On-disk counts while mutated: the old plan phrase 1, objectui#7612 0, extractDraftBody 0.
  • While mutated: Tests 1 failed | 1 passed (2). The failing case was cites the ruling and the closed ingress by name, in the header itself, and the CONTROL stayed green. That is the predicted direction: red.
  • Restore: the blob is back to the HEAD blob 4181dbb6, git diff HEAD is empty, and git status is clean.

The same ablation first ran at 0a03e7ea, before the second-locus edit, with the same reading: 1 failed, 1 passed.

Verification at HEAD a87fe06e

  • The dependency closure was built first, through the shared verify lock: pnpm turbo run build --filter=@object-ui/app-shell... --concurrency=2, 29 of 29 tasks successful.
  • pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json) exits 0 through the lock. The test program includes the pin (--listFilesOnly: 1 hit).
  • The pin, every clientValidation neighbour, the cited ResourceEditPage.readDecorationStrip.test.tsx and draft-envelope.test.ts, repo-root form: Test Files 12 passed (12), Tests 166 passed (166).
  • pnpm check:control-bytes passes. pnpm check:new-line-citations reports 0 new citations over the 3 files compared, with its synthetic controls PASS. node scripts/check-changeset-presence.mjs passes, with an empty frontmatter.
  • These also exit 0 at this head: check-test-path-roots, check-hand-rolled-comment-mask (no carrier outside DEBT), check-changeset-no-major, check-pending-changeset-literals, check-type-check-coverage, check-lint-coverage, check:unreferenced-sources, check:metadata-write-doors, check-vi-mock-specifiers, and check-governed-queue-guard --test (NOT GOVERNED, 3 paths).
  • check-changeset-claims (report-only) names two pending changesets that mention clientValidation.ts. One is about LOADERS.flow and the other about the retired theme entry. This change touches neither.

Lint: narrowed, with the narrowing proven

  • Population, from ESLint's own config: both touched .ts files are linted (2 JSON entries, no ignore notice). The changeset is outside the population: File ignored because no matching configuration was supplied.
  • Count, from --format json with --no-inline-config (the CI form): 2 files, 0 errors, 0 warnings.
  • Invariance: eslint.config.js enables no type-aware linting (0 hits for projectService or parserOptions; control: 13 hits for rules). No local rule under eslint-rules/ reads the filesystem (0 of 10 files; control: 9 of them carry create). So this diff cannot move a verdict on any untouched file.

Changeset: empty frontmatter, measured

The presence gate requires a changeset, because published src changed. It is declared as releasing nothing, based on a measurement of the emit:

  • The emitted clientValidation.d.ts has 0 hits for AUTHOR_SHAPE_ONLY_TYPES and 0 for objectui#7612. Control: the exported hasClientValidator and its docblock, 1 hit each. Re-measured at a87fe06e with a declaration-only emit, with the same reading.
  • The emitted .js carries the comment. With comments stripped, the TypeScript emit of the file is byte-identical between base and HEAD.
  • The pin is not emitted.

Acceptance notes

  • Out of scope and untouched, as the claim declares: clientValidation.optOuts.test.ts carries the same pre-strip account in two docblocks. The case headed "THE LOAD-BEARING PIN" says ResourceEditPage assembles its draft from client.getDraft().item "and strips nothing". The block above it calls the decoration pin the one that says "WHY the door must stay shut". Since objectui#7612, the door stays shut because of the ruling, not because the decoration arrives. The assertions are still true; only their stated reasons are out of date. Carrier: whoever next edits that file. None is named.
  • The LOADERS comment beside sharing_rule ("CREATE ONLY — see AUTHOR_SHAPE_ONLY_TYPES above for why this shape may not judge a stored body") is left as it is. The claim fences everything but the header, and that comment points at the header, which now gives the answer.
  • From this container, GET /repos/objectstack-ai/objectui/issues/7612 and the issue's web page answer 404, and so does a single-comment GET on its thread. The comment list and the timeline answer 200 (state not_planned at 2026-09-20T14:46Z, no transfer event). Controls: objectui#7603, Three other draft-envelope consumers take getDraft().item verbatim, with no read-decoration strip #8181 and feat(app-shell): switch the sharing_rule client validator on at the edit door #10054 answer 200 on the same endpoint. The cause was not measured. That 404 is why the header also names objectui#10150. The quotation in the header does not depend on either card.
  • The commits carry no attribution trailers, so they are model-free by omission. Attribution is this body and the session below.

Session: https://claude.ai/code/session_01BA3nKVUwKQJf8DBxrSVtNC (the domain:ui seat #1 dispatch).


Generated by Claude Code

…NLY_TYPES states its ingress condition

The header above AUTHOR_SHAPE_ONLY_TYPES ended on a plan: switch the
sharing_rule edit gate on once the _diagnostics ingress is closed. That
condition was met (objectui#7603, hoisted by objectui#8181 into
extractDraftBody, which strips through the spec's stripReadDecorations),
the switch was put to the maintainer on objectui#7612, and the ruling was
option A: the edit door stays with the server.

The ending now records that, verbatim, where the reader meets the
condition. The measurement above it is kept unchanged; the one sentence
that quoted the pre-strip assembly is marked as the path objectui#6982
measured, with the live answer pointed at its test. No code line moves.
…Y_TYPES header

A source scan of the one docblock directly above the set. It requires that
docblock to name the ruling's card (objectui#7612) and the function that
closed the ingress (extractDraftBody), so the header cannot again read as a
plan whose condition is met without the answer beside it. Named subjects
only: the ruling's wording is quoted in the header, not pinned as text.

The control reads the same docblock for the measurement it must keep
(ADR-0010, _diagnostics, objectstack#5316) and proves the read is bounded
on both sides, so an empty or misplaced read cannot pass as a scan of
nothing.
…s releasing nothing

The docblock sits on a non-exported const, so it does not reach the
emitted clientValidation.d.ts; the comment-stripped emit is identical to
the base.
The ruling's own card reads 404 from this container today (issue GET, the
single-comment GET and the web page; the comment list and the timeline
still answer), so the header also names the card that restates it. The
quotation stays in the header either way, which is what makes the site
self-sufficient.
@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 2 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/8854-app-shell-readme-flow-draft.md

  • names clientValidation.ts → packages/app-shell/src/views/metadata-admin/clientValidation.ts — edited by this change

    Which door was measured. Not the server, and not the node and edge schemas one at a time: the app-shell metadata admin validates a flow draft client-side by handing the whole draft to the spec's FlowSchema — clientValidation.ts's LOADERS.flow resolves it and ResourceEditPage calls validateMetadataDraft(type, draft) with the editor's entire body. Graded per node and per edge, this block would have reported green while still being refused on save; that is how the identity keys stayed invisible to two previous cards against this same fence.

.changeset/theme-clientvalidation-dead-entry-5715.md

  • names clientValidation.ts → packages/app-shell/src/views/metadata-admin/clientValidation.ts — edited by this change

    Removed the dead theme: entry from clientValidation.ts's LOADERS table, which read ThemeSchema off @objectstack/spec/ui — a symbol the spec retired upstream (objectstack#10485 / PR objectstack#10695, which deleted the whole ui/theme.zod.ts module). theme was never a registered metadata type, so metadata-admin never asked for it (objectui#5715).

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 1dbb9933c (merge-base with origin/main): 2 file(s) changed outside .changeset/, read against 1296 pending declaration(s) that publish a body (1865 pending in total). · run

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3039.2 KB 3104.5 KB
Main entry chunk (gzip) 147.8 KB 350 KB
Entry file index-Fl7tgm_u.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) 16.68KB 6.20KB
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) 541.66KB 129.51KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 253.41KB 64.01KB
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) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.15KB 11.05KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
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) 51.44KB 14.62KB
plugin-charts (index.js) 71.82KB 20.13KB
plugin-chatbot (index.js) 198.27KB 47.18KB
plugin-dashboard (index.js) 133.00KB 35.19KB
plugin-designer (index.js) 215.98KB 44.34KB
plugin-detail (index.js) 258.85KB 67.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 144.77KB 37.17KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 215.46KB 58.88KB
plugin-kanban (index.js) 48.83KB 15.21KB
plugin-list (index.js) 113.90KB 28.11KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.56KB 3.71KB
plugin-view (index.js) 85.18KB 21.05KB
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) 110.46KB 36.33KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
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) 5.00KB 2.39KB
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) 17.15KB 6.32KB
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

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 329 chunks) 3039.2 KB 3104.5 KB
Main entry chunk (gzip) 147.8 KB 350 KB
Entry file index-DOH1fdA5.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) 16.68KB 6.20KB
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) 541.66KB 129.51KB
core (index.js) 8.94KB 3.59KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 222.47KB 61.83KB
fields (index.js) 253.41KB 64.01KB
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) 8.87KB 3.64KB
i18n (index.js) 5.22KB 2.26KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 33.36KB 10.88KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 39.15KB 11.05KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
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) 51.44KB 14.62KB
plugin-charts (index.js) 71.82KB 20.13KB
plugin-chatbot (index.js) 198.27KB 47.18KB
plugin-dashboard (index.js) 133.00KB 35.19KB
plugin-designer (index.js) 216.12KB 44.37KB
plugin-detail (index.js) 258.85KB 67.53KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 144.77KB 37.17KB
plugin-gantt (index.js) 167.99KB 41.37KB
plugin-grid (index.js) 215.46KB 58.88KB
plugin-kanban (index.js) 48.83KB 15.21KB
plugin-list (index.js) 113.90KB 28.11KB
plugin-map (index.js) 21.74KB 7.07KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.55KB 11.99KB
plugin-timeline (index.js) 30.68KB 8.95KB
plugin-tree (index.js) 10.56KB 3.71KB
plugin-view (index.js) 85.18KB 21.05KB
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) 110.46KB 36.33KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 4.25KB 2.04KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.78KB 2.09KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.78KB 2.56KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (kanban-quick-add.js) 3.89KB 1.87KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 18.27KB 6.20KB
types (ai.js) 4.11KB 2.06KB
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) 5.00KB 2.39KB
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) 17.15KB 6.32KB
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

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review September 24, 2026 18:23
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 24, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 24, 2026
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 24, 2026
Merged via the queue into main with commit 2ca2380 Sep 24, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-10150-author-shape-header-ruling branch September 24, 2026 19:33
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.

the AUTHOR_SHAPE_ONLY_TYPES header states a precondition that is now MET, and the answer was still no — record ruling A at the site

1 participant