Skip to content

一致性 ​

一致性是第三方可以重复验证的可观察行为,不是对一个包名的信任。实现者应保存夹具、请求、环境与结果,并明确没有验证的范围。

实现角色 ​

角色最低要求
Surface 实现实现 describe、invoke、包络校验、能力交集、执行透传与稳定错误
客户端发送合法包络,区分协议失败与业务失败,不复用业务调用 id
传输适配器正确验证调用方、传递请求、限制大小、保持关联与撤消失效
委托适配器满足凭证生命周期、作用域、撤销与安全视图不变量

一个部署可以承担多个角色,但每个角色仍应分别测试。通过客户端测试不能证明服务端授权正确,反之亦然。

必须覆盖的用例 ​

一致性测试至少包括:

  1. 正确版本的 describe 返回能力与有界上下文。
  2. 未知版本返回 PROTOCOL_VERSION_UNSUPPORTED。
  3. 未知方法返回 METHOD_NOT_SUPPORTED。
  4. 缺少 id、protocol 或非法 input 返回 INVALID_REQUEST。
  5. 未暴露能力不出现在描述中,且 invoke 返回 CAPABILITY_NOT_EXPOSED。
  6. 折叠动作只接受当前可引用记录 id。
  7. 成功 invoke 的业务错误保留在 result.error。
  8. 会话缺失、过期、撤销或非法时,执行器没有被调用。
  9. 限流和防重放命中时没有业务副作用。
  10. after 不超过声明上限,不包含凭证或审批秘密。
  11. 审计事件不包含原始参数、响应正文与 token。
  12. 导航或作用域变化后,旧描述不再作为授权依据。

测试方法 ​

使用一个夹具页面,包含:

  • 一个只读能力;
  • 一个带 schema 的写入能力;
  • 一个折叠记录动作;
  • 一个需要确认的危险动作;
  • 一个当前不可用动作;
  • 一个被会话作用域排除的动作。

用固定请求向量运行客户端与服务器,记录响应和业务状态。每次拒绝都要断言业务处理函数未被调用。对异步执行使用确定性时钟或注入的限流 / 重放适配器,不要依赖真实等待。

结果声明 ​

可以声明“通过仓库内 packages/surface/test/surface.test.ts 的 0.1 向量”,不能仅凭此声明“符合 Pling 标准”。当前没有公开认证项目,也没有独立验证的第二套实现。

如果有部署专属行为,例如自定义限流、SSO 或审计 sink,应单独列出测试证据。不要用一个本地内存测试代表生产多副本行为。

版本与扩展 ​

未来新增方法或可选字段时,一致性套件应区分基础要求与扩展能力。旧实现不支持扩展时返回稳定错误,不能静默忽略。新版本发布前应保留旧客户端测试,证明不兼容变更被明确拒绝。