Files
T

78 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chat Diagnosis StateGraph Design Freeze
## Why
ISS-011 将复杂 Chat 诊断从 `SequentialAgent + ChatService` 隐式状态机迁移到 Spring AI Alibaba `StateGraph`。在进入任何运行时代码实现前,需要先把跨节点状态、全部条件边、有限重试、安全降级、审计边界和旧测试替换范围冻结为单一、可引用的设计契约,避免后续五个独立 sm-flow 对同一行为产生不同解释。
## What Changes
本 change 只交付阶段 0 的设计冻结:
- 冻结最小 Graph State 及 Replace/Append 更新策略。
- 冻结 Planner、Executor、Gatekeeper、Verifier、Composer、Evidence Retry、Fallback 的全部条件边和终止路径。
- 冻结 Planner/Verifier/Composer 技术重试与 evidence retry 的独立计数和最大次数。
- 冻结 Gatekeeper 后的 Verifier 白名单输入、安全 Fallback 和 Run 状态语义。
- 冻结 `orchestration_events -> diagnosis_run.orchestration_trace -> run.orchestrationTrace` 的审计边界。
- 冻结旧 Sequential 测试的替换范围和必须保留的安全回归边界。
- 形成供阶段 1–5 各自独立 OpenSpec change 引用的长期决策记录。
本 change 不修改 Java、SQL、Prompt、配置或运行时行为。
## Capabilities
### New Capabilities
- `chat-diagnosis-stategraph-design-freeze`:为阶段 1–5 提供版本化、可审计的 StateGraph 设计基线,覆盖状态、路由、重试、安全降级、审计和测试迁移边界。
### Modified Capabilities
- 无。当前运行时 capabilities 只在对应实现阶段修改,避免阶段 0 归档后主规格提前宣称代码已切换。
## Scope
### In Scope
- `mvp/issues/active/ISS-011-chat-diagnosis-stategraph-orchestration.md` 中阶段 0 的设计结论。
- `devflow/glossary/CONTEXT.md` 中 Diagnosis Orchestration Trace 和 Verifier verified-evidence 边界。
- 阶段 0 的 OpenSpec 设计、设计验收 spec、可执行文档任务和 devflow/ADR 档案。
- 对最终目标的 L4 接口影响、迁移、回滚、兼容性与消费者边界做设计级记录。
### Out of Scope
- 创建 StateGraph、Node、Adapter、路由或测试代码。
- 修改 ChatService、Hook、Gatekeeper、Agent、Prompt 或工具。
- 数据库迁移和 Trace DTO/API 修改。
- 运行 Maven E2E、日志核验或数据库核验。
- 把阶段 1–5 的实现任务放入本 change。
- SupervisorAgent、持久 Checkpointer、HITL、并行 Agent/工具或 AIOps 公共 Graph。
## Context Constraints
- `runId` 是一次 Diagnosis Run 与 Trace 的所有权边界;编排摘要不得写入 session 级数据。
- Gatekeeper 引用真实性检查和 `checked_bindings` 是 verified evidence 的唯一事实来源,不得在 Verifier Input Builder 重复实现另一套验真规则。
- Composer 只能消费 Verifier 允许材料;前置验证失败的固定 Fallback 不得泄漏 Executor claim。
- `/api/chat`、`executor_evidence_v2`、Verifier 输出协议和 Composer 输出协议保持兼容。
- 最终 Trace API 只在 `run.orchestrationTrace` 增加解析对象;数据库只新增 nullable JSON `diagnosis_run.orchestration_trace`。
- 不保留长期 Sequential/StateGraph 双轨或运行时切换开关。
- 锁定依赖版本 `spring-ai-alibaba-graph-core:1.1.2.0` 已通过本地 JAR API 核验,后续实现不得使用未经锁定版本验证的示例签名。
## Acceptance
- 最小 Graph State 中每个字段都有所有权、用途和更新策略。
- 每个节点状态都有唯一条件边;所有循环均有显式上限和终止路径。
- Planner、Verifier、Composer 技术重试各自最多一次,且与最多一次 evidence retry 分开计数。
- Executor 不重试;Gatekeeper REJECT 与零可信 binding 直接进入不泄漏 claim 的固定 Fallback。
- PASS 与可继续的 LOW_CONFID 都经过 verified-input builder;Verifier 不接收完整 `tool_trace_summary`。
- `orchestration_trace`、`self_evaluation`、`agent_step`、`tool_invocation` 和 Graph checkpoint 的职责不重叠。
- 旧测试替换清单明确区分应替换的实现测试与必须保留/扩展的契约测试。
- 不存在“待讨论决策”、未定义循环或没有终止路径的分支。
- 本阶段无运行时变化,因此不新增或运行单元测试;使用 OpenSpec strict validation、结构检查与文档一致性检查验收。
## Risks
- 阶段 0 只冻结设计,主分支运行时仍是 Sequential;后续阶段不得把设计文档状态误认为已实现状态。
- 六个独立 changes 可能发生契约漂移;每个后续 Discover 必须读取本 change 的 archive 和 devflow 决策,并在 Commit gate 对照冻结契约。
- 现有主 OpenSpec 仍描述旧 `tool_trace_summary` 和外层 LOW_CONFID round;只有对应运行时切换阶段才能修改并归档这些运行时 specs。
- 最终设计属于 L4 影响;阶段 0 必须记录迁移/回滚,但不能以文档完成替代后续代码和最终 E2E 证据。