From 30e30541461be29d1f648af4822db848ef863756 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 7 Jul 2026 11:08:47 +0000 Subject: [PATCH] =?UTF-8?q?A=20failed=20batch=20sub=5Ftask=20restarts=20fo?= =?UTF-8?q?r=20a=20re-run=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- domain/tasks/subtasks.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/domain/tasks/subtasks.py b/domain/tasks/subtasks.py index bd49a6ec6..95f9ec5bc 100644 --- a/domain/tasks/subtasks.py +++ b/domain/tasks/subtasks.py @@ -35,11 +35,14 @@ class SubTask: ) def start(self, cloud_logs_url: Optional[str] = None) -> None: - if self.status not in (SubTaskStatus.WAITING, SubTaskStatus.IN_PROGRESS): + # FAILED may restart: a failed batch is re-run by re-sending its own + # inputs, and its completion un-fails the parent Task (ADR-0055). + if self.status is SubTaskStatus.COMPLETE: raise ValueError(f"cannot start subtask in status {self.status}") if self.job_started is None: self.job_started = datetime.now(timezone.utc) self.status = SubTaskStatus.IN_PROGRESS + self.job_completed = None if cloud_logs_url is not None: self.cloud_logs_url = cloud_logs_url