fix(task): reject unknown validation status payloads

This commit is contained in:
2026-05-22 11:04:28 +08:00
parent 5446614828
commit c3c4df306b
2 changed files with 9 additions and 2 deletions

View File

@ -70,10 +70,12 @@ class ValidationResult:
if not isinstance(payload, dict):
return None
raw_status = payload.get("status")
status: ValidationStatus | None = raw_status if raw_status in VALIDATION_STATUSES else None
if "status" in payload and raw_status not in VALIDATION_STATUSES:
raise ValueError(f"unknown validation status: {raw_status}")
status: ValidationStatus | None = raw_status if "status" in payload else None
return cls(
status=status,
passed=bool(payload.get("passed")) if status is None else None,
passed=bool(payload.get("passed")) if "status" not in payload else None,
score=float(payload.get("score", 0.0) or 0.0),
issues=[str(item) for item in payload.get("issues") or []],
missing_requirements=[str(item) for item in payload.get("missing_requirements") or []],

View File

@ -439,6 +439,11 @@ def test_validation_result_rejects_unknown_status() -> None:
ValidationResult(status="pending", score=0.9, validator="test") # type: ignore[arg-type]
def test_validation_result_from_dict_rejects_unknown_explicit_status() -> None:
with pytest.raises(ValueError, match="unknown validation status"):
ValidationResult.from_dict({"status": "pending", "passed": True, "score": 0.9})
def test_validation_result_evidence_gaps_round_trip() -> None:
validation = ValidationResult(
status="insufficient_evidence",