Skip to content

fix(skills,docs): align skills/docs with published spec; guard flat view containers#3096

Merged
os-zhuang merged 1 commit into
mainfrom
claude/loving-bartik-ae7a83
Jul 17, 2026
Merged

fix(skills,docs): align skills/docs with published spec; guard flat view containers#3096
os-zhuang merged 1 commit into
mainfrom
claude/loving-bartik-ae7a83

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

背景

2026-07-17 第三方评估(15.1.0 发布包实测)发现 5 处 skills/docs 与发布 spec 的漂移。这些直接伤害 AI-native 卖点:AI 按官方 skill 写元数据会连续挂。本 PR 全部修复,并把最重的一条(平铺 view 静默不渲染)的根因堵上。

修复清单(评估 5 项)

  1. defineDatasetdefineSeed(skills/objectstack-data 整节 + platform skill 的 os data seed 描述):实际导出是 defineSeed(objectDef, {externalId, mode, env, records})(seed.zod.ts);dataset 名字保留给 ADR-0021 分析语义层。skill 正文新增两者辨析提示。
  2. type: 'unique' 校验类型已不存在(Validation rules: 6 of 9 spec rule types are declared but not enforced at runtime #1475 删除):SKILL.md 类型列表改为完整 6 个 discriminator(script/state_machine/format/cross_field/json_schema/conditional),显式教 indexes: [{ fields, unique: true }];rules/relationships.md 的 junction 组合唯一示例同步改 indexes。
  3. kanban 配置形态(skills/objectstack-ui):顶层 groupBy → 嵌套 kanban: { groupByField, summarizeField, columns },顶层 columns 仍必填;对照 KanbanConfigSchemaexamples/app-showcase/src/ui/views/task.view.ts
  4. docs ui/views 整页重写为 defineView 容器写法:原页面教的平铺 view 对象({ name, label, type, columns } 顶层)os validate 通过但 Console 静默不渲染。新页面以 defineView({ list, listViews, formViews }) + defineStack({ views: [...] }) 注册为主线,并加 Callout 警示平铺写法;属性表订正(columns 实际必填、name/label 实际 optional、span 优先于 legacy colSpanvisibleWhen 为 record 根的 CEL)。
  5. README quickstart curl 路径:/api/v1/todo_task/api/v1/data/todo_task(rest 包路由实证;脚手架模板本已正确)。

顺带修复的同类漂移(修复中实证发现)

  • gantt 示例同病(UI skill):顶层 startField/endField/dependencyField(键名也是错的)→ 嵌套 gantt: { startDateField, endDateField, titleField, progressField, dependenciesField, parentField };timeSegments 示例移入 gantt: 块(objectui 运行时从 ganttConfig.timeSegments 读取)。
  • summary 形态(UI skill):summary: { function: 'min' } → 平枚举 summary: 'min'(ColumnSummarySchema)。
  • rules/validation.md 深度订正:删虚构的 async/custom 类型(外呼/自定义校验 → lifecycle hook);format 的键是 regexpattern、内建无 uuid;conditional 实为 when/then/otherwise(无 validations[] 数组);所有谓词改 record 根 CEL(P 标签),并按运行时 rule-validator.ts 明确 cross_fieldscript 同为反转语义(谓词=失败条件)——原文档的 cross_field 示例全部写反。
  • UI skill 新增 defineView 容器 primer(此前整个 skill 从未出现容器概念)。

根因加固(第 4 条的"为什么 validate 放行")

根因:ViewSchema 四槽全 optional + Zod strip 未知键 → 平铺 view 被剥成合法空容器 {},schema 门通过、loader 零展开、Console 零视图。

验证

  • @objectstack/spec 全量 254 files / 6890 tests 通过(含新增 defineView 空容器/平铺抛错用例);@objectstack/lint 216 tests 通过(新规则 7 用例);@objectstack/cli tsc 构建通过。
  • 端到端 dogfood:app-todo 注入平铺 view 探针 → os validateview-container-shape 拦截、exit 1;还原后 app-todo / app-crm / app-showcase(4 容器 21 对象)全部干净通过,无误报。
  • gen:skill-docs 重跑,check:skill-docs 同步 ✓;docs 站点 pnpm docs:build 通过,/docs/ui/views 已在浏览器实测渲染(容器主线、Callout、TOC 正常)。

Follow-ups

🤖 Generated with Claude Code

…iew containers

Fixes the five skill/doc-vs-spec drifts found by the 2026-07-17 third-party
evaluation of the 15.1.0 release (AI following the official skills produced
metadata that failed or silently broke):

1. objectstack-data skill taught `defineDataset()` for seeds — the actual
   export is `defineSeed()` (`dataset` is reserved for the ADR-0021 analytics
   layer). Renamed the whole section incl. imports, type table, zod path.
2. Same skill taught a `type: 'unique'` validation — removed from the spec in
   #1475. Now teaches `indexes: [{ fields, unique: true }]`; also purged the
   fictional `async`/`custom` types from rules/validation.md, fixed
   `format.pattern`→`regex` (no `uuid` builtin), `conditional` to its real
   `when`/`then`/`otherwise` shape, converted all predicates to record-rooted
   CEL (`P` tag), and documented that `cross_field` is failure-condition
   (inverted) like `script`, per the runtime rule-validator.
3. objectstack-ui skill kanban example used a top-level `groupBy` — the real
   shape is nested `kanban: { groupByField, summarizeField, columns }` with
   top-level `columns` still required. Gantt examples had the same flat
   disease with wrong key names (`startField`/`dependencyField` →
   `gantt.startDateField`/`dependenciesField`); `timeSegments` moved inside
   the `gantt:` block; column `summary` is a plain enum, not an object. Added
   a `defineView` container primer to the skill.
4. docs ui/views taught flat view objects that `os validate` passed but the
   Console silently never rendered (ViewSchema strips unknown keys → empty
   container). Page rewritten around the `defineView({ list, listViews,
   formViews })` container + stack registration; property tables corrected
   (`columns` required; `name`/`label` optional; `span` over legacy
   `colSpan`; `visibleWhen` is record-rooted CEL).
5. README quickstart curl path `/api/v1/todo_task` → `/api/v1/data/todo_task`.

Root-cause guard for #4: `defineView()` now throws on a container with zero
views, and `os validate` gains a `view-container-shape` check
(`validateViewContainers` in @objectstack/lint, run PRE-parse like the
ADR-0053 check) reporting flat/empty `views: []` entries with a fix hint.
The runtime view type-schema mapping is deliberately untouched (ViewItem +
container + #2555 personalization shapes need their own change).

Regenerated skills/README.md + content/docs/ai/skills-reference.mdx via
gen:skill-docs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 17, 2026 7:08am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/cli, @objectstack/lint, @objectstack/spec.

105 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via packages/cli, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/cli, packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/backup-restore.mdx (via @objectstack/cli)
  • content/docs/deployment/self-hosting.mdx (via @objectstack/cli)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli)
  • content/docs/permissions/authorization.mdx (via @objectstack/lint, @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit 8923843 into main Jul 17, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/loving-bartik-ae7a83 branch July 17, 2026 07:10
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 protocol:ui size/l tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant