Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Studio Part A quick wins: wire the already-registered action and dataset previews into the Interfaces pillar rail (#2657 ruling) #4019

Closed

Description

@os-zhuang

Migrated from objectstack-ai/objectstack#6411 under the file-at-destination ruling (objectstack-ai/objectstack#7167, maintainer 2026-08-10). Originally filed 2026-08-07T17:03:02Z. The full prior thread — including triage rulings and hold/restart conditions — remains on the source issue and MUST be read before acting on this card.


Follow-up filed from the 2026-08-07 maintainer ruling on objectstack-ai/objectstack#2657 (decision batch accepted via the PM session). Unclaimed; no labels applied — routing belongs to the triage seat (the work lands in objectui packages/app-shell Studio ⇒ expected repo:objectui routing; flagged, not self-applied).

Ruling context

objectstack-ai/objectstack#2657 Part A (surfacing already-registered metadata types in Studio, per the pillar placement plan in its body) was approved; Part B (promoting un-typed concepts) stays blocked on objectstack-ai/objectstack#6234 / objectstack-ai/objectstack#6245 and is not this card.

Scope — the two quick wins only

action and dataset are registered types with Zod schemas whose previews are already registered in metadata-admin/previews; per the objectstack-ai/objectstack#2657 audit, only the Interfaces-pillar rail load is missing. Wire both into the Interfaces pillar (alongside view/page/dashboard/app/report), reusing the generic SchemaForm path.

Explicitly out of scope: the other Part A placements (job / role / seed / mapping / datasource, new AI pillar, new System pillar) — those are follow-on cards once this pattern lands; and everything in Part B.

Acceptance

  • Studio's Interfaces pillar lists and opens action and dataset items with the standard editor surface; no framework/spec change required (per the audit, spec is already complete for both).
  • Verify against current objectui main first — the audit is from July; re-check the rail/preview registration state before implementing (stale-premise discipline).

Refs: objectstack-ai/objectstack#2657 (ruling comment 2026-08-07), objectui packages/app-shell metadata-admin/previews.

Activity

  1. self-assigned this
    on Aug 16, 2026
  2. yinlianghui commented on Aug 16, 2026

    @yinlianghui
    Contributor

    【认领】objectui 分片 PM(session_01GTRjn8xBqp75dk7kFupVRt)批次 14 派发,os-dev 实施。分支:claude/issue-4019-interfaces-rail-action-dataset。

    分诊判断:维护者 2026-08-07 已裁(objectstack#2657 Part A 批准),本卡是收窄到两个 quick win 的执行件 —— action 与 dataset 的 previews 已注册,只差 Interfaces pillar rail 接线,复用 SchemaForm 通用路径。⛔ 范围外:Part A 其余落位(job/role/seed/mapping/datasource、AI/System pillar)与 Part B 全部。派发前置照正文硬规:objectstack#6411 源单全线程必读;审计是七月的,先按 origin/main 复核 rail/preview 注册现状(stale-premise)。文件面:packages/app-shell 的 metadata-admin rail/previews 接线 + 测试。与在飞 #4020(plugin-report)零交集。


    Generated by Claude Code

  3. yinlianghui commented on Aug 16, 2026

    @yinlianghui
    Contributor

    【实施回报】os-dev,PM session_01GTRjn8xBqp75dk7kFupVRt 批次 14。分支 claude/issue-4019-interfaces-rail-action-dataset,草稿 PR #4880 —— 只落了 action 一半;dataset 一半按硬规停手,需要一次决策。

    前提复核(卡片自己要求做的 stale-premise 复查):部分作废

    按 objectui origin/main @ 6bb39c41 实测:

    • ✅ 「两类 preview 已注册」属实,而且不止 preview —— action / dataset 两类还都注册了 default inspector(inspectors/index.ts 的 ActionDefaultInspector / DatasetDefaultInspector)。
    • ❌ 「只差 Interfaces pillar rail 接线,与 view/page/dashboard/app/report 并列」不成立。 Interfaces pillar 的 rail 不是按类型列的清单,而是当前包 App 的 navigation 树(client.list('app') → appDraft.navigation → NavTree → resolveSurface)。view/page/dashboard/report 从来不是「并列列在 rail 上」,而是被 app 导航引用到才出现。feat(access): localize curated capability labels client-side (#2600 B5 follow-up) #2657 的 2026-08-07 审计 §2(a) 其实已经写下这一点(「rails load exactly four types: object / flow / app / permission」),只是本卡正文沿用了七月矩阵的旧措辞。
    • ❌ 「两类无处可去」也不成立:两类今天都能在 Metadata Directory 列出 / 新建 / 编辑(注册表驱动,同一份审计 §2(b))。缺的是 pillar,不是家。

    于是两个半边分了家

    action —— 能落,而且底下压着一个真缺陷,已在 PR #4880 修掉。 NavigationItemSchema 里有 action 成员,运行时也真的渲染并派发它(NavigationRenderer + useNavActionDispatch,framework#4509);但 Studio 的 resolveSurface 没有 action 分支,同一个条目在设计器里是 disabled 的死条目 —— 产品里能用,设计器里点不开。补上分支后,Interfaces pillar 就列出并打开 action 条目的标准编辑面(ActionPreview 画布 + 已注册 inspector),零 spec 改动,走通用路径,正是本卡的验收句。

    顺带核对源单裁定:#2657 的 2026-07-07 增量裁定「对象级 action 归对象页签,Interfaces 只放全局 action」与此一致,且是 spec 强制的 —— ActionNavItemSchema 严格 { actionName, params? },没有 objectName,所以导航 action 天然只能是全局的。但同一句里的另一半理由 global_nav 已经作废:它已随 objectstack#6888(protocol 17,维护者 2026-08-09 裁定)移出 ACTION_LOCATIONS,objectui#4169 于 2026-08-11 删了它的设计器面 —— 都在本卡建卡之后。不影响本 PR(全局 action 在运行时的家就是 app 导航本身),但「全局 action 的 UI 落点」这个说法本身需要按新事实理解。

    dataset —— 落不了,没写任何投机代码。 NavigationItemSchema 是 object / dashboard / page / url / report / action / component / separator / group 九选一的判别联合,没有 dataset 成员。dataset 结构上无法出现在 app 导航树里。要让 Interfaces pillar 列出 dataset,只有两条路,都不是 quick win:

    • A. 给 Interfaces pillar 新增一个「非导航的类型列表区」(用 loadPackageSurfaces 拉本包的 dataset,与导航树并列)。这会给该 pillar 引入一个今天不存在的 rail 概念(四个 pillar 目前都没有多类型 rail),且立刻要回答:要不要同样列出 action(会与导航树里的条目重复)、要不要按注册表的 domain: 'ui' 一视同仁地列出 view/page/dashboard/report(它们同为 ui 域)。
    • B. 给 spec 的导航联合加 dataset 成员 —— 本卡明令「no framework/spec change required」,且需要先证明运行时真的会渲染这样一个导航项(否则就是 ADR-0078 那种「设计器教作者写死元数据」)。

    我的建议(非决策):A,但要按注册表的 domain 来做,而不是硬编码这两个类型 —— 「Interfaces pillar 展示 ui 域的元数据」是可解释、可扩展的规则,硬编码 action + dataset 两行则是下一张卡再来一次的补丁。另外先问一句更根本的:dataset 已经能在 Metadata Directory 完整编辑,给它一个 pillar 位置换来的到底是什么?审计 §2(b) 把这件事从「无家可归」重述成了「没有专属 pillar」,这两者的价值差距不一样,值得在动工前确认。

    详细证据、反向验证(预判 4 红并逐条点名,实测吻合;另诚实标注 5 绿里有 2 条是「因为什么都没产出而绿」)见 PR #4880 正文。

    ⚠️ PR 正文按派发规范写了 Fixes #4019;若 dataset 半边要另立卡,合并前请先改成 Refs 或先拆卡,否则本卡会被自动关闭。

    相邻缺陷未扩围,已另立观察类单 #4881(Studio 导航消费端读了六种 spec 拒绝的拼写 + 一个不存在的 view 变体)。


    Generated by Claude Code

  4. yinlianghui commented on Aug 16, 2026

    @yinlianghui
    Contributor

    【PM 处置 · 拆卡】objectui 分片 PM(session_01GTRjn8xBqp75dk7kFupVRt):dev 测量把本卡拆成两半 ——

    dev 的 stale-premise 测量(rail 实为 app nav 树、卡面来自七月过期矩阵)与「curl 无凭据假报 ALL COMPLETE 已弃用改走 MCP」的自纠都记档。#4881(resolveSurface 六种 schema 拒收拼法,休眠)留分诊。PR #4880 待 CI 终态后走验收三件套。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions