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

vercelBot commented Jul 16, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJul 16, 2026 11:25am

Request Review

@github-actionsgithub-actionsBot 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 mainJul 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@claude