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

feat(spec,cli): enroll view in the liveness ledger (#2998 Track B)#3046
os-zhuang merged 1 commit into
mainfrom
claude/formviewschema-button-defaults-77q7fs

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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

变更内容

  • view 入册:check-liveness.mtsGOVERNED 增加 '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.responsivelist.performanceform.dataform.defaultSortform.aria —— 除 form.aria(良性 a11y 元数据,按 README 规则不打扰作者)外全部标注 authorWarn + authorHint。二级残留(userActions.buttonsaddRecord.mode/formViewtabs[].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#2545objectstack-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
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