Skip to content

feat(spec,cli): enroll view in the liveness ledger (#2998 Track B) - #3046

Merged
os-zhuang merged 1 commit into
mainfrom
claude/formviewschema-button-defaults-77q7fs
Jul 16, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/formviewschema-button-defaults-77q7fs

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

实现 #2998 的 Track B:把 view 纳入 spec 属性活性台账的 GOVERNED 名单 —— 补上让 objectui#1763/#2545 这类 renderer/spec 键漂移长期漏检的系统性缺口(Track A 已由 #3014 落地)。

变更内容

  • view 入册:check-liveness.mts 的 GOVERNED 增加 'view';新建 packages/spec/liveness/view.json,83 个可遍历属性全部分类 —— list/form 容器按 children 下钻一层,listViews/formViews(与 list/form 同构的命名视图 record)在顶层整体分类。结果:live 76 / experimental 2 / dead 5,gate 全绿零 UNCLASSIFIED。
  • 播种 + 两仓复核:以 2026-06 viewschema 审计为底稿,并逐键对 objectui HEAD(fb35e48)重新 grep 查证。4 处审计时代的 DEAD 结论已过时,按当前代码改判为 live:
    • form.submitBehavior(WizardForm.tsx:315 + 专项测试);
    • list.sharing.lockedBy(ListView 分享 tooltip);
    • list 路径的 ViewData providers(ListView.tsx:841 拉取效应支持 value/api 模式);
    • list.chart —— 审计的头号发现("chart 渲染器从未迁移到 ADR-0021 形状")已被解决:ListView.tsx:1460 / ObjectView.tsx:1185 均为 dataset-first 分支,ObjectChart.tsx:298-325 拉取 dataset 定义走语义层查询,legacy 键读取只是向后兼容回退。
  • 确认 dead 的 5 个:list.responsive、list.performance、form.data、form.defaultSort、form.aria —— 除 form.aria(良性 a11y 元数据,按 README 规则不打扰作者)外全部标注 authorWarn + authorHint。二级残留(userActions.buttons、addRecord.mode/formView、tabs[].order,下钻仅一层无法单列)记录在父条目 note 中,进入 enforce-or-remove 工作清单(ADR-0049)。
  • experimental 2 个:form.buttons/form.defaults —— spec: structured form button/defaults config on FormViewSchema + enroll view in the liveness ledger #2998 Track A(feat(spec): structured buttons + defaults config on FormViewSchema (#2998) #3014)的新键,显式入账并链接 objectui#2545 的接线待办,marker 与台账状态一致。
  • CLI lint 接通 view(lint-liveness-properties.ts):TYPE_COLLECTIONS 增加 { type: 'view', key: 'views' },视图容器以 object 作为警告标签(视图容器没有 name)。现在 os build 一个含 dead 属性的视图(如设置了 form.defaultSort)会收到带修正提示的 advisory 警告 —— 否则台账里的 authorWarn 本身就是 parsed-but-inert(ADR-0078 的讽刺)。新增 3 个测试,17/17 通过。
  • README:governed 类型 12 → 13,新增 view 行(计数由 README 自带脚本生成),rollout-pending 名单移除 view,prove-it-runs 表中 form-surface 类的"not yet governed"备注更新(台账绑定位已就绪,缺 dogfood proof 一半)。

验证

  • pnpm --filter @objectstack/spec check:liveness 全绿:view 83 classified (live 76, dead 5, experimental 2),0 UNCLASSIFIED,未新增 stale-evidence 警告,exit 0。
  • lint-liveness-properties 测试 17/17(含 3 个新 view 用例:dead 属性告警、live 属性静默、干净视图零发现)。
  • 全仓 pnpm test 后台运行中,绿后如有问题会跟进(范围内测试均已通过)。

遗留

  • 二级 dead 残留(userActions.buttons 等)与 form.aria 的接线/裁剪决策 → enforce-or-remove 清单,建议随 objectui#2545 一并处置。
  • Form layout/section/widget 高危类的 dogfood proof(ADR-0054)仍缺 —— 台账绑定位已由本 PR 备好。

Grounding: ADR-0049(enforce-or-remove)、ADR-0054(prove-it-runs)、ADR-0078。Refs #2998(Track B;Track A 已由 #3014 合并)、objectstack-ai/objectui#2545、objectstack-ai/objectui#1763。

🤖 Generated with Claude Code

https://claude.ai/code/session_013Ue47V8zZ5QhcYMPiRQDA7


Generated by Claude Code

Adds 'view' to the GOVERNED set of the spec property-liveness gate and
authors packages/spec/liveness/view.json — closing the rollout gap that
let the objectui#1763/#2545 renderer/spec key-drift class survive
undetected (the systemic cause named in #2998).

- view.json classifies all 83 walkable properties: `list`/`form` drilled
  one level via children; `listViews`/`formViews` covered at top level
  (same inner shapes as list/form). Tally: 76 live, 2 experimental
  (form.buttons/form.defaults — #2998 Track A awaiting objectui#2545),
  5 dead (list.responsive, list.performance, form.data, form.defaultSort,
  form.aria), misleading dead props authorWarn'd with corrective hints.
- Seeded from docs/audits/2026-06-viewschema-property-liveness.md and
  re-verified against objectui HEAD (fb35e48): four audit-era DEAD
  findings had since gone live and are classified from current reads —
  form.submitBehavior, list.sharing.lockedBy, list-path ViewData
  providers, and the post-ADR-0021 list.chart dataset shape (the audit's
  "chart renderers never migrated" headline is resolved; the legacy-key
  reads are only the back-compat fallback).
- CLI compile-time liveness lint gains view coverage: TYPE_COLLECTIONS
  maps the stack `views` collection, containers labelled by `object`
  (views have no `name`). +3 tests (17/17 green).
- liveness/README.md: 13 governed types, view row, form-surface proof
  class note updated; minor changeset for @objectstack/spec + cli.

Verification: check:liveness green (0 UNCLASSIFIED, no new stale-evidence
warnings); lint-liveness-properties tests 17/17.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Ue47V8zZ5QhcYMPiRQDA7
@vercel

vercel Bot commented Jul 16, 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 16, 2026 11:25am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/m labels Jul 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

104 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/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)

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 marked this pull request as ready for review July 16, 2026 11:42
@os-zhuang
os-zhuang merged commit 2973f7f into main Jul 16, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/formviewschema-button-defaults-77q7fs branch July 16, 2026 11:42

This branch was successfully deployed

1 active deployment
Preview — 60d5196e Deployed Jul 16, 2026 by vercel[bot]
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/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants