Files
SuperBizAgent-java/devflow/projects/2026-07-21-single-react-harness-run-context/evidence.md
T

1.8 KiB
Raw Blame History

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 补足核对。