fix(persistence): address 22 review comments from CodeQL, Copilot, and Code Quality

Bug fixes:
- Sanitize log params to prevent log injection (CodeQL)
- Reset threads_meta.status to idle/error when run completes
- Attach messages only to latest checkpoint in /history response
- Write threads_meta on POST /threads so new threads appear in search

Lint fixes:
- Remove unused imports (journal.py, migrations/env.py, test_converters.py)
- Convert lambda to named function (engine.py, Ruff E731)
- Remove unused logger definitions in repos (Ruff F841)
- Add logging to JSONL decode errors and empty except blocks
- Separate assert side-effects in tests (CodeQL)
- Remove unused local variables in tests (Ruff F841)
- Fix max_trace_content truncation to use byte length, not char length

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
rayhpeng
2026-04-05 22:49:26 +08:00
parent 32f69674a5
commit b94383c93a
15 changed files with 94 additions and 55 deletions
-3
View File
@@ -5,10 +5,7 @@ from __future__ import annotations
import json
from unittest.mock import MagicMock
import pytest
from deerflow.runtime.converters import (
_infer_finish_reason,
langchain_messages_to_openai,
langchain_to_openai_completion,
langchain_to_openai_message,
+4 -2
View File
@@ -117,14 +117,16 @@ class TestFeedbackRepository:
async def test_delete(self, tmp_path):
repo = await _make_feedback_repo(tmp_path)
created = await repo.create(run_id="r1", thread_id="t1", rating=1)
assert await repo.delete(created["feedback_id"]) is True
deleted = await repo.delete(created["feedback_id"])
assert deleted is True
assert await repo.get(created["feedback_id"]) is None
await _cleanup()
@pytest.mark.anyio
async def test_delete_nonexistent(self, tmp_path):
repo = await _make_feedback_repo(tmp_path)
assert await repo.delete("nonexistent") is False
deleted = await repo.delete("nonexistent")
assert deleted is False
await _cleanup()
@pytest.mark.anyio
+3 -1
View File
@@ -225,6 +225,8 @@ class TestEngineLifecycle:
pytest.skip("asyncpg is installed -- cannot test missing-dep path")
except ImportError:
pass
# asyncpg is not installed — this is the expected state for this test.
# We proceed to verify that init_engine raises an actionable ImportError.
pass # noqa: S110 — intentionally ignored
with pytest.raises(ImportError, match="uv sync --extra postgres"):
await init_engine("postgres", url="postgresql+asyncpg://x:x@localhost/x")
+2 -2
View File
@@ -456,7 +456,7 @@ class TestDictContentFlag:
sf = get_session_factory()
store = DbRunEventStore(sf)
record = await store.put(
await store.put(
thread_id="t1",
run_id="r1",
event_type="tool_end",
@@ -480,7 +480,7 @@ class TestDictContentFlag:
sf = get_session_factory()
store = DbRunEventStore(sf)
record = await store.put(
await store.put(
thread_id="t1",
run_id="r1",
event_type="tool_end",