# 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 启动命令: ```powershell 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 证据 运行: ```powershell 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 查询和日志检查。