2.2 KiB
2.2 KiB
Acceptance: single-react-harness-run-context
实现结果
- 新增显式
RunContext、取消信号、deadline 检查、Run Lifecycle 和 first-terminal-wins。 - 新增 caller-supplied limits、线程安全 Model/Tool/Token/Run bytes 预算和容量 CAS。
- 新增 strict typed retry policies/executor,记录每个实际 attempt 并阻止取消/预算异常误重试。
- 新增无 Redis 依赖的 ToolCallKeyFactory,精确保留框架 Tool Call ID。
- Spring AI
spring.ai.retry.max-attempts设置为 1;未修改 provider/model routing。 - 未接入旧 Chat/AIOps/Controller、ThreadLocal、JPA、Redis、Agent 或公开协议。
静态验证
openspec validate single-react-harness-run-context --strict:通过。- 新 Harness 包
rg:无 ThreadLocal/current-holder/Redis 引用。 - 旧 Chat/AIOps/Controller/JPA 调用链 diff:为空。
- 受保护配置检查:仅新增
spring.ai.retry.max-attempts: 1,model routing/provider 保持不变。
脚本验证
mvn -q -DskipTests compile:通过。- Core focused suite:通过。
- 综合回归 suite(阶段 0/1 契约 + 阶段 2 Core + ChatController):通过。
浏览器/人工验证
- 不适用。本阶段没有 UI、Controller、SSE 或公开协议变化。
未验证
- 未执行真实模型调用、Redis、CLS、MySQL 或客户端断开 live E2E;这些属于后续 Tool store/adapter/最终 E2E 门禁。
- 未将 RunContext 接入旧 ChatService;这是本阶段明确非目标,阶段 6A 才接入。
RunContext取消对已进入的同步第三方调用仍是协作式;实际 HTTP/JDBC future 取消留给后续 adapter。- Provider 侧凭据轮换状态不由仓库证明。
剩余风险与后续门禁
- 关闭 SDK 隐式 retry 会使旧路径瞬时错误不再自动重试,直到后续 Router/SemanticGuard 接入 Harness;该变化已记录并可通过恢复配置回滚。
- 下一阶段 3A 必须在 ToolInterceptor 接收 RunContext 和框架 Tool Call ID,直接复用 Key/Capacity/Cancellation 门禁。
状态
- Stage acceptance: accepted
- OpenSpec archive: archived at
openspec/changes/archive/2026-07-21-single-react-harness-run-context - Main spec sync:
openspec/specs/diagnosis-harness-run-context/spec.md(8 added requirements)