feat(ai_review): per-PR merge confidence 1-5 in header
This commit is contained in:
@@ -11,6 +11,7 @@ sys.path.insert(0, os.path.join(ROOT, "pilot"))
|
||||
|
||||
import ai_review # noqa: E402
|
||||
from ai_review import ( # noqa: E402
|
||||
_CONFIDENCE_BADGE,
|
||||
_SEVERITY_EMOJI,
|
||||
_balanced_json_substring,
|
||||
_extract_first_json_object,
|
||||
@@ -24,6 +25,7 @@ from ai_review import ( # noqa: E402
|
||||
fmt_tokens,
|
||||
format_review_body,
|
||||
inline_comment_body,
|
||||
merge_confidence,
|
||||
parse_diff_anchors,
|
||||
parse_findings,
|
||||
parse_repo_config,
|
||||
@@ -31,6 +33,7 @@ from ai_review import ( # noqa: E402
|
||||
parse_text_blocks,
|
||||
prior_review_bodies,
|
||||
reviewed_shas,
|
||||
REVIEW_HEADER,
|
||||
SEVERITIES,
|
||||
SEVERITY_RANK,
|
||||
split_findings,
|
||||
@@ -1821,3 +1824,78 @@ def test_parse_repo_config_compare_against_caps_at_12(monkeypatch):
|
||||
assert "fake-model-13" not in cfg["compare_against"]
|
||||
assert "bogus-extra" not in cfg["compare_against"]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Task 6 — merge_confidence + REVIEW_HEADER confidence badge
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_merge_confidence_clean_is_five():
|
||||
assert merge_confidence([]) == 5
|
||||
|
||||
|
||||
def test_merge_confidence_only_low_is_five():
|
||||
f = {"severity": "low"}
|
||||
assert merge_confidence([f, f, f]) == 5
|
||||
|
||||
|
||||
def test_merge_confidence_medium_drops_one():
|
||||
f = {"severity": "medium"}
|
||||
assert merge_confidence([f]) == 4
|
||||
|
||||
|
||||
def test_merge_confidence_high_drops_two():
|
||||
f = {"severity": "high"}
|
||||
assert merge_confidence([f]) == 3
|
||||
|
||||
|
||||
def test_merge_confidence_critical_drops_to_one():
|
||||
f = {"severity": "critical"}
|
||||
assert merge_confidence([f]) == 1
|
||||
|
||||
|
||||
def test_merge_confidence_multi_lens_drops_extra():
|
||||
f = {"severity": "low", "_multi_lens": True}
|
||||
assert merge_confidence([f]) == 4
|
||||
|
||||
|
||||
def test_merge_confidence_clamped():
|
||||
# Three critical findings must NOT take the score below 1.
|
||||
f = {"severity": "critical"}
|
||||
assert merge_confidence([f, f, f]) == 1
|
||||
|
||||
|
||||
def test_review_header_includes_confidence():
|
||||
# REVIEW_HEADER gains a {confidence} placeholder; verify the format works.
|
||||
h = REVIEW_HEADER.format(model="glm-5.2:cloud", sha="abc1234567", confidence="3/5 🟡")
|
||||
assert "Merge confidence: 3/5 🟡" in h
|
||||
|
||||
|
||||
def test_confidence_badge_table_complete():
|
||||
# Sanity-check the badge table the render layer reads from.
|
||||
assert _CONFIDENCE_BADGE == {5: "🟢", 4: "🟢", 3: "🟡", 2: "🟠", 1: "🔴"}
|
||||
|
||||
|
||||
def test_format_review_body_default_confidence_is_green():
|
||||
# Default confidence kwarg should produce a green 5/5 badge in the header,
|
||||
# matching the pre-existing "clean PR" semantics.
|
||||
body = format_review_body("- [high] x:1 — bug", "glm-5.2:cloud", "abcdef1234567890")
|
||||
assert "Merge confidence: 5/5 🟢" in body
|
||||
|
||||
|
||||
def test_format_review_body_low_confidence_shows_red_badge():
|
||||
body = format_review_body(
|
||||
"- [critical] x:1 — bug", "glm-5.2:cloud", "abcdef1234567890",
|
||||
confidence=1,
|
||||
)
|
||||
assert "Merge confidence: 1/5 🔴" in body
|
||||
|
||||
|
||||
def test_format_review_body_confidence_clamps_out_of_range():
|
||||
# Out-of-range confidence is clamped to [1, 5] in the badge string.
|
||||
body_hi = format_review_body("- x", "glm-5.2:cloud", "abcdef1234567890", confidence=99)
|
||||
assert "Merge confidence: 5/5 🟢" in body_hi
|
||||
body_lo = format_review_body("- x", "glm-5.2:cloud", "abcdef1234567890", confidence=0)
|
||||
assert "Merge confidence: 1/5 🔴" in body_lo
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user