generated from coulomb/repo-seed
session-memory: session-quality filter (WP-0005 T01)
detect/quality.py: is_real_coding_session drops health-checks / smoke-tests / interrupted / trivially-short sessions (event floor, repo present, substantive tool activity, non-trivial prompt). Wired into run_detect so signals only form over real sessions — fixes the abandoned false-positive. [detect.quality] knobs; existing detect/curate fixtures made realistic. 8 new tests; suite 80/80. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
61
tests/test_detect_quality.py
Normal file
61
tests/test_detect_quality.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""Session-quality filter tests (T01)."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from session_memory.detect.quality import ( # noqa: E402
|
||||
QualityConfig,
|
||||
filter_real,
|
||||
is_real_coding_session,
|
||||
quality_config,
|
||||
)
|
||||
|
||||
|
||||
def _digest(repo="agentic-resources", events=60, prompt="Implement the curate entrypoint",
|
||||
tools=None):
|
||||
return {
|
||||
"session_uid": "claude:x", "flavor": "claude", "repo": repo,
|
||||
"event_count": events, "first_prompt": prompt,
|
||||
"tool_histogram": tools if tools is not None else {"Bash": 20, "Edit": 15, "Read": 8},
|
||||
}
|
||||
|
||||
|
||||
def test_real_session_passes():
|
||||
assert is_real_coding_session(_digest()) is True
|
||||
|
||||
|
||||
def test_healthcheck_prompt_dropped():
|
||||
assert is_real_coding_session(_digest(events=3, prompt="Say hello in one word.",
|
||||
tools={})) is False
|
||||
|
||||
|
||||
def test_interrupted_dropped():
|
||||
assert is_real_coding_session(_digest(events=1, prompt="[Request interrupted by user]",
|
||||
tools={})) is False
|
||||
|
||||
|
||||
def test_too_short_dropped():
|
||||
assert is_real_coding_session(_digest(events=5)) is False
|
||||
|
||||
|
||||
def test_no_repo_dropped():
|
||||
assert is_real_coding_session(_digest(repo=None)) is False
|
||||
|
||||
|
||||
def test_no_substantive_tools_dropped():
|
||||
# plenty of events but only plumbing calls -> not real coding
|
||||
assert is_real_coding_session(
|
||||
_digest(tools={"mcp__state-hub__update_task_status": 40})) is False
|
||||
|
||||
|
||||
def test_filter_real_keeps_only_real():
|
||||
digs = [_digest(), _digest(events=3, prompt="hello", tools={}), _digest(repo=None)]
|
||||
assert len(filter_real(digs)) == 1
|
||||
|
||||
|
||||
def test_quality_config_from_toml():
|
||||
cfg = quality_config({"detect": {"quality": {"min_events": 50}}})
|
||||
assert cfg.min_events == 50
|
||||
assert cfg.min_substantive == 3 # default preserved
|
||||
Reference in New Issue
Block a user