商城与库存风险工作表
Status: Non-normative examples(非规范性示例)
适用:ACC v1,规范修订 1.0.5
这两份合成 OpenAPI 服务展示业务前提下的评审选择,不是通用零售风险评级、已实现服务或跨系统执行证据。实际业务所有者在采用前需要审阅自身数据、后果、权限和审批规则。不能仅从 HTTP 动词或名称推断风险。
示例业务前提
一个商品租户使用固定币种。所有操作需要可信主体,业务系统仍独立检查该主体的当前权限。草稿编辑不能影响已上架商品,不能改价或调整库存。上架与库存调整每次都需要审批。改价采用示意性的绝对价格条件,并叠加权威的折扣和毛利策略;ACC 高风险本身不规定一种通用审批流程。
示例服务的 description 描述假设实现应履行的职责,YAML 本身不执行这些职责。对象 ID 限定在各自服务及租户中,同名或相同 ID 不会关联跨系统权限。示例不包含凭据或真实服务地址。
各操作的评审选择
下表每项都是 Example,不新增 ACC 规则。“审阅者”是业务角色,实际采用时应指定责任人。
| 操作与对象 | 单操作合理最坏后果;是否对外生效 | ACC 选择 | 主体与最终 Authority | 自主程度与批量场景 | ACC 之外的参数/累计控制 | 恢复前提 | 审阅者 |
|---|---|---|---|---|---|---|---|
editProductDraft:一个未发布商品 |
草稿文字/图片错误,产生返工;尚未公开 | medium;可信主体;无无条件 ACC 审批 |
已验证编辑者;商品后台校验租户/对象及草稿状态 | 选定任务内允许编辑;100 次变更需单独累计评审 | 可改字段、URL 策略、对象集、版本冲突;按明确任务策略统计受影响对象及变更尝试 | 业务快照可能支持恢复,但需版本/冲突校验;不是自动回滚 | 商品负责人 |
publishProduct:一个草稿及渠道 |
错误商品公开,可能被购买 | high;approval.required: true |
已验证发布者;业务校验审批人、渠道和上架条件 | 本示例每次调用前人审;任务授权不能绕过 | 冻结目标/渠道/版本;批量发布另设限制 | 下架能限制后续影响,不能撤销既有购买或曝光 | 商品运营负责人 |
changeProductPrice:一个商品 |
经济损失或错误公开价格 | high;price_minor > 100000 触发条件审批 |
已验证定价主体;业务按当前价格、毛利和折扣判断 | 独立定价任务;下文100件商品内容任务禁止使用 | 整数最小货币单位;服务端计算降价;对象/版本核验;按业务状态评估累计价格影响 | 恢复旧价也需新的授权及版本校验;原购买不受撤回 | 定价负责人 |
getStock:一个仓库/SKU |
泄露商业敏感库存;无业务变更 | low;readonly: true;audit.sensitive: true |
已验证读取者;库存系统校验租户/仓库 | 限选定仓库读取;反复读取不授予枚举权限 | 逐对象权限、结果最小化、查询量和导出策略 | 有权限可重读;库存结果可以正常变化 | 库存数据负责人 |
adjustStock:一个仓库/SKU |
超卖或可用量失真,影响订单和履约 | high;delta 条件不命中也无条件审批 |
已验证操作员;库存系统校验审批人及库存规则 | 每次调整人审;与只读库存任务分离 | 非零整数 delta;预留/非负库存;预期版本;累计调整 | 重复 delta 不安全;先核对原操作;补偿调整需审阅当前状态 | 仓储运营负责人 |
审批与参数细节
Normative reference:SPEC §4.6。
approval.required: true无条件生效。库存调整即使delta: 1也触发审批意图,附加条件不能豁免它。required为 false 或省略时,任意条件命中即产生审批意图。价格示例中100001命中、100000不命中;单位是整数最小货币单位,不是界面展示金额。两种结果都不能覆盖业务授权、折扣审批或更严格的运行时策略。"100001"这种字符串不符合整数参数要求,不能隐式转换或当成条件不匹配放行。- 改价接口不接受模型自报折扣比例作为权威依据。降价幅度由服务端按当前价格计算。逐次绝对价格条件既不计算该幅度,也不控制多次调用累计影响。
- 参数留在 OpenAPI
parameters和requestBody中。expected_version是示例业务参数,不是 ACC 字段,也不证明服务端已经实现并发控制。
全部示例写操作声明 idempotent: false,不承诺可安全重试。稳定调用 ID、HTTP 方法或预期版本字段本身不提供业务幂等。若写请求可能已到服务端,应沿原执行关联取得权威结果,再决定后续操作。只读操作可用相同参数重试,但库存观测值可能变化。
一个涉及两个系统的任务
Example 任务:“给选定的 100 件未发布商品更新图片和文案,读取库存核对;禁止改价和调整库存。”
以下 Recommended 实现工作表放在 x-agent-capability 之外:
| 任务项 | 执行前需要确定的内容 | 应检查的证据 |
|---|---|---|
| 原目标 | 已选商品/库存服务身份及各自可信主体、租户;有需要时审阅 SKU 映射 | 未选系统零请求;相同 ID 不切换到其他目标 |
| 允许工作 | 商品草稿文案/图片修改及库存查询;明确商品/仓库集 | 改价、调整库存、编辑已上架商品、集合外对象均被拒 |
| 批量与并发 | 明确预算按对象、调用、变更还是失败计量,派发前原子预占 | 并发不超预算;原调用恢复不能重置或重复扣额度 |
| 人工控制 | 预览任务边界;保留逐操作原审批;意外扩大时暂停新派发 | 暂停能拦住新调用,并准确报告已接受、待处理、失败和结果未知 |
| 完成与恢复 | 保留原目标及执行关联,展示部分完成 | 结果未知的写操作先核对,不能改目标重复执行 |
| 证据与数据 | 脱敏保存必要决策/结果;会话和文件存储策略分别管理 | 凭据不进入日志;业务所需图片 URL 不要求归档所有聊天附件 |
本工作表没有为 ACC 增加 task_budget、autonomy_level 或对象白名单字段。两份声明也不实现跨系统事务或保证回滚。已有语义覆盖和缺少的实现测试见覆盖索引。
校验声明
在已经安装依赖的源码工作区运行:
node bin/acc-validate.mjs examples/openapi-catalog-service.yaml
node bin/acc-validate.mjs examples/openapi-inventory-service.yaml
npm run check
作者校验器检查 ACC 提取及声明/条件诊断,不是完整 OpenAPI 校验器或业务集成测试。仓库新增示例不会自动包含在当前 npm 包的显式文件清单中。