Repository navigation
排查「手抄 spec 清单 + "keep in sync" 注释」模式:一天内确认三例,全部曾静默漂移 #3786
Copy link
Copy link
Closed
Description
Activity
- added a commit that references this issue
on Jul 30, 2026 - added 4 commits that reference this issue
on Jul 30, 2026 objectui 侧(本 issue 点名的「重点嫌疑」)排查完结 —— objectui#3017 记录扫描结果:六处候选、当时全部内容一致、零闸门。现已全部落地:
- Add metamodel interfaces for ObjectQL/ObjectUI contract #1/✨ Set up Copilot instructions #2(重述 spec 已导出常量的两处:
ACTION_LOCATIONS、APPROVER_VALUE_SOURCES)→ objectui#3019 删掉第二份清单、直接 import;label 走Record<ActionLocation, string>,漏新值即编译错误。 - Implement ObjectStack protocol specification with Zod schemas and TypeScript interfaces #3–Migrate from npm to pnpm #6 → objectui#3043:
DesignerFieldType词汇改为运行时数组派生,bridge 的 27 型 Set 与FieldDesigner调色板由此不可漂移;- 审计四列单一来源落
@object-ui/types;detail 页HIDDEN_SYSTEM_FIELD_NAMES进一步改为 specFIELD_GROUP_SYSTEM_FIELDS− 审计集 派生; REFERENCE_IMPORT_TYPES与服务端同链:REFERENCE_VALUE_TYPES+'reference';- 布尔 token 表无 spec 导出、无法派生 → 按 fix(spec,rest): 手抄清单排查 — 元数据表单 ↔ Zod 对账闸门 + 五处静默漂移 (#3786) #4120 模板加「不相交 + 归一化 + 钉扎清单」闸门。
- 表格之外又捞出三处同种拷贝,一并处理:
FIELD_TYPE_CATEGORIES/CATEGORY_ORDER类目划分(tsc 只保证成员合法、不保证全覆盖,新类型会静默从类型下拉消失)、MetadataFieldsPage的又一份 27 型手抄(变异测试炸出来的)、multiValueFields与 specMULTI_OPTION_TYPES/MULTI_CAPABLE_TYPES逐项相同的两个 Set。 - 变异测试(按 fix(spec,rest): 手抄清单排查 — 元数据表单 ↔ Zod 对账闸门 + 五处静默漂移 (#3786) #4120 方法论):七处注入漂移 → 13 个测试失败覆盖全部五个闸门文件,编译闸门同步引爆(TS2353/TS2322/TS2769/TS2339);回滚后全绿。行为零变化。
附带收益:objectui 现在真实消费
FIELD_GROUP_SYSTEM_FIELDS做派生与子集断言 —— spec 这个词汇一动,objectui CI 会红,跨仓 tripwire 从此通电。遗留一项跨仓待办:布尔 token 表(
import-coerce.ts的BOOL_TRUE/BOOL_FALSE)仍是 spec 未导出的唯一手抄残留,已单开 #4173 跟踪;导出落地后 objectui 即可删掉最后一份钉扎清单。至此三仓扫描均有着落:framework(#4120)、cloud(cloud#898 及其变种)、objectui(objectui#3017)。
- Add metamodel interfaces for ObjectQL/ObjectUI contract #1/✨ Set up Copilot instructions #2(重述 spec 已导出常量的两处:
- added 7 commits that reference this issue
on Jul 30, 2026 12 remaining items
- added a commit that references this issue
on Aug 17, 2026 - added a commit that references this issue
on Sep 2, 2026 - added a commit that references this issue
on Sep 10, 2026 - added a commit that references this issue
on Sep 17, 2026 - added a commit that references this issue
on Sep 17, 2026 - added a commit that references this issue
on Sep 20, 2026 - added 5 commits that reference this issue
on Oct 7, 2026
Metadata
Metadata
Assignees
Labels
No labels
2026-07-28 一天之内,同一个缺陷形状确认了三例 —— 消费方手抄一份 spec 拥有的清单,注释写着"保持同步",没有任何机制保证 —— 且每一例都真的漂移过、都是静默失效(能力缺席,无报错):
sys_invitation.role/sys_member.role选项KNOWN_METADATA_CATEGORIESvsPLURAL_TO_SINGULARpositions[]在发布/导出时被静默丢弃,托管环境整体缺席docs/books/themes等被丢弃另有一个刚出现的小型变种:cloud#898 自己的
CLOUD_ONLY_METADATA_CATEGORIES把triggers归类为"cloud 特有",而它实为 frameworkMETADATA_ALIASES的键(triggers: 'hooks')—— 修手抄漂移的那次修复里又埋了一处小的分类手抄(已单开 cloud issue)。请求:当模式排查,不是当孤立 bug
三例覆盖两个仓库、彼此独立发生,说明这不是巧合而是惯性写法。值得主动扫一遍三个仓库(framework / objectui / cloud),而不是等下一次静默失效自己冒出来:
grep -riE "keep.*in sync|kept in step|保持同步"—— 写了这句注释的地方,几乎就是没有闸门的地方;@objectstack/spec的导出(PLURAL_TO_SINGULAR、METADATA_ALIASES、字段类型清单、内置角色/身份常量等)做交集比对,找出"像是抄的"清单;每找到一处,修法是现成的模板(#3747 / cloud#898):从唯一来源派生;确实无法派生的,加一条「集合覆盖/不相交」断言当闸门。注释不是机制。
按 Prime Directive #10/#12 立项;规模超出单个 PR 的顺手范围,故单开。