64 lines
4.9 KiB
Markdown
64 lines
4.9 KiB
Markdown
# Chat Diagnosis StateGraph Test Suite
|
|
|
|
## Why
|
|
|
|
阶段 1–3 已建立完整 Graph 路由、真实 Node 和 ChatService cutover 测试,但核心覆盖仍分散在 `DiagnosisGraphRoutingTest`、多个单 Node test、真实 Graph integration 和已迁移前的 `VerifierInputHookTest`。阶段 4 需要让测试结构与 ISS-011 的正式架构一致:以 Graph workflow、Node contract、ChatService 外部生命周期三层为权威入口,不继续让 Sequential/Hook 内部实现成为长期约束。
|
|
|
|
## What Changes
|
|
|
|
- 将纯条件边/重试/终止矩阵收敛为 `DiagnosisGraphWorkflowTest`,保留 Fake Node、精确事件序列和有界循环断言。
|
|
- 建立 `DiagnosisGraphNodeContractTest`,以显式输入白名单、status/verdict 分离、Gatekeeper/verified evidence、retry snapshot 和 Fallback 安全材料为跨节点契约。
|
|
- 扩展 `ChatServiceGraphIntegrationTest`,覆盖 public ChatResult、Run/Trace/self-evaluation/Eval、失败生命周期和同 session 多 run 隔离。
|
|
- 删除已被显式 Graph Node 契约替代的 `VerifierInputHookTest`,但阶段 4 不删除生产 Hook/ThreadLocal 类型;生产清理仍属于阶段 5。
|
|
- 保留 Gatekeeper、Controller、Trace、Repository、Composer、protocol parser、no-evidence、REJECT 和 Eval 的独立安全回归。
|
|
- 增加覆盖矩阵/源级检查,证明 Issue 阶段 4 的必需路径均有权威测试且不存在固定 Sequential 顺序断言。
|
|
|
|
## Capabilities
|
|
|
|
### New Capabilities
|
|
|
|
- `chat-diagnosis-stategraph-test-suite`:规定 Diagnosis Graph 的 Workflow、Node Contract、ChatService Integration 三层测试体系、必需路径矩阵和旧实现测试退役边界。
|
|
|
|
### Modified Capabilities
|
|
|
|
- `chat-diagnosis-stategraph-design-freeze`:将已冻结的“route/node-contract/Chat integration 替换旧 Sequential/Hook 测试”要求落实为具体权威测试类和保留回归集合。
|
|
|
|
## Scope
|
|
|
|
### In Scope
|
|
|
|
- 测试类重命名/收敛、跨节点契约测试、ChatService integration 分支补齐、覆盖矩阵和测试辅助夹具复用。
|
|
- 删除 `VerifierInputHookTest`,避免已退出生产路径的隐式 Gatekeeper/ThreadLocal payload 继续约束新架构。
|
|
- 运行新的 Graph suite 与必须保留的 Controller/Trace/Repository/Gatekeeper/Composer/Eval 回归。
|
|
|
|
### Out of Scope
|
|
|
|
- 不改变生产 Graph 路由、Node、ChatService、Prompt、数据库或 API 行为;若测试发现生产偏差,按实现期冲突规则单独分类。
|
|
- 不删除 `VerifierInputHook`、`VerifierContextHolder` 或其他生产兼容代码;阶段 5 统一清理。
|
|
- 不运行 Maven live E2E、检查 `logs/` 或查询真实数据库;仍保留到阶段 5。
|
|
- 不把所有细粒度 unit test 强制合并成一个巨型文件;三层权威入口与可复用小测试可以共存。
|
|
|
|
## Context Constraints
|
|
|
|
- `ChatServiceSequentialAgentTest` 已在阶段 3 由 Graph integration 替代,阶段 4 不恢复任何固定 Agent 顺序断言。
|
|
- Workflow 只验证 Graph 节点/条件边/计数/事件;Node Contract 只验证输入投影、标准输出和安全边界;Chat integration 只从 public service/Run persistence 观察行为。
|
|
- 必须复用 `ScriptedDiagnosisGraphActions` 和现有 protocol/node helpers,禁止复制大段 JSON fixture 或另造第二套 Graph factory。
|
|
- Gatekeeper ceiling 导致的 LOW_CONFID 不得触发 evidence retry;只有有效 critical evidence gap 且总轮次未耗尽才允许补证据。
|
|
- 前置 Fallback 不得泄漏任何 Executor claim;后置 Composer Fallback 只能使用 Verifier 允许材料。
|
|
|
|
## Acceptance
|
|
|
|
- `DiagnosisGraphWorkflowTest` 覆盖 PASS、Planner/Verifier/Composer 技术重试与耗尽、Executor failures/no-evidence、Gatekeeper PASS/LOW_CONFID/REJECT、evidence retry、Verifier REJECT 和全部安全终止。
|
|
- `DiagnosisGraphNodeContractTest` 覆盖四类 Agent Adapter、Gatekeeper、Verified Input、Evidence Retry、Fallback、config identity、unknown/failure fail-closed 和 verified-only 输入。
|
|
- `ChatServiceGraphIntegrationTest` 覆盖 SUCCESS、handled Fallback、unhandled/no-answer FAILED、Run metrics/Eval/trace、clean-up 和同 session 多 run 隔离。
|
|
- `VerifierInputHookTest` 不再存在;保留回归集合全部通过,且生产源码在本阶段无行为 diff。
|
|
- Maven test compilation、OpenSpec strict、主 specs strict、`git diff --check` 和测试体系源级检查通过。
|
|
- 阶段 4明确记录未运行最终 live E2E/log/DB 验收。
|
|
|
|
## Risks
|
|
|
|
- 仅重命名测试可能掩盖覆盖缺口;必须建立 Issue 路径到 test method 的显式矩阵并补齐缺失分支。
|
|
- 过度合并会降低失败定位;保留专用 unit tests,只让三层类成为架构入口而非唯一文件。
|
|
- 删除 Hook test 可能丢失 parser/Gatekeeper 边界;删除前必须证明对应行为已由 protocol parser、Gatekeeper Node/service 和 verified input tests覆盖。
|
|
- 测试重构若意外修改生产代码会模糊阶段边界;默认生产源码 diff 必须为零。
|