diff --git a/backend/app/schemas/approvals.py b/backend/app/schemas/approvals.py index 80ebadb9..b3e5fa04 100644 --- a/backend/app/schemas/approvals.py +++ b/backend/app/schemas/approvals.py @@ -48,6 +48,7 @@ class ApprovalCreate(ApprovalBase): """Payload for creating a new approval request.""" agent_id: UUID | None = None + lead_reasoning: str | None = None @model_validator(mode="after") def validate_lead_reasoning(self) -> Self: @@ -62,6 +63,13 @@ class ApprovalCreate(ApprovalBase): nested_reason = decision.get("reason") if isinstance(nested_reason, str) and nested_reason.strip(): return self + lead_reasoning = self.lead_reasoning + if isinstance(lead_reasoning, str) and lead_reasoning.strip(): + self.payload = { + **(payload if isinstance(payload, dict) else {}), + "reason": lead_reasoning.strip(), + } + return self raise ValueError(LEAD_REASONING_REQUIRED_ERROR) diff --git a/backend/tests/test_approvals_schema.py b/backend/tests/test_approvals_schema.py index da7a58ea..b1185414 100644 --- a/backend/tests/test_approvals_schema.py +++ b/backend/tests/test_approvals_schema.py @@ -58,3 +58,16 @@ def test_approval_create_accepts_float_confidence() -> None: }, ) assert model.confidence == 88.75 + + +def test_approval_create_accepts_top_level_lead_reasoning() -> None: + model = ApprovalCreate.model_validate( + { + "action_type": "task.update", + "confidence": 80, + "lead_reasoning": "Need manual review before changing task status.", + }, + ) + assert model.payload == { + "reason": "Need manual review before changing task status.", + }