Files
GEWU/tests/test_run_four_file_automation.py
T
vasily 78033bb830
CI / quality (push) Canceled after 0s
feat: online verification, node removals, and knowledge browser
Adds claim-bound online evidence records and citation verification scripts,
node removal transport/adapter, retrieval benchmark and owner-review tooling,
GraphCanvas/SourceDetail knowledge browser UI, and the ingest handoff helper.
Bumps the agents/gewu pack to the online-verification branch.
2026-10-16 20:02:29 +08:00

78 lines
3.4 KiB
Python

from scripts.run_four_file_automation import gate_summary
def test_gate_summary_does_not_qualify_when_protected_and_answer_gates_remain():
report = gate_summary(
source_checks=[{"status": "pass"}],
review_ledger={"summary": {"evidence_bindings_invalid": 0, "claims": 2, "items": 1}},
retrieval_score={
"question_count": 24,
"mean_conditional_recall_at_5": 0.9,
"conditional_hit_rate": 1.0,
"pagination_blocked_queries": 0,
},
answer_reports={
"answers": {"status": "invalid", "checked": 1, "issues": [{"code": "BAD"}]}
},
support_judgments={"strict_group_support_fraction": 1.0},
answer_scores={"50k": {"content_points_before_citation_penalty": 48, "max_points": 48}},
behavioral_results={
"exact_replay": {"passed": True},
"quote": {"status": "invalid"},
"offset": {"status": "invalid"},
"extraction": {"status": "invalid"},
"revision": {"status": "invalid"},
"meaning": {"status": "eligible"},
"unauthorized_get_node": {"denied": True},
"unauthorized_search": {"denied": True},
},
)
assert report["qualification"] == "not_qualified"
assert report["gates"]["retrieval_tuning"]["status"] == "pass"
assert report["gates"]["answer_citations"]["status"] == "fail"
assert report["gates"]["owner_protected_decisions"]["status"] == "pending_owner"
assert report["gates"]["behavioral_suite"]["status"] == "partial"
assert report["gates"]["semantic_support_review"]["status"] == "gap_demonstrated_not_judged"
assert "reserved_questions" in report["remaining_gates"]
def test_gate_summary_marks_retrieval_failure_when_pagination_is_blocked():
report = gate_summary(
source_checks=[{"status": "pass"}],
review_ledger={"summary": {"evidence_bindings_invalid": 0, "claims": 0, "items": 0}},
retrieval_score={
"question_count": 24,
"mean_conditional_recall_at_5": 0.9,
"conditional_hit_rate": 1.0,
"pagination_blocked_queries": 1,
},
answer_reports={"answers": {"status": "valid", "checked": 0, "issues": []}},
support_judgments={"strict_group_support_fraction": 1.0},
answer_scores={"50k": {"content_points_before_citation_penalty": 48, "max_points": 48}},
)
assert report["gates"]["retrieval_tuning"]["status"] == "fail"
assert report["qualification"] == "not_qualified"
def test_semantic_judge_completion_remains_advisory_until_candidate_actions_finish():
report = gate_summary(
source_checks=[{"status": "pass"}],
review_ledger={"summary": {"evidence_bindings_invalid": 0, "claims": 1, "items": 1}},
retrieval_score={"question_count": 24, "mean_conditional_recall_at_5": 1.0},
answer_reports={"answers": {"status": "valid", "checked": 0, "issues": []}},
support_judgments={"strict_group_support_fraction": 1.0},
answer_scores={"50k": {"content_points_before_citation_penalty": 48, "max_points": 48}},
semantic_results={
"claim_count": 1,
"outcomes": {"advisory_support_consensus": 1},
},
)
assert (
report["gates"]["semantic_support_review"]["status"]
== "advisory_complete_candidate_actions_pending"
)
assert report["qualification"] == "not_qualified"