feat(severity): add trivial + info levels

This commit is contained in:
claude
2026-08-21 23:58:57 +00:00
parent 2cf4bdbfe8
commit 23ec1bf74a
2 changed files with 59 additions and 3 deletions
+54
View File
@@ -11,9 +11,11 @@ sys.path.insert(0, os.path.join(ROOT, "pilot"))
import ai_review # noqa: E402
from ai_review import ( # noqa: E402
_SEVERITY_EMOJI,
_balanced_json_substring,
_extract_first_json_object,
_last_balanced_json,
_normalize_finding,
_render_collapsible_usage,
build_user_prompt,
compute_attribution,
@@ -28,6 +30,8 @@ from ai_review import ( # noqa: E402
parse_text_blocks,
prior_review_bodies,
reviewed_shas,
SEVERITIES,
SEVERITY_RANK,
split_findings,
summary_bullets,
truncate_diff,
@@ -1692,3 +1696,53 @@ def test_inline_comment_body_humanized_tokens():
body = inline_comment_body(f)
assert "🪙 ~17,303 (17.3K) tok" in body
# ---------------------------------------------------------------------------
# Severity levels — Task 4 (add trivial + info)
# ---------------------------------------------------------------------------
def test_severities_includes_trivial_and_info():
assert "trivial" in SEVERITIES
assert "info" in SEVERITIES
def test_severity_rank_orders_new_levels():
assert SEVERITY_RANK["info"] < SEVERITY_RANK["trivial"] < SEVERITY_RANK["low"]
def test_threshold_medium_keeps_low_below_trivial_below_info():
# medium+ threshold:
# medium (rank 2) → kept
# low (rank 1) → DROPPED
# trivial (rank 0) → DROPPED
# info (rank -1) → DROPPED
cfg = {"style": "lenient", "severity_threshold": "medium"}
findings = [
{"severity": "info", "path": "a", "line": 1, "problem": "", "fix": "", "suggestion": "", "reference": ""},
{"severity": "trivial", "path": "b", "line": 1, "problem": "", "fix": "", "suggestion": "", "reference": ""},
{"severity": "low", "path": "c", "line": 1, "problem": "", "fix": "", "suggestion": "", "reference": ""},
{"severity": "medium", "path": "d", "line": 1, "problem": "", "fix": "", "suggestion": "", "reference": ""},
]
kept, dropped = ai_review.apply_repo_config(findings, cfg, changed_paths=["x.py"])
sev_kept = [f["severity"] for f in kept]
sev_dropped = [f["severity"] for f in dropped]
assert "info" in sev_dropped
assert "trivial" in sev_dropped
assert "low" in sev_dropped
assert "medium" in sev_kept
# and nothing else
assert len(kept) == 1
def test_unknown_severity_still_normalizes_to_medium():
# Backward compat
n = _normalize_finding({"severity": "emergency", "path": "x", "line": 1, "problem": "p"})
assert n["severity"] == "medium"
def test_emoji_for_trivial_and_info_is_neutral():
# The plan's emoji table maps trivial/info to ⚪
assert _SEVERITY_EMOJI["trivial"] == ""
assert _SEVERITY_EMOJI["info"] == ""