Files
SuperBizAgent-java/devflow/projects/2026-07-10-session-run-trace-isolation/evidence.md
T

3.3 KiB
Raw Blame History

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 增加 nullable run_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.log
  • target/e2e/phase6-mvn-20260710-211831.err.log
  • logs/application.log
  • logs/chat.log

E2E session:

  • sessionId: e2e-phase6-chat-codex-20260710-2120
  • run1: run-e2a97696-4398-4abc-90e4-28f45c838f92
  • run2: 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 分组:run1 10 行,run2 9 行。
  • tool_invocation 按 run 分组:run1 14 行,run2 8 行。
  • mixed row check 为 0,没有 NULL 或 unexpected run_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 查询和日志检查。