feat: enhance task update validation for board leads with detailed error messages

This commit is contained in:
Abhimanyu Saharan
2026-02-14 00:08:44 +05:30
parent 68b6029ac3
commit 07a86d4604

View File

@@ -1782,12 +1782,23 @@ def _validate_lead_update_request(update: _TaskUpdateInput) -> None:
"custom_field_values",
}
requested_fields = _lead_requested_fields(update)
if update.comment is not None or not requested_fields.issubset(allowed_fields):
if update.comment is not None:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=(
"Board leads can only assign/unassign tasks, update "
"dependencies/custom fields, or resolve review tasks."
"Lead comment gate failed: board leads cannot include `comment` in task PATCH. "
"Use the task comments endpoint instead."
),
)
disallowed_fields = requested_fields - allowed_fields
if disallowed_fields:
disallowed = ", ".join(sorted(disallowed_fields))
allowed = ", ".join(sorted(allowed_fields))
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=(
"Lead field gate failed: unsupported fields for board leads: "
f"{disallowed}. Allowed fields: {allowed}."
),
)
@@ -1877,13 +1888,19 @@ def _lead_apply_status(update: _TaskUpdateInput) -> None:
if update.task.status != "review":
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=("Board leads can only change status when a task is " "in review."),
detail=(
"Lead status gate failed: board leads can only change status when the current "
f"task status is `review` (current: `{update.task.status}`)."
),
)
target_status = _required_status_value(update.updates["status"])
if target_status not in {"done", "inbox"}:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=("Board leads can only move review tasks to done " "or inbox."),
detail=(
"Lead status target gate failed: review tasks can only move to `done` or "
f"`inbox` (requested: `{target_status}`)."
),
)
if target_status == "inbox":
update.task.assigned_agent_id = None