Summary

  • draft-wei-capability-language-core-00 把 allow_unresolved 设计成独立结果:引擎识别了约束,但现有求值器或证据尚未回答它。
  • 使用方必须保留规范化的未决集合,逐项求解;任何违反都应拒绝,无法判定也不能放行。把三态枚举压成布尔值,就是扩张权限。
  • 时间窗口即使在某一刻被正确满足,所得 allow 也只能活到窗口终点;缓存不能把瞬时事实改造成长期授权。

漏洞发生在两个组件之间

设想一项自动变更只能在 02:00 至 02:10 执行,并且来源网络必须在批准名单中。CLC 能确认网络,却没有获得可信时钟。它没有凭空猜测,而是返回 allow_unresolved,把时钟条件留在 unresolved 中。

这不是“基本允许”,也不是让上层随意决定的提示语。它表示授权计算尚未闭合。调用方可以取得可信时间、提交 resolution,再调用 Resolve;否则必须拒绝。若 SDK 只暴露 isAllowed,或工作流把非空结果都当成功,最终决定权就从政策作者转移到了适配器作者手中。

这个边界之所以重要,是因为 CLC 有意保持载体中立。JWT、CBOR 或其他原生载体是否可信,不由核心语言替部署者决定;动作是否真正执行,也不在它的证明范围内。它只承诺把共同语言中的判断和剩余工作表达清楚。

能识别,不等于已经求值

修订版 00 识别核心时钟与网络约束的语法。识别意味着实现能够解析、规范化、比较和保留某个条件;并不意味着它拥有可信时钟、实时网络观测或部署所需的求值器。

若把“已知但不会算”的条件静默丢弃,请求离开引擎时反而比进入时拥有更宽的权力。因此草案要求将它保存在未决集合里。同一 scheme/type 下有多个约束时,关系是 AND,不是 OR。只取第一项、最后一项或任意一项,都会重写原政策。

规范化解决的是交接一致性。等价重复项可以折叠,不同义务不能消失;规定的排序基于 UTF-8 字节,而不是运行时顺手采用的字符串顺序。JavaScript 默认的 UTF-16 排序并不能自动替代这个规则。确定性让两套实现看到同一份“未完成清单”,却不会让清单自己完成。

Resolve 不是礼仪性回调

草案给出了第二阶段判断。Resolve 接收原决定与每项未决义务的 resolution。优先级故意偏向拒绝:只要一项 violated,结果就是 deny;全部 satisfied 才是 allow;仍有 unknown,则继续是 allow_unresolved。

畸形 resolution、相互矛盾的材料或无效时间戳应当拒绝。已经终结的 allow 与 deny 不因后来补来的便利数据而被重新打开。证据匹配路径更没有“先放行再说”的状态:不知道就是 UNSATISFIED。

因此审计记录必须能把两阶段连起来:语言版本、原生载体验证、首次枚举、完整未决集合、求值器身份和版本、证据引用、观测时间、逐项状态、最终枚举,以及真正释放的动作。只记录“调用过 resolver”无法说明哪份证据完成了哪次许可。

02:09 的答案不能留到 02:11

回到维护窗口。可信时钟在 02:09 证明当前时刻处于允许区间,Resolve 正确返回 allow。一分钟后,这份答案就到了边界;两分钟后,它已经不再描述现实。

如果缓存键只有主体、资源和动作,而没有约束、上下文、求值时刻与失效点,02:11 仍可能命中绿色结果。原判断并非错误,错误是基础设施把一次瞬时证明变成了长期能力。缓存寿命必须早于所有限时 resolution 中最早的终点;上下文一变,就应重新判断。

RFC 3339 可以统一时间字符串,却不能指定哪台时钟可信、允许多少偏差、谁承担超时后果。这些是部署责任,不能借标准格式外包。

包含关系也不能替未决条件签字

CLC 还描述 capability containment:一项能力是否处在另一项声明权力的范围内。它回答结构边界,不回答“现在是否可用”。一个被正确包含的能力仍可能受未决时间条件限制;一个规范化无误的能力仍可能来自不可信载体;一个最终 allow 也不证明外部系统真的发生了变化。

恒路关于现实层的笔记提供了更精确的分层:能力文本是符号,规范化约束是表示,求值证据来自运行层,行动及其后果又在更后面。把这些层压成一个绿色图标,只会让形式最整齐的记录冒充最终事实。

最小初始规范的价值正在于克制:统一枚举、残余义务和交接语义,把原生信任、证据来源与后续决定留给负责任的本地机构。运行代码能证明算法可以重算,却不能替代独立验证。

修订版 00 报告 123 个 conformance vectors、1,184 个 property cases 和三个实现。这些是有用的工程证据,但列出的实现共享作者,草案所说的独立实现门槛仍未满足。下一步应由独立团队重跑语料,特别测试枚举绑定、重复约束、UTF-8 排序、未知 resolution、错误时间与窗口终点缓存,而不是先把互操作写进采购结论。

Sources and limits

这些来源证明的是一份活跃的个人 Internet-Draft、公开语料与相关规范,不证明 IETF 共识、RFC、工作组采纳、独立安全审查、广泛部署、可信载体验证或行动结果。本文只占有修订版 00 中“已识别但未求值”的约束通道、Resolve 闭环与时间窗口失效边界。