# Chat Diagnosis StateGraph Routing Skeleton ## Why 阶段 0 已归档 ISS-011 的 StateGraph 设计基线,但仓库尚无可编译的 StateGraph 实现,也没有证据证明锁定的 Graph Core `1.1.2.0` 能按冻结条件边、追加事件策略和循环上限工作。阶段 1 需要用 Fake Node 建立不接真实模型、不会进入生产入口的路由骨架,为后续真实 Node 接入提供稳定内部接口。 ## What Changes - 新增 Diagnosis Graph State key、Node、route、status/verdict 常量和类型。 - 在现有 Spring AI Alibaba BOM 管理下显式声明 Graph Core 直接依赖,避免依赖 Agent Framework 的传递关系。 - 新增可注入 config-aware Node action ports 的 StateGraph 编译工厂。 - 实现阶段 0 冻结的完整条件边、三类技术重试上限、一次 evidence retry 和 recursion limit。 - 为 `orchestration_events` 配置 AppendStrategy,其余字段默认 ReplaceStrategy。 - 新增有界 event、transition 和 orchestration trace builder。 - 使用 Fake Node 单元测试覆盖正常、重试、失败、Gatekeeper、LOW_CONFID、Fallback、循环上限和 trace 顺序。 本 change 不接入 ChatService 或任何真实 Agent/Service。 ## Capabilities ### New Capabilities - `chat-diagnosis-stategraph-routing-skeleton`:提供未接生产入口的 StateGraph 状态、拓扑、路由、有限循环和编排 trace 构造能力。 ### Modified Capabilities - 无。阶段 0 设计基线保持不变;如果实现发现 API 冲突,必须先回写本 change,而不是静默改变基线语义。 ## Scope ### In Scope - 包 `com.superbiz.agent.graph.diagnosis` 下的纯 Java Graph 骨架。 - `pom.xml` 中 Graph Core 的直接编译依赖;版本继续由现有 BOM 锁定为 1.1.2.0。 - Planner、Executor、Gatekeeper、Verified Input、Verifier、Evidence Retry、Composer、Fallback Node action ports。 - `orchestration_events` Append 策略和紧凑 trace builder。 - Fake Node route tests,使用 `RunnableConfig.threadId` 执行。 - recursion limit=32;业务计数仍是主要终止机制。 ### Out of Scope - ReactAgent Adapter、Prompt、ToolCallback、Skill 或模型调用。 - 调用 `ExecutorGatekeeperService` 或读取数据库 ToolInvocation。 - 修改 `ChatService`、`VerifierInputHook`、`VerifierContextHolder`。 - Flyway、`DiagnosisRun`、Trace DTO/API 或持久化。 - 删除旧 Sequential 实现或测试。 - Maven E2E、`logs/` 和数据库核验。 ## Context Constraints - 必须引用阶段 0 archive,不得改变其路由、安全或 run ownership 语义。 - 使用本地已验证的 Graph Core `1.1.2.0` API,不依赖未锁定版本示例。 - Graph action ports 使用 `AsyncNodeActionWithConfig`,为阶段 2 显式传递 run config 留出接口。 - Executor 不重试;Planner/Verifier/Composer 各最多一次技术重试;整个 Run 最多一次 evidence retry。 - Unknown/null status 必须 fail closed 到 Fallback。 - Fake nodes 只存在于测试代码,生产骨架不得包含模拟业务输出。 - 阶段 1 不改变任何外部 API 或当前生产路径。 ## Acceptance - Graph 可编译,默认 Replace、events Append,recursion limit 为 32。 - PASS 正常路径到 Composer/END,events 与 transitions 顺序一致。 - Planner INVALID_OUTPUT/RETRYABLE_FAILED 首次自重试,第二次或 NON_RETRYABLE_FAILED Fallback。 - Executor COMPLETED 进入 Gatekeeper;INVALID_OUTPUT/TOOL_BLOCKED/FAILED Fallback 且从不重试。 - Gatekeeper PASS 和有 binding 的 LOW_CONFID 进入 Verified Input;REJECT、unknown、零 binding LOW_CONFID Fallback。 - Verifier 技术失败首次自重试;PASS/REJECT 到 Composer;满足全部 guard 的 LOW_CONFID 只补证据一次;其余 LOW_CONFID 到 Composer。 - Composer 技术失败首次自重试,耗尽或不可重试进入 Fallback。 - Evidence retry 进入新 Planner 阶段时重置 planner retry count,且不影响其他技术计数。 - 每个测试路径能构造 bounded orchestration trace,无未定义条件边或无限循环。 - focused unit tests 和 Maven test-compile 通过;不运行 Maven E2E。 ## Risks - Graph Core 的 state merge/conditional-edge 细节可能与 API 签名表面不同;用真实 CompiledGraph Fake Node tests 验证。 - Node action 若忘记写 status/event,路由必须 fail closed,测试覆盖 null/unknown。 - 通用骨架若掺入真实 Agent 语义会污染阶段边界;本 change 只定义 ports 和确定性路由。 - 32 次 recursion limit 是保险,不替代显式计数。