feat(trace): add session run isolation schema
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# Phase 1 Evidence: Schema and Compatibility Foundation
|
||||
|
||||
## Scope Completed
|
||||
|
||||
- Added Flyway migration `V011__add_session_run_isolation.sql`.
|
||||
- Added `chat_session` and `diagnosis_run` tables.
|
||||
- Added nullable `run_id` columns and indexes to `agent_step` and `tool_invocation`.
|
||||
- Backfilled compatibility runs from existing `diagnosis_session` rows.
|
||||
- Backfilled existing step/tool rows where a matching `diagnosis_session.session_id` exists.
|
||||
- Added `ChatSession`, `DiagnosisRun`, `ChatSessionRepository`, and `DiagnosisRunRepository`.
|
||||
- Added run-scoped query/count methods to `AgentStepRepository` and `ToolInvocationRepository`.
|
||||
- Added `DiagnosisRunRepositoryTest`.
|
||||
|
||||
## Verification
|
||||
|
||||
### Maven
|
||||
|
||||
```text
|
||||
mvn -q "-Dtest=DiagnosisRunRepositoryTest" test
|
||||
```
|
||||
|
||||
Result: passed.
|
||||
|
||||
```text
|
||||
mvn -q "-Dtest=DiagnosisSessionRepositoryTest,AgentStepRepositoryTest,ToolInvocationRepositoryTest,DiagnosisRunRepositoryTest" test
|
||||
```
|
||||
|
||||
Result: passed.
|
||||
|
||||
### Database Inspection
|
||||
|
||||
Checked with `scripts/query_mysql.py`.
|
||||
|
||||
```text
|
||||
SELECT installed_rank, version, description, success
|
||||
FROM flyway_schema_history
|
||||
ORDER BY installed_rank DESC
|
||||
LIMIT 5;
|
||||
```
|
||||
|
||||
Relevant result:
|
||||
|
||||
```text
|
||||
version = 011
|
||||
description = add session run isolation
|
||||
success = 1
|
||||
```
|
||||
|
||||
```text
|
||||
SELECT COUNT(*) AS chat_sessions FROM chat_session;
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
chat_sessions = 83
|
||||
```
|
||||
|
||||
```text
|
||||
SELECT COUNT(*) AS diagnosis_runs,
|
||||
SUM(CASE WHEN run_id IS NULL THEN 1 ELSE 0 END) AS null_run_ids
|
||||
FROM diagnosis_run;
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
diagnosis_runs = 83
|
||||
null_run_ids = 0
|
||||
```
|
||||
|
||||
```text
|
||||
SELECT (SELECT COUNT(*) FROM agent_step WHERE run_id IS NULL) AS agent_step_null_run_id,
|
||||
(SELECT COUNT(*) FROM tool_invocation WHERE run_id IS NULL) AS tool_invocation_null_run_id;
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
```text
|
||||
agent_step_null_run_id = 0
|
||||
tool_invocation_null_run_id = 1
|
||||
```
|
||||
|
||||
The one remaining null `tool_invocation.run_id` is historical orphan data:
|
||||
|
||||
```text
|
||||
id = 3
|
||||
session_id = f9d2290d
|
||||
tool_name = lookup_knowledge
|
||||
created_at = 2026-06-26 14:17:35
|
||||
```
|
||||
|
||||
It has no matching `diagnosis_session`, so V011 cannot safely infer a compatibility run. This matches the OpenSpec wording "when possible" for historical backfill.
|
||||
|
||||
### Logs
|
||||
|
||||
`logs/application.log` shows Hibernate using the new `run_id` fields in `agent_step` and `tool_invocation` inserts/selects during the repository verification.
|
||||
|
||||
## Notes
|
||||
|
||||
- Phase 1 intentionally does not switch Chat, Trace, Feedback, or AIOps write paths.
|
||||
- New columns remain nullable until later phases switch new writes and verify coverage.
|
||||
|
||||
Reference in New Issue
Block a user