Files
SuperBizAgent-java/openspec/changes/archive/2026-07-17-chat-diagnosis-stategraph-test-suite/proposal.md
T

4.9 KiB

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 必须为零。