Skip to content

[spec/cli] 对象 enable.files/trackHistory/activities/feeds 为 dead property:schema 接受、liveness 仅告警不拦 #2707

Description

@baozhoutao

概述

ObjectSchema.create({ enable: { files, trackHistory, activities, feeds } }) 这些对象级 flag 在编译期被 liveness 标为 dead(无运行时效果),但 schema 照样接受、typecheck 不报错——作者以为设了就有附件/历史,实际什么都没启用,直到读编译 ⚠ 才发现。

定位

  • packages/spec/src/data/object.zod.ts:47-80 —— zod 接受这些字段。
  • packages/cli/src/.../lint-liveness-properties.ts:108 —— liveness 仅 ⚠ 告警,不 fail。

期望(二选一,让约束一致)

  • 要么从 schema 移除这些 dead 字段 / typecheck 直接报错,并在文档指向正确写法(Field.file / Field.trackHistory / sys_activity);
  • 要么让这些 flag 真正生效(对象级开关映射到对应能力)。

来源(项目 dogfood):steedos-labs/os-tianshun-mtc#34

Activity

  1. self-assigned this
    on Jul 10, 2026
  2. os-zhuang commented on Jul 10, 2026

    @os-zhuang
    Contributor

    评估结论:四个 flag 并不同质,处置="分 flag 接线(enforce),不移除"

    事实核查发现 issue 的前提有一处重要修正:

    • enable.trackHistory 不是 dead —— objectui RecordDetailView.tsx 自 2026-05(commit 6240066)起用 enable?.trackHistory === true 门控整个 History 标签页。ledger 条目(2026-06-16 feat(rest): enforce object enable.apiEnabled / apiMethods (ADR-0049 #1889) #1937 写入)漏看了这个已存在一个月的消费者;按 ledger 自己的 README 规则,objectui 消费者算 live 证据。更糟的是原 authorWarn hint 教作者"删掉对象 flag 改用 Field.trackHistory"——照做会把 History 标签页弄丢,反向误导。
    • feeds/activities 作为闸门是 dead,但它们命名的能力(sys_comment feed / sys_activity timeline)一直在无条件运行(plugin-audit 对所有非 SKIP 对象写;详情页无条件渲染)。所以正确修法是把现有面接到 flag 上,而非移除。
    • files 是唯一两层都无消费者的真 dead flag。

    "从 schema 移除"不可行:(a) trackHistory 是 live 的;(b) spec 在 fixed 版本组,移字段=全平台 major(ADR-0059 §4);(c) examples/app-todo 和下游都在用。"liveness 告警升级成 error"也不对:advisory-only 是该 lint 写明的设计决定,修复路线是 enforce 而不是把警告变错误。

    已落地(PR #2733 + objectui#2370)

    flag 处置
    activities opt-out writer 闸门:默认 true,显式 false 停 sys_activity 镜像(审计行不受影响)——也是 ADR-0057 的按对象增长控制杆
    feeds opt-out + 服务端强制:显式 false → sys_comment 创建 403 FEEDS_DISABLED(fail-closed);UI 隐藏讨论面板
    trackHistory ledger 纠错 dead→live;契约成文:对象 flag=History 标签页总开关,Field.trackHistory=diff 选择器,审计采集无条件(合规)
    files 保持 dead+authorWarn,describe() 如实标注 RESERVED;通用 Attachments 面板 roadmap → #2727

    默认值 false→true 翻转是 opt-out 语义的必要条件(default(false) 会把"没设"编译成显式 false,无法区分作者显式关与默认)。收口后编译期 authorWarn 只剩 enable.files 一条(app-todo 实测 4→1)。

    运行时端到端已验证(fresh showcase):默认对象 activity 镜像+评论 201 不变;feeds:false, activities:false 探针对象 0 条 activity 镜像、1 条审计行、评论 403。

    顺带:pre-flight 发现 main 上存量红测试(PROTOCOL_MAJOR 12 vs 13),已单独报 #2729。

  3. added a commit that references this issue on Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions