1.8 KiB
1.8 KiB
Evidence: single-react-harness-run-context
文档与依赖证据
- ISS-014 4.2/阶段 2 要求显式
RunContext、deadline、取消、预算、retry、Key Factory 和 no-ThreadLocal 边界。 - 阶段 0/1 OpenSpec 已冻结框架
tool_call_id、两套状态语义和后续阶段串行门禁。 - 本地 Spring AI 1.1.7
SpringAiRetryProperties的@ConfigurationProperties("spring.ai.retry")默认maxAttempts=10;配置已覆盖为 1。
代码证据
SessionContextHolder、TokenUsageHolder、VerifierContextHolder当前是旧链路 ThreadLocal;新com.superbiz.agent.harness包无任何 holder/ThreadLocal/Redis 引用。ChatService.executeChatComplex当前自行创建 run、执行两轮 retry、写diagnosis_run和清理 ThreadLocal;新 Core 不接入该方法,后续应用用例负责迁移。DiagnosisRun仍保留现有字符串状态和 JPA Schema;阶段 2 未修改实体、Repository 或数据库。DiagnosisHarnessCore不保存全局 Run map;RunContext 结构不可变,Cancellation/Budget/Lifecycle 为同一 Run 的线程安全句柄。
Evidence-driven 结论
- first-reason-wins cancellation + first-terminal-wins lifecycle 可以用 AtomicReference 实现并跨异步边界共享。
- 复合 Tool/Token 预算需要同步一致性;Run bytes 用 CAS 预留避免并发超限或部分增长。
- SDK 隐藏 retry 压为一次后,Harness 才能记录 Router/SemanticGuard 的显式 attempt;Tool/Diagnosis/Evidence repair 固定一次。
- Key Factory 可直接复用阶段 3A,但不生成或改写框架 Tool Call ID,也不访问 Redis。
工具限制
codebase-retrieval和 LSP 不在当前工具集中;使用rg、源码阅读、jar/javap、Maven 编译、YAML 解析和 focused tests 补足核对。