Skip to content

docs(sdk): fold objectui.org into objectstack docs, K1 — move the Object UI SDK guide and 57 renderer-type pages into content/docs/sdk - #27168

Draft
objectstack-fleet[bot] wants to merge 9 commits into
mainfrom
claude/project-thread-g48t33
Draft

objectstack-fleet[bot] wants to merge 9 commits into
mainfrom
claude/project-thread-g48t33

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

Fixes #27140

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么: 新开入口「Custom front-end」(content/docs/frontend/,侧栏在 API & SDK 之后)。入口页先分三条路:在 Console 里加自定义页面去 React pages,自己的前端读写数据去 Client SDK,自己的 React 应用里渲染元数据才是 ObjectUI SDK。objectui.org 的 95 页按你定的方案 B 精简后放进来:SDK 专属的 16 页指南、UI 插件总览和 15 个插件页保留,57 个渲染器类型页合成一页清单,重复的 schema 总览、schema 参考、报表插件页删掉。
  • 为什么改: objectui.org 要撤掉;你指出 sdk 放最外层有歧义、ui/ 只该放 UI 元数据,并选了「新入口 + 方案 B」(评估文档在项目线程里)。
  • 风险与回滚: 只动文档。新增 34 页,另有四个现有页面各加了几节:data-modeling/field-types、ui/pages、ui/forms、ui/reports,共 +495 行,内容取自被删的 SDK 页。ui/content/docs 没动,apps/docs 不加依赖。回滚就是 revert 本 PR。
  • 先看: content/docs/frontend/index.mdx(三条路的入口页)、content/docs/frontend/renderers.mdx(57 个类型合成的清单)、content/docs/ui/pages.mdx 的 Element data sources 一节(并入的最大一块,+302 行)。
  • 两分钟验证: 本地 pnpm docs:dev,打开 /docs/frontend,侧栏应出现「Custom Front-end」,入口页顶部是三行选择表。
  • 需要你做的: 本 PR 要在 K3 docs(ui): generate the component reference for all 106 components from sdui.manifest.json, with a drift check #27179 之后合并:插件页链到 K3 生成的 /docs/ui/components/plugins#…,K3 没合之前 check:doc-anchors 会报这 15 个链接。K3 合并后我合一次 main 转绿,超过 3000 行,由你合并。

What changes

  • New entry content/docs/frontend/ ("Custom front-end"), listed in content/docs/meta.json after api. Its landing page is a three-row chooser: a custom page inside the Console → React pages (metadata, stays in ui/); data access from your own front-end → Client SDK; rendering ObjectStack views and forms in your own React app → the ObjectUI SDK, which is the rest of the section. ui/ keeps metadata only.
  • ObjectUI SDK pages kept (flattened): quick-start, building-crud-app, architecture-overview (now links concepts/architecture for the protocol layers), schema-rendering, component-registry, fields, data-source, layout, app-shell, sidebar-nav, theming, plugin-development (now says it is the front-end kind and links plugins/development), cli, create-plugin, data-objectstack, troubleshooting, and plugins/ (the UI plugins overview plus 15 plugin pages).
  • Removed as duplicates: guide/schema-overview (the landing page covers it) and api/schema-reference (1443 lines; the generated component reference and references/ui cover it, and it carried stale shapes such as a detail view holding tabs beside columns).
  • Merged: core/schema-renderer into schema-rendering (its one unique section, the data-obj-id / data-obj-type attributes, checked in SchemaRenderer.tsx); the old plugin gallery plugins/index into the UI plugins overview, which gained plugin-list and plugin-detail entries and a line separating it from runtime plugins; plugin-report into ui/reports.
  • 57 renderer-type pages → renderers.mdx. None of the 57 types is in sdui.manifest.json, so an ObjectStack page cannot use them; the page says so in a callout and lists each type with its description and the source file holding its ComponentRegistry.register call (52 in @object-ui/components, 3 in @object-ui/plugin-view, each path checked).
  • Plugin pages trimmed (calendar, charts, dashboard, form, gantt, grid, kanban, list, map, markdown, timeline): the Schema API section, the catalog Example schemas gallery and the Examples section are removed (plus calendar/gantt/map Configuration and dashboard's filter, widget-options and drill sections, which ui/dashboards already has). Each page now links its types' generated entries in /docs/ui/components/plugins (K3) and keeps installation, React usage, component props, events, data providers and TypeScript. Chatbot, editor, view and detail document types outside the manifest or React component APIs and keep their schema sections.
  • Metadata the site lacked, moved to the metadata pages (text moved as written, headings re-levelled):
    • data-modeling/field-types, under "How the Console renders a field": polymorphic pointer pairs (referenceVia, referenceDeletedWhen), naming a registry item by name (position-ref, permission-ref), a widget's face on the record heading. The number-input section was already there from K2.
    • ui/pages, under "Element data sources": how a saved view combines with the binding, and the per-block table of which dataSource keys each block honours (with parentDataSource and {record_id}). frontend/data-source keeps the SDK side (useElementDataSource, the host's apiFetch, ElementApiOpenScope) and links here.
    • ui/forms: "What an edit save writes".
    • ui/reports: where the numbers come from, stored pre-9.0 documents (the lossy bridge, confirmed in ReportRenderer.tsx), and the filter-time CEL limitation.
  • Live demos → static code blocks (unchanged from the first revision): every SchemaExample became a fenced json block; no @object-ui/* dependency in apps/docs.
  • Gate bookkeeping: scripts/docs-audit/handwritten-docs.json regenerated with --write; scripts/role-word-baseline.json is a pure relocation of the rows the maintainer approved (5 sdk/ rows, 29 occurrences, out; 3 frontend/ rows, 26, in; the 3 others left with the removed pages).

⛔ Nothing under ui/ is edited or deleted; ui/apps/site is untouched. K4 does both.

Old path → new path (for K4's redirect map)

Every row is /docs/PATH on www.objectui.org → its target on objectstack.ai. 95 rows: 19 moved, 14 moved and trimmed, 60 merged into another page (57 renderer pages land on their group's heading in renderers), 2 removed and pointed at the page that covers them.

95 rows
# Source file (ui/content/docs/) Old URL (www.objectui.org) New URL (objectstack.ai) Change
1 index.md /docs /docs/frontend moved
2 guide/quick-start.md /docs/guide/quick-start /docs/frontend/quick-start moved
3 guide/building-crud-app.md /docs/guide/building-crud-app /docs/frontend/building-crud-app moved
4 guide/architecture-overview.md /docs/guide/architecture-overview /docs/frontend/architecture-overview moved
5 guide/schema-overview.md /docs/guide/schema-overview /docs/frontend removed
6 guide/schema-rendering.md /docs/guide/schema-rendering /docs/frontend/schema-rendering moved
7 guide/component-registry.md /docs/guide/component-registry /docs/frontend/component-registry moved
8 guide/fields.md /docs/guide/fields /docs/frontend/fields trimmed
9 guide/plugins.md /docs/guide/plugins /docs/frontend/plugins moved
10 guide/plugin-development.md /docs/guide/plugin-development /docs/frontend/plugin-development moved
11 guide/data-source.md /docs/guide/data-source /docs/frontend/data-source trimmed
12 guide/layout.md /docs/guide/layout /docs/frontend/layout trimmed
13 guide/theming.md /docs/guide/theming /docs/frontend/theming moved
14 guide/troubleshooting.md /docs/guide/troubleshooting /docs/frontend/troubleshooting moved
15 core/schema-renderer.mdx /docs/core/schema-renderer /docs/frontend/schema-rendering merged
16 layout/app-shell.mdx /docs/layout/app-shell /docs/frontend/app-shell moved
17 layout/sidebar-nav.mdx /docs/layout/sidebar-nav /docs/frontend/sidebar-nav moved
18 api/schema-reference.md /docs/api/schema-reference /docs/ui/components removed
19 utilities/cli.mdx /docs/utilities/cli /docs/frontend/cli moved
20 utilities/create-plugin.mdx /docs/utilities/create-plugin /docs/frontend/create-plugin moved
21 utilities/data-objectstack.mdx /docs/utilities/data-objectstack /docs/frontend/data-objectstack moved
22 plugins/index.md /docs/plugins /docs/frontend/plugins merged
23 plugins/plugin-calendar.mdx /docs/plugins/plugin-calendar /docs/frontend/plugins/plugin-calendar trimmed
24 plugins/plugin-charts.mdx /docs/plugins/plugin-charts /docs/frontend/plugins/plugin-charts trimmed
25 plugins/plugin-chatbot.mdx /docs/plugins/plugin-chatbot /docs/frontend/plugins/plugin-chatbot moved
26 plugins/plugin-dashboard.mdx /docs/plugins/plugin-dashboard /docs/frontend/plugins/plugin-dashboard trimmed
27 plugins/plugin-detail.mdx /docs/plugins/plugin-detail /docs/frontend/plugins/plugin-detail moved
28 plugins/plugin-editor.mdx /docs/plugins/plugin-editor /docs/frontend/plugins/plugin-editor moved
29 plugins/plugin-form.mdx /docs/plugins/plugin-form /docs/frontend/plugins/plugin-form trimmed
30 plugins/plugin-gantt.mdx /docs/plugins/plugin-gantt /docs/frontend/plugins/plugin-gantt trimmed
31 plugins/plugin-grid.mdx /docs/plugins/plugin-grid /docs/frontend/plugins/plugin-grid trimmed
32 plugins/plugin-kanban.mdx /docs/plugins/plugin-kanban /docs/frontend/plugins/plugin-kanban trimmed
33 plugins/plugin-list.mdx /docs/plugins/plugin-list /docs/frontend/plugins/plugin-list trimmed
34 plugins/plugin-map.mdx /docs/plugins/plugin-map /docs/frontend/plugins/plugin-map trimmed
35 plugins/plugin-markdown.mdx /docs/plugins/plugin-markdown /docs/frontend/plugins/plugin-markdown trimmed
36 plugins/plugin-report.mdx /docs/plugins/plugin-report /docs/ui/reports merged
37 plugins/plugin-timeline.mdx /docs/plugins/plugin-timeline /docs/frontend/plugins/plugin-timeline trimmed
38 plugins/plugin-view.mdx /docs/plugins/plugin-view /docs/frontend/plugins/plugin-view moved
39 components/basic/button-group.mdx /docs/components/basic/button-group /docs/frontend/renderers#basic merged
40 components/basic/div.mdx /docs/components/basic/div /docs/frontend/renderers#basic merged
41 components/basic/navigation-menu.mdx /docs/components/basic/navigation-menu /docs/frontend/renderers#basic merged
42 components/basic/pagination.mdx /docs/components/basic/pagination /docs/frontend/renderers#basic merged
43 components/basic/separator.mdx /docs/components/basic/separator /docs/frontend/renderers#basic merged
44 components/basic/sidebar.mdx /docs/components/basic/sidebar /docs/frontend/renderers#basic merged
45 components/complex/carousel.mdx /docs/components/complex/carousel /docs/frontend/renderers#complex merged
46 components/complex/data-table.mdx /docs/components/complex/data-table /docs/frontend/renderers#complex merged
47 components/complex/filter-builder.mdx /docs/components/complex/filter-builder /docs/frontend/renderers#complex merged
48 components/complex/filter-ui.mdx /docs/components/complex/filter-ui /docs/frontend/renderers#complex merged
49 components/complex/resizable.mdx /docs/components/complex/resizable /docs/frontend/renderers#complex merged
50 components/complex/scroll-area.mdx /docs/components/complex/scroll-area /docs/frontend/renderers#complex merged
51 components/complex/sort-ui.mdx /docs/components/complex/sort-ui /docs/frontend/renderers#complex merged
52 components/complex/view-switcher.mdx /docs/components/complex/view-switcher /docs/frontend/renderers#complex merged
53 components/data-display/avatar.mdx /docs/components/data-display/avatar /docs/frontend/renderers#data-display merged
54 components/data-display/breadcrumb.mdx /docs/components/data-display/breadcrumb /docs/frontend/renderers#data-display merged
55 components/data-display/kbd.mdx /docs/components/data-display/kbd /docs/frontend/renderers#data-display merged
56 components/data-display/list.mdx /docs/components/data-display/list /docs/frontend/renderers#data-display merged
57 components/data-display/statistic.mdx /docs/components/data-display/statistic /docs/frontend/renderers#data-display merged
58 components/data-display/tree-view.mdx /docs/components/data-display/tree-view /docs/frontend/renderers#data-display merged
59 components/disclosure/collapsible.mdx /docs/components/disclosure/collapsible /docs/frontend/renderers#disclosure merged
60 components/disclosure/toggle-group.mdx /docs/components/disclosure/toggle-group /docs/frontend/renderers#disclosure merged
61 components/feedback/empty.mdx /docs/components/feedback/empty /docs/frontend/renderers#feedback merged
62 components/feedback/loading.mdx /docs/components/feedback/loading /docs/frontend/renderers#feedback merged
63 components/feedback/progress.mdx /docs/components/feedback/progress /docs/frontend/renderers#feedback merged
64 components/feedback/skeleton.mdx /docs/components/feedback/skeleton /docs/frontend/renderers#feedback merged
65 components/feedback/sonner.mdx /docs/components/feedback/sonner /docs/frontend/renderers#feedback merged
66 components/feedback/spinner.mdx /docs/components/feedback/spinner /docs/frontend/renderers#feedback merged
67 components/feedback/toast.mdx /docs/components/feedback/toast /docs/frontend/renderers#feedback merged
68 components/form/calendar.mdx /docs/components/form/calendar /docs/frontend/renderers#form merged
69 components/form/checkbox.mdx /docs/components/form/checkbox /docs/frontend/renderers#form merged
70 components/form/combobox.mdx /docs/components/form/combobox /docs/frontend/renderers#form merged
71 components/form/command.mdx /docs/components/form/command /docs/frontend/renderers#form merged
72 components/form/date-picker.mdx /docs/components/form/date-picker /docs/frontend/renderers#form merged
73 components/form/file-upload.mdx /docs/components/form/file-upload /docs/frontend/renderers#form merged
74 components/form/form.mdx /docs/components/form/form /docs/frontend/renderers#form merged
75 components/form/input-otp.mdx /docs/components/form/input-otp /docs/frontend/renderers#form merged
76 components/form/input.mdx /docs/components/form/input /docs/frontend/renderers#form merged
77 components/form/radio-group.mdx /docs/components/form/radio-group /docs/frontend/renderers#form merged
78 components/form/select.mdx /docs/components/form/select /docs/frontend/renderers#form merged
79 components/form/slider.mdx /docs/components/form/slider /docs/frontend/renderers#form merged
80 components/form/switch.mdx /docs/components/form/switch /docs/frontend/renderers#form merged
81 components/form/textarea.mdx /docs/components/form/textarea /docs/frontend/renderers#form merged
82 components/form/toggle.mdx /docs/components/form/toggle /docs/frontend/renderers#form merged
83 components/layout/aspect-ratio.mdx /docs/components/layout/aspect-ratio /docs/frontend/renderers#layout merged
84 components/layout/page.mdx /docs/components/layout/page /docs/frontend/renderers#layout merged
85 components/navigation/header-bar.mdx /docs/components/navigation/header-bar /docs/frontend/renderers#navigation merged
86 components/overlay/alert-dialog.mdx /docs/components/overlay/alert-dialog /docs/frontend/renderers#overlay merged
87 components/overlay/context-menu.mdx /docs/components/overlay/context-menu /docs/frontend/renderers#overlay merged
88 components/overlay/dialog.mdx /docs/components/overlay/dialog /docs/frontend/renderers#overlay merged
89 components/overlay/drawer.mdx /docs/components/overlay/drawer /docs/frontend/renderers#overlay merged
90 components/overlay/dropdown-menu.mdx /docs/components/overlay/dropdown-menu /docs/frontend/renderers#overlay merged
91 components/overlay/hover-card.mdx /docs/components/overlay/hover-card /docs/frontend/renderers#overlay merged
92 components/overlay/menubar.mdx /docs/components/overlay/menubar /docs/frontend/renderers#overlay merged
93 components/overlay/popover.mdx /docs/components/overlay/popover /docs/frontend/renderers#overlay merged
94 components/overlay/sheet.mdx /docs/components/overlay/sheet /docs/frontend/renderers#overlay merged
95 components/overlay/tooltip.mdx /docs/components/overlay/tooltip /docs/frontend/renderers#overlay merged

Tests

Head 12b1047a renames "Object UI" to "ObjectUI" in content/docs/frontend (25 occurrences plus the sidebar separator), on Tesla's question in the card thread. It is a wording-only commit on top of 773055de; the docs gates were re-run green, and check:doc-anchors still fails only on the same 15 K3 links. The readings below are for 773055de.

Docs-only diff; no package source changes, so no package test or typecheck applies.

  • pnpm --filter @objectstack/docs build (the command production runs) at head 773055de: exit 0 under the verify lock. It emits 34 pages under /en/docs/frontend (the landing page, 16 SDK pages, renderers, the UI plugins overview and 15 plugin pages).
  • git grep -n "InteractiveDemo\|ComponentDemo\|LiveSplitDemo\|SchemaExample" -- content/docs prints nothing (card acceptance).
  • Source checks on the kept pages: every named import { … } from '@object-ui/PKG' resolves to a name the package's src/index.ts exports; every ComponentRegistry.* method the pages call exists in ui/packages/core/src/registry/Registry.ts; every objectui SUBCOMMAND the pages name is a .command() in ui/packages/cli/src; every @object-ui/* package named exists, except @object-ui/plugin-calendar-view, which the calendar page names only in its migration note (that package merged into plugin-calendar).
  • apps/docs/package.json: unchanged.

Verification

Local gates at head 773055de: node scripts/pm/dispatch-gates.mjs --commands derives 54 commands, all run, exit codes captured before any pipe.

  • 52 of 54 exit 0.
  • pnpm --filter @objectstack/spec run check:skill-examples exited 3 in the sweep (packages/spec/dist declarations predated the sources after merging main). After env -u OS_SKIP_DTS pnpm --filter '@objectstack/client-react...' build: exit 0, "270 prose examples type-check across 3 surface(s)".
  • pnpm check:doc-anchors exits 1 on exactly 15 links, all /docs/ui/components/plugins#TYPE from the trimmed plugin pages. That page is K3's (docs(ui): generate the component reference for all 106 components from sdui.manifest.json, with a drift check #27179) and is not on main yet; this PR lands after K3, and the gate goes green when main is merged in.

Acceptance notes

  • Landing order: K3 docs(ui): generate the component reference for all 106 components from sdui.manifest.json, with a drift check #27179 first. The plugin pages point at K3's generated entries instead of carrying their own copy of each type's props; that is the duplication this revision removes.
  • Scope grew past the card on the maintainer's ruling. The card asked for a one-to-one move; the maintainer asked for a duplication and fit review, then chose a new entry plus the trimmed set. The review is in the project thread. Four existing pages gained moved sections (+495 lines, text as written in the removed SDK pages); nothing existing was rewritten.
  • renderers replaces 57 pages of per-type examples with one list. An SDK reader who needs a type's inputs follows its source link to the ComponentRegistry.register call, which declares them.
  • Reserved-word ratchet: the maintainer approved baselining the SDK's own role keys (the ai SDK chat message key, the ARIA DOM key). This revision only relocates those rows: 29 occurrences in 5 sdk/ rows become 26 in 3 frontend/ rows; the other 3 left with api/schema-reference and the trimmed page-header section of layout. No other row changes.
  • guide/theming keeps export const brand = { … } satisfies Theme; (the SDK's @object-ui/types runtime object, not spec metadata), as in the first revision.
  • The README's "guides are published at objectui.org" line and ui/content/docs/ links outside this section are K4's sweep, untouched here.

Generated by Claude Code

@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 28, 2026
@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation labels Oct 28, 2026
@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 835b2d1cc95f57bae3be524ccc07c553c9ed2348 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Lint · docs & code guards is red on head 26a01f6c for one gate only: Reserved-word ("role") docs ratchet (pnpm check:role-word). The other 51 gates in the lane pass.

This is the known, expected red named in the PR body's first Acceptance note. Five content/docs/sdk pages still carry 29 uses of the word, and every one is an SDK API key that the docs cannot rename:

  • 24 are the chat message key in plugins/plugin-chatbot.mdx, all inside code fences;
  • 5 are the ARIA DOM key in api/schema-reference, guide/architecture-overview, guide/layout and guide/plugin-development.

The gate's own remedy for this kind is node scripts/check-role-word.mjs --update, and that remedy is maintainer-only, so the seat has not run it. The maintainer has a decision card in the project thread with three options: baseline / declare an ai-sdk vendor boundary / delete the examples. This PR stays draft until that ruling is applied. No re-run requested: the red is deterministic.


Generated by Claude Code

… a list-shaped key from the detail-view example

Claude-Session: https://claude.ai/code/session_01L9qibzngYyRjmvNxjkfVyd
Co-authored-by: Claude <noreply@anthropic.com>
The 29 remaining occurrences are SDK API keys that docs cannot rename:
the ai SDK chat message key in plugin-chatbot (24) and the ARIA role
DOM key (5). Baselined with check-role-word.mjs --update at the
maintainer's ruling in the project thread.

Claude-Session: https://claude.ai/code/session_01L9qibzngYyRjmvNxjkfVyd
Co-authored-by: Claude <noreply@anthropic.com>
…ed to what only SDK readers need

The moved SDK pages leave content/docs/sdk for a new entry, content/docs/frontend
(Custom front-end), placed after API & SDK. Its landing page routes three needs: a
custom page inside the Console (React pages), data access from your own front-end
(Client SDK), and rendering ObjectStack metadata in your own React app (the Object
UI SDK).

Pages that duplicated the site are cut or merged:
- schema-overview and api/schema-reference are removed; the generated component
  reference and references/ui cover them.
- core/schema-renderer is merged into schema-rendering; plugins/index into the UI
  plugins overview (plugins/index); plugin-report into ui/reports.
- The 57 renderer-type pages become one renderer types page; none of the types
  is in sdui.manifest.json.
- Plugin pages keep installation and React usage; their Schema API, catalog
  example galleries and metadata sections are removed, with a link to each
  type's generated entry.
- Metadata behaviour the site lacked moves to the metadata pages: field drawing
  (referenceVia, registry pickers, heading faces) into data-modeling/field-types,
  element data-source keys per block into ui/pages, edit-save semantics into
  ui/forms, and three report sections into ui/reports.

Claude-Session: https://claude.ai/code/session_01L9qibzngYyRjmvNxjkfVyd
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Red on 773055de, expected until K3 #27179 lands: Check Documentation Links and check:doc-anchors.

Both fail on the same 15 links. They come from the 11 trimmed plugin pages and point at /docs/ui/components/plugins#TYPE (for example #object-grid, #object-timeline). That page is generated by K3 #27179, which is not on main yet. The links are deliberate: on the maintainer's ruling, each plugin page links its type's generated props entry instead of keeping a hand-written copy.

Nothing else is red locally: 52 of 54 derived gates exit 0, check:skill-examples exits 0 after a dts rebuild, and the docs build passes. No re-run is useful before K3 merges. After K3 merges I will merge main into this branch, which re-runs CI. The PR stays draft until then.


Generated by Claude Code

This branch has not been deployed

No deployments
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 size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants