# Acceptance: single-react-aci-tool-contracts ## 实现结果 - RAG Contract:最小 query Request、bounded document evidence Result。 - Log Contract:逻辑 Topic/Lookback Request、Mock provenance、Scope/Pattern/Event Result。 - MySQL Contract:逻辑 data source、参数化 SQL Request、bounded structured rows Result。 - 共享 Contract:snake_case Tool 名称、ACI 描述、不可变集合 helper,复用阶段 0 两套状态枚举。 - 旧 Tool、Chat/AIOps、Controller、持久化、数据源和公开协议未修改。 ## 静态验证 - `openspec validate single-react-aci-tool-contracts --strict`:通过。 - `openspec instructions apply --change single-react-aci-tool-contracts --json`:12/12 tasks complete。 - `rg` 引用检查:新 contract 生产包未接入旧运行链路。 - 受保护文件 diff scope:旧 Tool、Chat/AIOps、Controller、Repository、resources 均为空。 ## 脚本验证 - `mvn -q -DskipTests compile`:通过。 - `mvn -q '-Dtest=RagToolContractTest,QueryLogsToolContractTest,MysqlToolContractTest' test`:通过。 - `mvn -q '-Dtest=HarnessContractTest,LookupKnowledgeToolTest,QueryLogsToolsTest' test`:通过。 ## 浏览器/人工验证 - 不适用。本阶段无 UI、Controller、SSE 或公开运行行为变化。 ## 未验证 - 未执行 live LLM/Redis/CLS/MySQL E2E;本阶段没有接入这些运行路径,最终 live E2E 按 ISS-014 门禁留到阶段 7。 - 未验证 ToolInterceptor 的真实 ID 传播;阶段 2/3A 必须以 `ToolCallRequest.getToolCallId()` 添加集成测试。 - 未验证真实日志 adapter 的 `SourceKind` 扩展;本 Issue 首版明确只使用 Mock。 - Provider 侧旧凭据轮换仍需凭据所有者完成,仓库只能证明明文已移除。 ## 剩余风险与后续门禁 - 新旧 Contract 短期并存,阶段 3B/3C 接入前不得声称旧 Tool 已符合新 ACI 输出。 - 下一阶段只能在本 change OpenSpec Archive 和 Git commit 完成后开始。 ## 状态 - Stage acceptance: accepted - OpenSpec archive: archived at `openspec/changes/archive/2026-07-21-single-react-aci-tool-contracts` - Main spec sync: `openspec/specs/aci-evidence-tool-contracts/spec.md`(7 added requirements)