# Acceptance: single-react-tool-invocation-store ## 实现结果 - 新增 canonical record/limits/exceptions/store interface/Redis JSON adapter。 - 新增 ToolBoundary envelope/result、executor/projector interfaces 和稳定错误码。 - 实现 preflight、Run/Tool budget、Run capacity、PROJECTING、READY/ERROR、evidence semantics、TTL 和 UTF-8 limits。 - 旧 ToolInvocationRecorder、JPA、Chat/AIOps、Controller、Repository 和公开协议未修改。 ## 静态验证 - `openspec validate single-react-tool-invocation-store --strict`:通过。 - 新 Harness 包 Redis 引用仅为 `RedisCanonicalInvocationStore`。 - legacy recorder/JPA/Chat/AIOps/Controller/repository/resources diff:为空。 - staged diff check 与 Secret scan:提交前执行并通过。 ## 脚本验证 - `mvn -q -DskipTests compile`:通过。 - `mvn -q '-Dtest=CanonicalInvocationStoreTest,ToolBoundaryTest' test`:通过。 - 综合阶段 0/1/2/3A suite(含 Harness/ACI/Core/retry/key/config/ChatController):通过。 ## 浏览器/人工验证 - 不适用。本阶段没有 UI、Controller、SSE 或公开协议变化。 ## 未验证 - 未连接真实 Redis,未做 ACL/network/TTL live 验证;最终 E2E 阶段执行。 - 未接入 Alibaba ToolInterceptor,真实框架 ID 传播留给后续 Agent/application stage。 - 未实现 RAG/log/MySQL projector,留给 3B/3C。 - canonical update 的 read-TTL-write 并发窗口已记录为风险,尚未 Lua/CAS 化。 ## 剩余风险与后续门禁 - 新旧 JPA audit 与 canonical store 短期并存,后续 projector 必须只以新 boundary 的 READY record 作为引用来源。 - 下一阶段 3B/3C 必须复用本 ToolBoundary,不复制 Redis 状态机。 ## 状态 - Stage acceptance: accepted - OpenSpec archive: archived at `openspec/changes/archive/2026-07-21-single-react-tool-invocation-store` - Main spec sync: `openspec/specs/canonical-tool-invocation-store/spec.md`(7 added requirements)