Skip to content

docs: stop teaching keys the strict authoring face refuses (objectui#12131, phase 1) - #12134

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-12131-refused-teaching-surfaces
Oct 11, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-12131-refused-teaching-surfaces

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #12131
Clause-②: no

Phase 1 only. Phase 2, widening the scan surface of scripts/check-doc-json-fences.mjs to the published READMEs, has not started: that script arrives with PR objectui#12127, which is still open and unmerged. git ls-tree on fresh origin/main (c9fc10b1) lists nothing for it (control leg scripts/check-doc-links.mjs: 1 entry). This branch neither stacks on #12127 nor creates the script.

What changed

Interface blocks (content/docs/components/form). Each block now lists only keys the node schema declares. Every removal was measured through the real SchemaRenderer plus the registry at the base commit 10713937, by rendering with and without the key:

page removed reading declared key written instead
button.mdx fullWidth byte-identical render className comment now names "w-full", the spelling the page's own full-width-button fixture uses
button.mdx href byte-identical render (not in the button's closed DOM whitelist) none. Navigation is an action:button node, which the block's onClick comment already says
form.mdx submitButton submit text stays "Submit", only a stray submitbutton DOM attribute submitLabel (submit text measured "Send it")
form.mdx FormField defaultValue byte-identical render FormSchema defaultValues (input value measured "PRESET-VALUE")
label.mdx required only a stray required attribute on the label element, no indicator none. LabelSchema declares no indicator key

href and FormField defaultValue were not in the card's list. They sit in the same blocks and are the same defect (undeclared and unread), so they are fixed here under the bounded in-place rule: same defect class, a mechanical removal, files already in this claim, and the same gates. All three edited blocks still compile on their own under tsc --strict (a control with a deliberate type error fails).

Catalog fixture. components-form-label/required-label.json is now password-label.json, because it shows a label paired with a password input and draws no required indicator. The generated index was regenerated with pnpm --filter @object-ui/example-schema-catalog regenerate. The objectui#8761 pin and the label page follow the new id, and the page's "Required Field" heading becomes "With a Password Input" so the page stops making the same promise. git grep required-label now returns nothing.

README examples. All three are repaired, so none is a declared fragment:

fence strict-face refusal on main repair
root README.md, Contact Form undeclared root title (at runtime only a native tooltip on the form element) title dropped. Measured: 4 fields (text, email, select, textarea), required markers, submit "Send Message"
root README.md, Dashboard statistic / chart are not widget types in widgets[]; label, value, trend, w, h, chartType undeclared there; undeclared root title see below
packages/plugin-dashboard/README.md, object-bound table table is the static component: data required, objectName undeclared, column format not on the static surface "type": "object-data-table", the node the dashboard renders an object-bound table as, plus one lead-in sentence saying why a bare table does not fit

The Dashboard example: two rulings, one shape

The 2026-09-01 ruling on objectui#7115 (maintainer-approved, comment 5494799307) set this example's content to four statistic tiles whose ${stats.*} values evaluate, and it rejected spelling the numbers out. A pin in scripts/__tests__/check-doc-component-types.test.ts holds that ruling ("the flagship dashboard example teaches statistic, and keeps its expressions"). Since then the dashboard's widgets[] slot has closed, and the strict face refuses a statistic entry there. Measured on main: the example as written renders six "chart type is not supported yet" panels. No tile draws and no expression evaluates.

This PR keeps the four ruled tiles byte-for-byte (label, the ${stats.*} value, trend, description) and changes only their container, from dashboard to grid with columns: 4. That shape passes strict, each tile draws its evaluated value (measured: EVAL-REV drawn from a PredicateScopeProvider scope), and the #7115 pin stays unchanged and green. It drops three things: the undeclared root title, the flat w/h, and the two charts, which had no data and drew only the "not supported" panel. A one-line lead-in points readers to the plugin-dashboard README for the dashboard node and dataset charts.

⚠️ The branch history shows the alternative. Commit 7ba0fe0a first rewrote the example as a dashboard with metric-card entries holding literal values, dataset-bound line/pie widgets and layout boxes, and dfda40fa declared those three values in DOC_TYPE_EXEMPTIONS. That variant reverses the #7115 ruling: metric-card has no carriage row, which was measured (a ${stats.revenue} value renders literally). It was therefore reverted (74a3bead) and replaced (e7d0ebce). The net diff touches no script. If the seat wants this example to use the dashboard node, that reversal needs a ruling first.

Premise re-derivation (the card's enumeration)

  • "Four refused JSON node documents outside content/docs": falsified as stated. I applied feat(scripts): judge JSON doc fences through the strict authoring face (objectui#5250 slice B) #12127's gate predicate (json/jsonc fence, parses, plain object with a string type, type names an arm, blockquoted fences read) to every tracked .md/.mdx outside content/docs. At base it found 19 refused documents. Three are the in-scope README fences and one is the docs/audits record, which was left untouched as triage ruled. The other 15 are 5 historical records (CHANGELOGs and a changeset), 9 fences in the published skills/ tree (all but one are labelled counter-examples), and 1 deliberate counter-example in packages/components/src/renderers/complex/README-KANBAN.md, which is not in that package's files. After this PR the count is 16, and none of the 16 is in this claim's surface.
  • The declared equivalents (className: "w-full", submitLabel, no indicator key on label): verified against the schema and through the renderer.
  • Key counts on main: fullWidth ×1 in button.mdx, submitButton ×1 in form.mdx, required ×2 in label.mdx. Of the last two, one is in the interface block and one is the fixture id, and both changed.

Verification, at e7d0ebce

Every exit code was captured by redirecting output first and reading the code after, never through a pipe. Each verdict below is the gate's own printed line.

command exit
node scripts/check-doc-links.mjs 0, "Links are valid across 17 scan roots."
node scripts/check-doc-component-types.mjs 0, "Every documented component type is registered."
node scripts/check-prompt-component-keys.mjs 0
node scripts/check-doc-fence-languages.mjs --self-test and plain run 0 / 0
node scripts/check-doc-example-ids.mjs 0, "415 real reference(s) all resolve in the catalog registry."
node scripts/check-new-cross-file-line-citations.mjs 0, "0 new citation(s)"
node scripts/check-control-bytes.mjs 0
node scripts/check-shell-escape-residue.mjs 0
node scripts/check-changeset-presence.mjs 0, "no changeset is owed"
python3 scripts/regenerate-catalog-index.py --check 0, "up to date (433 entries)"
pnpm exec vitest run scripts/__tests__/ 0, 179 files passed, 2 skipped
pnpm exec vitest run packages/types/ 0, 368 files passed
pnpm exec vitest run examples/schema-catalog/ 0, 42 files passed
pnpm exec vitest run packages/plugin-dashboard/ 0, 174 files passed
8 further tests that read the README, docs or catalog trees (components, core, cli, plugin-gantt, plugin-detail) 0, 8 files passed
tsc --noEmit -p examples/schema-catalog/tsconfig.json --listFiles 0, with password-label.json and index.ts in the program
eslint on the 2 changed .ts/.tsx files 0, 2 files, 0 errors

On an earlier head, scripts/__tests__/ was red on exactly one test: the #7115 pin, against the metric-card variant. That red is what surfaced the ruling.

Lint narrowing: eslint answers "File ignored because no matching configuration was supplied" for the changed .md, .mdx and .json files, so its population is the two .ts/.tsx files. The --format json output counts 2 files. The resolved config sets neither parserOptions.project nor projectService, so this diff cannot move eslint's verdict on any file it does not touch.

NOT MEASURED locally, left to CI:

  • check:doc-snippets as a whole. Its --build-filter closure is nearly every package, too heavy for the foreground limit. The three ts interface blocks it reads in this diff were compiled on their own (see above).
  • The catalog's tsconfig.test.json, which resolves about 15 unbuilt workspace packages. The only change it sees is one string in an as const id tuple.
  • lychee check-links. This diff adds one relative link, which check-doc-links resolves.
  • check:readme-exports, which needs the full package build. This diff adds no import to any README.

Acceptance notes

  • Strict face, custom dashboard widget. The component arm for any other registered node accepts only base keys under strict. { "type": "dashboard", "widgets": [{ "id": "w", "type": "custom", "component": { "type": "text", "content": "hi" } }] } has strict=false and tolerant=true, while the TypeScript face types component as any SchemaNode. This is reported to the seat, not fixed here.
  • skills/objectui/rules/protocol.md. The fence labelled "✅ CORRECT" (a data-table with columns and no data) is refused by both faces. skills/** is a governed surface, so this is reported to the seat.
  • Phase 2. Once the scan surface covers package READMEs, README-KANBAN.md's refused-by-name onCardMove document is a deliberate counter-example and would need the gate's fragment marker, if that file is in the surface at all. It is not shipped.
  • No changeset: check-changeset-presence says none is owed (package READMEs are excluded from the published-source rule).

Generated by Claude Code

…12131)

Interface blocks (content/docs/components/form):
- button.mdx: drop `fullWidth` and `href`; neither is declared on
  ButtonSchema and the button renders byte-identically with either. The
  full-width spelling the page's own fixture uses, `className: "w-full"`,
  is now named on the `className` line.
- form.mdx: `submitButton` -> `submitLabel` (the declared key the form
  renderer reads for its submit text); FormField `defaultValue` (undeclared,
  renders identically) -> FormSchema `defaultValues`, the key the renderer
  seeds react-hook-form from.
- label.mdx: drop `required`; LabelSchema declares no indicator key and
  the renderer only leaks it as a stray `required` attribute.

Catalog fixture: components-form-label/required-label.json is renamed
password-label.json (a label paired with a password input, which is what
it shows); the generated index is regenerated and the objectui#8761 pin
and the label page follow the new id.

READMEs (outside the JSON-fence gate's scan surface):
- README.md form: drop the undeclared root `title` (it only reached the
  DOM as a native tooltip on the form element).
- README.md dashboard: rewrite onto declared keys: `metric-card` entries
  with `title`/`trendValue` and literal values (metric-card does not
  evaluate `${...}`), dataset-bound `line`/`pie` chart widgets, and the
  flat `w`/`h` moved into `layout` boxes; drop the undeclared root `title`.
- packages/plugin-dashboard/README.md: the object-bound table example is
  an `object-data-table` node; a bare `table` is the static component and
  declares neither `objectName` nor a column `format`.

Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W
Co-authored-by: Claude <noreply@anthropic.com>
…ulary (objectui#12131)

The root README's "Dashboard" copy-paste schema passed check:doc-types
only because it taught registered COMPONENT keys (`statistic`, `chart`)
in a dashboard's `widgets[]`, which the strict authoring face refused.
Rewritten onto the slot's own vocabulary, its `type` values are
`metric-card`, `line` and `pie`: widget-slot / widget-kind values that are
not bare registry keys. They are declared in DOC_TYPE_EXEMPTIONS under
`README.md`, worded after the `packages/plugin-dashboard/README.md`
entries that already declare the same three values; the gate's
stale-exemption check keeps the entries tied to the sites.

Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W
Co-authored-by: Claude <noreply@anthropic.com>
…ot vocabulary (objectui#12131)"

This reverts commit dfda40f. The root README's dashboard example is
re-shaped in the next commit onto registered node types only (`grid`,
`statistic`), so the three `README.md` exemptions would fail as
`stale-exemption`.

Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W
Co-authored-by: Claude <noreply@anthropic.com>
…face accepts (objectui#12131)

The 2026-09-01 ruling on objectui#7115 (maintainer-approved) set this
example's content to four `statistic` tiles whose `${stats.*}` values
evaluate, and rejected spelling the numbers out. Since then the
dashboard's `widgets[]` slot has closed: the strict authoring face
refuses a `statistic` entry there, and measured through the real
`SchemaRenderer` on main the example drew six "chart type is not
supported yet" panels, with no tile drawn and no expression evaluated.

The previous commit moved it onto `metric-card` entries with literal
values, which reverses that ruling (`metric-card` has no carriage row).
This keeps the four ruled tiles byte-for-byte (`label`, `${stats.*}`
`value`, `trend`, `description`) and changes only their container to a
`grid` with `columns: 4`: strict-valid, and measured, each tile draws
its evaluated value. Dropped: the undeclared root `title`, the flat
`w`/`h`, and the two charts, which carried no data and drew only the
"not supported" panel. A one-line lead-in points at the
plugin-dashboard README for the `dashboard` node and dataset charts.

Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation plugin examples tests labels Oct 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 290 chunks) 3174.2 KB 3204.6 KB
Main entry chunk (gzip) 74.2 KB 350 KB
Entry file index-DjQvXe8q.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) 20.05KB 7.41KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 587.00KB 141.35KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 240.39KB 67.09KB
fields (index.js) 275.07KB 70.00KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 40.26KB 11.71KB
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) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 54.31KB 15.86KB
plugin-charts (index.js) 84.72KB 23.27KB
plugin-chatbot (index.js) 201.52KB 47.99KB
plugin-dashboard (index.js) 144.20KB 38.95KB
plugin-designer (index.js) 233.53KB 49.80KB
plugin-detail (index.js) 249.44KB 65.79KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 177.80KB 46.04KB
plugin-gantt (index.js) 179.37KB 45.17KB
plugin-grid (index.js) 255.15KB 70.92KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 122.77KB 31.19KB
plugin-map (index.js) 27.24KB 9.03KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 92.11KB 23.27KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

…objectui#12131)

objectui#12130 is open on exactly this key (declare it, or rule it
runtime-only), so the docs do not pre-empt it: the `// Default value`
line and `defaultValue?: any;` are restored byte-for-byte as main has
them, as the last member of `interface FormField`. The FormSchema
`defaultValues` and `submitLabel` lines stay.

Claude-Session: https://claude.ai/code/session_01DwLS3LzXyNmyTunMGbpc8W
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 290 chunks) 3174.2 KB 3204.6 KB
Main entry chunk (gzip) 74.2 KB 350 KB
Entry file index-DjQvXe8q.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) 20.05KB 7.41KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.40KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 27.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 587.00KB 141.35KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 240.39KB 67.09KB
fields (index.js) 275.07KB 70.00KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 40.26KB 11.71KB
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) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 54.31KB 15.86KB
plugin-charts (index.js) 84.72KB 23.27KB
plugin-chatbot (index.js) 201.52KB 47.99KB
plugin-dashboard (index.js) 144.20KB 38.95KB
plugin-designer (index.js) 233.53KB 49.80KB
plugin-detail (index.js) 249.44KB 65.79KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 177.80KB 46.04KB
plugin-gantt (index.js) 179.37KB 45.17KB
plugin-grid (index.js) 255.15KB 70.92KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 122.77KB 31.19KB
plugin-map (index.js) 27.24KB 9.03KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 92.11KB 23.27KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
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 (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

Copy link
Copy Markdown
Contributor Author

Head 926c3a4b addendum (2026-10-11T10:40Z). The body was written once at e7d0ebce and is not edited. domain:devx @ objectui seat 1, session_01DwLS3LzXyNmyTunMGbpc8W.

  • 926c3a4b restores FormField defaultValue in content/docs/components/form/form.mdx, byte-identical to main. objectui#12130 owns that key, so it is no longer part of this PR's bounded in-place fix. The body's line listing the FormField defaultValue removal no longer applies. href (button) stays removed.
  • The seat's review of record is objectui#12131 comment 6108166751 (ACCEPT).

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 11, 2026 10:54
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 11, 2026 10:54
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 11, 2026
Merged via the queue into main with commit 66eb560 Oct 11, 2026
43 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-12131-refused-teaching-surfaces branch October 11, 2026 11:13
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 examples plugin tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants