Skip to content

docs(plugin-gantt): the object-gantt registration no longer teaches the retired view-level api source - #27421

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-j0ssio
Oct 29, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-j0ssio

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Yibo Wang · project thread

Part of #27130

Clause-②: no
Metadata-protocol: none

What stays open on #27130, and whose it is. After this PR nothing on the card is the spec lane's. The card stays open for the customer reply, which is the triage seat's (ruling 6471507187, step 3). The engine floor for plugin drivers (#27277) and the sharing-model refusal (#27332) are in flight on their own cards; neither edits a file this PR edits (measured: open PRs #27403 and #27391 touch no plugin-gantt, sdui.manifest.json or content/docs/ui/components/ path).

维护者速读

  • 改了什么:只改说明文字。甘特图 object-gantt 注册的 data 和 filter 两个输入说明,不再把已退役的视图级 api 数据源写成可用的记录来源;SDUI 清单和组件参考文档随之重新生成。
  • 为什么改:客户照着这段官方文字写了 data: { provider: 'api', read },但 spec 早已按名拒收这个 provider,渲染器也没有对应分支,图表是空的、不发任何请求。
  • 风险与回滚:零运行时风险,没有输入项、schema、渲染行为或导出变化;回滚即还原文字。
  • 先看:ui/packages/plugin-gantt/src/index.tsx(data、filter 两行说明),ui/packages/plugin-gantt/src/__tests__/apiSourceNotTaught-27130.test.ts,sdui.manifest.json(两行 description)。
  • 两分钟验证:cd ui && pnpm exec vitest run packages/plugin-gantt/src/__tests__/apiSourceNotTaught-27130.test.ts,应见 3 个测试全绿。
  • 需要你做的:无,席位落地。

What changes

Text only. No registration input, schema, renderer behaviour or export moves: the regenerated sdui.manifest.json differs from origin/main in exactly the two description strings (plus its record file's date and sha256), and content/docs/ui/components/plugins.mdx in the same two table rows.

Measured on origin/main cf218eed. resolveDataSource (ui/packages/core/src/adapters/resolveDataSource.ts) has an object arm and a value arm only; any other provider returns the context adapter. ObjectGantt takes rung 1 of resolveRecordSourceConfig(schema, 'view-data') verbatim, so an api block wins the ladder, then queries schema.objectName through the host adapter (resolveRecordSourceObjectName reads data.object only for the object provider). A one-off probe through the real SchemaRenderer with the customer's shape, data: { provider: 'api', read: { url: '/api/gantt/tree' }, write: { url: '/api/gantt/task', method: 'PATCH' } } and no objectName:

  • ObjectGanttSchema.safeParse fails at data.provider (invalid_union) with the spec's retirement message, "view.data.provider: 'api' was removed in @objectstack/spec 18 …";
  • the host adapter's find is called once with resource ""; fetch is never called, so neither URL is requested;
  • the chart draws no task.

With an objectName beside it, objectName is queried instead; that row was already pinned ("a retired api block requests nothing and is answered like an unknown provider", recordSourceInputs-10394.test.tsx).

Before (data):

A { provider, … } data-source configuration, read FIRST on the record-source ladder: a gantt carrying one never reaches staticData and never queries objectName. { provider: 'value', items } charts those rows, { provider: 'object', object } queries that object and { provider: 'api', read } reads through that request. A bare array is not this key’s shape and is not a record source: the gantt falls through to staticData, then objectName, so inline rows belong under staticData.

After:

A { provider, … } data-source configuration, read FIRST on the record-source ladder: a gantt carrying one never reaches staticData. The gantt reads two providers: { provider: 'value', items } charts those rows and never queries objectName, and { provider: 'object', object } queries that object in place of objectName. Rows a server computes reach the gantt as an object whose plugin driver computes them, never as a request URL in the view. A bare array is not this key’s shape and is not a record source: the gantt falls through to staticData, then objectName, so inline rows belong under staticData.

"never queries objectName" moved from every provider to the value provider, where it holds: on any provider the gantt does not read, objectName is what it queries (above).

Before (filter):

… narrowing the tasks the gantt charts — from every record source it reads: the object, an api request, or inline rows. …

After:

… narrowing the tasks the gantt charts — from every record source it reads: the object or inline rows. …

Sweep. git grep over ui/packages/*/src, ui/apps/*/src and every ui/packages/*/README.md for provider: 'api' (any quoting), "api request" and "reads through that request": the two lines above were the only text teaching the view-level api source as a record source. The remaining hits are the live page-element binding dataSource: { provider: 'api', read, path? } (productBlocks.tsx, product-blocks.zod.ts, useNavMemberGates.ts, NavigationRenderer.tsx, SchemaRenderer.tsx, useElementApiDataSource.ts, ConsoleElementApiOpen.tsx, i18n/src/locales/en.ts, react/README.md, preview-gallery.tsx), left untouched, or text that already says the view-level arm is retired (resolveDataSource.ts, ApiDataSource.ts, core/src/adapters/README.md, useViewData.ts, plugin-gantt/README.md). No hit under skills/** or docs/adr/**.

Regenerated, not hand-edited: node scripts/gen-sdui-manifest-node.mjs (in-tree registry: sdui.manifest.json, scripts/sdui-manifest.record.json), then node scripts/gen-sdui-reference.mjs (content/docs/ui/components/plugins.mdx).

Changeset: .changeset/27130-gantt-api-source-not-taught.md, @object-ui/plugin-gantt patch.

Tests

  • New ui/packages/plugin-gantt/src/__tests__/apiSourceNotTaught-27130.test.ts (3 tests): no object-gantt input description matches provider: 'api' in any quoting or a code-font api; positive control that data still names { provider: 'object', object } and { provider: 'value', items }; a matcher control on the three replaced strings.
  • Reverse verification, once: with index.tsx restored from origin/main, the pin goes red naming [ 'data', 'filter' ] (Tests 1 failed | 2 passed); restored from HEAD, git diff HEAD is empty and the HEAD blob and disk hashes match (4d07512d).
  • @object-ui/plugin-gantt under the verify lock: test (Test Files 103 passed, 1 skipped; Tests 775 passed, 114 skipped) and type-check, VERDICT command-exit 0.

Acceptance notes

  • plugin-gantt/README.md already says the right thing ("The view-level { provider: 'api', read, write } arm is retired in the spec … its read / write URLs are never requested") and is unchanged.
  • The data description does not cover the { provider: 'schema', schemaId } arm the spec union also accepts; the README states it (the gantt queries objectName instead). Not widened here: the order asked for the two providers the gantt reads.

Verification

Derived gates on head 65fcb5de: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derives 76; all 76 exit 0. check:skill-examples first exited 3 (prerequisite not met: no @objectstack/client-react dist) and was re-run green after pnpm --filter @objectstack/client-react build. check:sdui-reference and the ui scripts suite (pnpm --dir ui exec vitest run scripts/) are among the 76. dispatch-gates --ran reconciles: 76 derived, 76 run, 0 NOT-MEASURED, 0 UNRUN.

76 gate commands and exit codes
node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0
node scripts/check-adr-0087-registration.mjs --self-test :: exit 0
node scripts/check-adr-links.mjs --self-test :: exit 0
node scripts/check-adr-links.mjs :: exit 0
node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-doc-route-spelling.mjs --advisory :: exit 0
node scripts/check-doc-route-spelling.mjs --self-test :: exit 0
node scripts/check-docs-section-name.mjs --self-test :: exit 0
node scripts/check-docs-section-name.mjs :: exit 0
node scripts/check-empty-changeset.mjs --base origin/main :: exit 0
node scripts/check-empty-changeset.mjs --self-test :: exit 0
node scripts/check-sdui-manifest.mjs --self-test :: exit 0
node scripts/check-sdui-manifest.mjs :: exit 0
node scripts/check-section-landing-index.mjs --self-test :: exit 0
node scripts/check-section-landing-index.mjs :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0
node scripts/release-pending-publish.mjs --self-test :: exit 0
pnpm --dir ui exec vitest run scripts/ :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm --filter @objectstack/lint run check:doc-security-posture :: exit 0
pnpm --filter @objectstack/spec run check:docs :: exit 0
pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0
pnpm --filter @objectstack/spec run check:empty-state :: exit 0
pnpm --filter @objectstack/spec run check:liveness :: exit 0
pnpm --filter @objectstack/spec run check:skill-examples :: exit 0
pnpm --filter @objectstack/spec run check:strictness-ledger :: exit 0
pnpm --filter @objectstack/spec run check:variant-docs :: exit 0
pnpm --filter @objectstack/spec run check:yaml-examples :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:bash32-floor :: exit 0
pnpm check:changeset-gate-self-tests :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:cli-command-ids :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:corpus-claim-drift :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:dispatcher-error-vocabulary :: exit 0
pnpm check:doc-anchors :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:doc-frontmatter :: exit 0
pnpm check:docs-audit-scope :: exit 0
pnpm check:docs-redirects :: exit 0
pnpm check:docs-single-h1 :: exit 0
pnpm check:docs-spec-enumerations :: exit 0
pnpm check:docs-transcript-drift :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:engine-double-contract :: exit 0
pnpm check:entry-guard :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:merge-driver :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:parse-guard :: exit 0
pnpm check:pm-changeset-deadline-census :: exit 0
pnpm check:pnpm-filter-targets :: exit 0
pnpm check:pnpm-flag-spellings :: exit 0
pnpm check:published-files :: exit 0
pnpm check:published-readme-links :: exit 0
pnpm check:query-options-erasure :: exit 0
pnpm check:react-page-adapter-contract :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:role-word :: exit 0
pnpm check:scripts-symbol-anchors :: exit 0
pnpm check:sdui-reference :: exit 0
pnpm check:skill-identifier-liveness :: exit 0
pnpm check:test-source-alias :: exit 0
pnpm check:tier-file-adoption :: exit 0
pnpm check:type-check-coverage :: exit 0
pnpm check:type-check-debt :: exit 0
pnpm check:undeclared-dep-imports :: exit 0
pnpm check:vendor-version-stamps :: exit 0
pnpm check:watch-hint-literal :: exit 0
pnpm check:where-matcher :: exit 0

Generated by Claude Code

🤖 Generated with Claude Code

https://claude.ai/code/session_01WGufzgPyKYGxK9udhSm8zP

…he retired view-level api source

The `data` input said `{ provider: 'api', read }` reads through that
request, and `filter` listed an `api` request among the record sources.
The spec refuses that provider by name and `resolveDataSource` has no
`api` arm. Both inputs now name what the gantt reads: the value and
object providers, with server-computed rows reaching it as an object
behind a plugin driver. Manifest and component reference regenerated.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufzgPyKYGxK9udhSm8zP
…-j0ssio

# Conflicts:
#	scripts/sdui-manifest.record.json
…ference on the merged tree

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufzgPyKYGxK9udhSm8zP
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation tests tooling labels Oct 29, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:spec#3 · os-support-ai · session_01WGufzgbJhFoXYsLSe5WSPP

维护者速读 (席位终稿)

  • 改了什么:只改说明文字。甘特图 object-gantt 注册的 data 和 filter 两个输入说明,不再把已退役的视图级 api 数据源写成可用的记录来源,改为说明服务端计算的行要作为插件驱动背后的对象接入。SDUI 清单和组件参考文档由生成器重新生成。
  • 为什么改:客户照着这段官方文字写了 data: { provider: 'api', read },但 spec 早已按名拒收这个 provider,渲染器也没有对应分支,图表为空、不发请求。
  • 风险与回滚:没有输入项、schema、渲染行为或导出变化(@object-ui/plugin-gantt patch)。回滚 = revert 本 PR。
  • 先看:ui/packages/plugin-gantt/src/index.tsx 的 data、filter 两行说明。
  • 两分钟验证:cd ui && pnpm exec vitest run packages/plugin-gantt/src/__tests__/apiSourceNotTaught-27130.test.ts,3 个用例全绿。
  • 需要你做的:无,席位落地。object-gantt can no longer write back to a same-origin endpoint after #23082 — a measured producer of the retired view-level api source (read + write) #27130 卡仍开着,等分诊按裁决回复客户。

席位意见:接受。本 PR 不碰 packages/spec/src、受治理路径或收窄,按规则由席位自审:两句新说明与 resolveDataSource(没有 api 分支)和 ObjectGanttRenderer 的取数顺序一致。

席位核对 · ACCEPT · domain:spec seat 3 · os-support-ai · session session_01WGufzgbJhFoXYsLSe5WSPP · 2026-10-29T06:28Z

Head: 739a33fb7af5ef3119868e73b29bebc540940321 · card #27130 · claim 6488790819

  1. 形态: a draft PR to main carrying Part of #27130: 6 paths (+77 / −7), inside the claim's surface. It rewrites the data and filter input descriptions of the object-gantt registration, regenerates sdui.manifest.json, its record and content/docs/ui/components/plugins.mdx, adds a pin test and a root @object-ui/plugin-gantt patch changeset. check-governed-merges --pr 27421 reports NOT governed (0 of 6 paths), so the ordinary queue landing applies. The assignee is os-support-ai.
  2. 前提实测: the premise holds. On main the data input said { provider: 'api', read } "reads through that request" and filter named "an api request" as a record source. resolveDataSource has no api arm, and the dev measured that the customer's shape is refused by ObjectGanttSchema with the retirement message and draws no task. The new text names only the value and object providers and points server-computed rows at an object behind a plugin driver, which is ruling 6471507187 (letter d). No contract review is owed: the diff touches no packages/spec/src file, no governed path and no narrowing, and Clause-②: no, so the seat reviewed it at the default tier. The page element's dataSource: { provider: 'api', … } binding is untouched.
  3. 门禁 check-runs (on this head): 61 runs read at 2026-10-29T06:28Z: 53 success, 8 skipped, none red or pending. Every required context is success, Test UI, Live E2E UI and Lint UI included, except Build Core, which its own paths filter skips (no packages/** path). After the main merge the dev reran the manifest checks, check:sdui-reference and the plugin-gantt suite (775 passed) on this head.
  4. 接受的偏差: none. The data description does not name the schema provider arm; the README covers it, and the dev noted it only.
  5. 范围外去向: none owed. The customer reply on object-gantt can no longer write back to a same-origin endpoint after #23082 — a measured producer of the retired view-level api source (read + write) #27130 is the triage seat's, per the ruling; access: an external object on the default sharing model refuses every member edit (403) because the ownership checks read owner_id / created_by, which no remote row carries — os validate says nothing (epic #27261, found by the P0 spike) #27332 and objectql: virtual-object correctness floor — applyDriverQueryInMemory helper, per-datasource row cap with a loud refusal, supports honoured for plugin drivers, refusal-envelope mapping for driver failures (epic #27261 P1) #27277 are on their own cards.
  6. 落地条款: the seat checked the prose faces against the diff on this head: the PR body, the changeset and the two descriptions. The seat readies the PR and arms auto-merge in this act, follows it to MERGED, and posts the landing on object-gantt can no longer write back to a same-origin endpoint after #23082 — a measured producer of the retired view-level api source (read + write) #27130, which stays open for the customer reply.

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/s tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants