按维护者指示上行立卡(2026-08-31,hotcrm#1069 决裁,逐字:「1069 如果是平台的问题就提交平台卡片。」)。
实测事实(hotcrm#1069 + 其工具对比评论,双驱动同判,可运行复现在 hotcrm test/quote-contact-required-when.test.ts 与 test/quote-discount-ceiling.test.ts)
requiredWhen 只在「谓词变为真的那次写入」或「清空字段的那次写入」校验。规则生效前已处于门内状态的行:改任意字段、状态在门内推进(presented → accepted)全部放行 —— 而 accepted 在规则自己的条件里。对照:draft → presented 拒、生而 presented 的 INSERT 拒、清空字段拒 —— 边触发精确成立;- 字段级
max/min 同侧:存量 90 的折扣在 60 上限下,改无关字段、推进状态均放行(修复性写入亦放行); validations[] 的 type:'script' 规则是真不变量:每次写入对合并后记录重评,存量违规行在任何编辑上被拒、修复性写入放行 —— 冻结而不砖死。
两种语义都是刻意的,⛔ 本卡不要求改任何一种:「只校验所写内容」使新增规则不砖存量(#1017 裁决要求的 no-silent-breakage);「校验合并记录」提供真不变量。缺的是平台没有任何一处写明这条边界与工具选择 —— 「required when X」的自然读法是不变量,AI 作者会静默选错工具:hotcrm 三条散文读作不变量的规则(win/loss_reason、lead 重复回指、quote 联系人)全部用了转换门工具,零信号。
交付物(平台侧文档/教学,statement of the boundary)
- spec docblock:
requiredWhen 键与字段级 bounds 的声明处,各一段写明转换语义(以上表为例);validations[] script 的声明处写明不变量语义与「冻结不砖死」行为; - 发布 skills(教应用作者那套):工具选择行 ——「要不变量(X 永不得超过 Y)⇒
validations[] script,代价是存量违规行冻结至修复;要转换条件(到达状态 S 时 X 须已备)⇒ requiredWhen / 字段 bounds,代价是先于规则的存量行放行」。受管面照旧; - 可选(先估价):
evaluateValidationRules 处的实现注记互链。
⛔ 范围外:改语义;「不变量捷径」类新 affordance(有拉力另立设计卡)。
Refs: hotcrm#1069(测量原卡)· hotcrm#1017(转换语义的受益方)· 今日应用仓三原则 objectstack#13848(应用不自建平台级机制,平台统一教)。
按维护者指示上行立卡(2026-08-31,hotcrm#1069 决裁,逐字:「1069 如果是平台的问题就提交平台卡片。」)。
实测事实(hotcrm#1069 + 其工具对比评论,双驱动同判,可运行复现在 hotcrm
test/quote-contact-required-when.test.ts与test/quote-discount-ceiling.test.ts)requiredWhen只在「谓词变为真的那次写入」或「清空字段的那次写入」校验。规则生效前已处于门内状态的行:改任意字段、状态在门内推进(presented → accepted)全部放行 —— 而accepted在规则自己的条件里。对照:draft → presented拒、生而presented的 INSERT 拒、清空字段拒 —— 边触发精确成立;max/min同侧:存量 90 的折扣在 60 上限下,改无关字段、推进状态均放行(修复性写入亦放行);validations[]的type:'script'规则是真不变量:每次写入对合并后记录重评,存量违规行在任何编辑上被拒、修复性写入放行 —— 冻结而不砖死。两种语义都是刻意的,⛔ 本卡不要求改任何一种:「只校验所写内容」使新增规则不砖存量(#1017 裁决要求的 no-silent-breakage);「校验合并记录」提供真不变量。缺的是平台没有任何一处写明这条边界与工具选择 —— 「required when X」的自然读法是不变量,AI 作者会静默选错工具:hotcrm 三条散文读作不变量的规则(win/loss_reason、lead 重复回指、quote 联系人)全部用了转换门工具,零信号。
交付物(平台侧文档/教学,statement of the boundary)
requiredWhen键与字段级 bounds 的声明处,各一段写明转换语义(以上表为例);validations[]script 的声明处写明不变量语义与「冻结不砖死」行为;validations[]script,代价是存量违规行冻结至修复;要转换条件(到达状态 S 时 X 须已备)⇒requiredWhen/ 字段 bounds,代价是先于规则的存量行放行」。受管面照旧;evaluateValidationRules处的实现注记互链。⛔ 范围外:改语义;「不变量捷径」类新 affordance(有拉力另立设计卡)。
Refs: hotcrm#1069(测量原卡)· hotcrm#1017(转换语义的受益方)· 今日应用仓三原则 objectstack#13848(应用不自建平台级机制,平台统一教)。