3.3 KiB
3.3 KiB
Evidence
上下文证据
SessionContext.messageHistory和getMessagePairCount()证明 Redis 承载热对话历史;MySQL 只需要长期审计的会话目录和运行记录。CaseLibraryService.createFromSession原先按DiagnosisSession.sessionId去重并映射 query/answer,因此 run 隔离后需要新增createFromRun。- 旧
mvp/architecture/data-model.md把case_library.diagnosis_id解释为diagnosis_session.session_id,本次改为过渡语义:旧数据可能是session_id,新自动案例是run_id。 - 既有 Trace OpenSpec 要求
GET /api/diagnosis/{sessionId}/trace是只读端点;latest-run 和 exact-run 查询都必须保持只读。 - ISS-010 的 E2E 事实显示同一
sessionId两轮 Chat 会产生 MySQL Trace 混合,是本 change 的直接触发证据。
实现证据
- Phase 1 增加
V011__add_session_run_isolation.sql,创建chat_session、diagnosis_run,并为agent_step/tool_invocation增加 nullablerun_id。 - Phase 2 将 Chat 写路径切到
chat_session + diagnosis_run,并让 Hook/Tool/Evaluation/Gatekeeper 使用 run-scoped 数据。 - Phase 3 将 Trace API 改为 latest-run / exact-run 双模式,并加入 lightweight run summaries。
- Phase 4 将 Feedback 和 CaseLibrary 绑定到 run,保留没有 run-backed 数据时的 legacy fallback。
- Phase 5 将 AIOps 接入 run isolation,SSE metadata 暴露
sessionId + runId。 - Phase 6 更新 demo 脚本、Trace UI、MVP 架构文档和表文档,并修正 review 后发现的 session-only 文档残留。
E2E 证据
Maven 启动命令:
mvn spring-boot:run -Dspring-boot.run.profiles=mvp-demo
日志:
target/e2e/phase6-mvn-20260710-211831.out.logtarget/e2e/phase6-mvn-20260710-211831.err.loglogs/application.loglogs/chat.log
E2E session:
sessionId:e2e-phase6-chat-codex-20260710-2120run1:run-e2a97696-4398-4abc-90e4-28f45c838f92run2:run-76ce6a6e-92ab-40c9-800a-eca0c1bb5172
结果:
- 两轮 Chat 都成功,并复用同一个
sessionId。 - 两轮返回不同
runId。 - run1 exact trace 只返回 run1。
- run2 exact trace 只返回 run2。
- session-only Trace latest fallback 返回 run2。
chat_session.message_pair_count = 2,证明多轮上下文连续。
DB 证据
通过 scripts/query_mysql.py 检查:
diagnosis_run中该 E2E session 有 2 条SUCCESS / CHAT运行。agent_step按 run 分组:run110行,run29行。tool_invocation按 run 分组:run114行,run28行。- mixed row check 为
0,没有 NULL 或 unexpectedrun_id混入该 E2E session。
Baseline 证据
运行:
mvn -q "-Dtest=DiagnosisTraceEvaluatorTest,DiagnosisEvalBaselineDiffTest" test
mvn -q "-Dtest=DiagnosisTraceEvaluatorTest,DiagnosisEvalBaselineDiffTest,ExecutorGatekeeperServiceTest,VerifierInputHookTest,ChatServiceSequentialAgentTest" test
结果:
- 两组 baseline / regression 命令通过。
- baseline harness 使用离线 fixture,不依赖 live DB/session tables。
- 未观察到 baseline drift。
工具限制
AGENTS 要求的 codebase-retrieval 和 LSP 工具在本会话不可用。替代验证使用 OpenSpec、rg、定向阅读、 focused tests、E2E、DB 查询和日志检查。