This is an automated email from the ASF dual-hosted git repository. pierrejeambrun pushed a commit to branch pierrejeambrun/lang-sdk-e2e/cycle-comment-fix in repository https://gitbox.apache.org/repos/asf/airflow.git
commit db1aa687741a6fda96907a93b6ff7e3bbf6f0619 Author: pierrejeambrun <[email protected]> AuthorDate: Fri Oct 2 11:23:33 2026 +0200 Update the stale cycle-detection comment on SerializedTaskGroup.topological_sort DAG.check_cycle was the only guard this comment named, but a Lang-SDK Dag never runs it: it has no Python DAG object to call it on. The Dag processor now rejects a cyclic Lang-SDK Dag of its own accord, through DagSerialization.validate_serialized_dag, so the comment should name both guards rather than the one that does not cover every author. --- airflow-core/src/airflow/serialization/definitions/taskgroup.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/airflow-core/src/airflow/serialization/definitions/taskgroup.py b/airflow-core/src/airflow/serialization/definitions/taskgroup.py index b82e1c0b933..8e9fe75e6b2 100644 --- a/airflow-core/src/airflow/serialization/definitions/taskgroup.py +++ b/airflow-core/src/airflow/serialization/definitions/taskgroup.py @@ -237,9 +237,12 @@ class SerializedTaskGroup(TaskGroupMixin, DAGNode): Sort children topologically — a task always comes after its upstream dependencies. See ``TaskGroup.topological_sort`` in task-sdk for the algorithm. Cycles are - treated as corrupt input: ``DAG.check_cycle`` rejects cyclic Dags before - serialization, so a cycle reaching this code indicates malformed serialized data, - and we raise ``ValueError`` rather than silently looping forever. + treated as corrupt input: a Python Dag's cycle is rejected by ``DAG.check_cycle`` + before serialization, and a Lang-SDK Dag's cycle is rejected by + ``DagSerialization.validate_serialized_dag`` when the Dag processor receives it + (both call the shared ``detect_cycle``). A cycle reaching this code indicates + malformed serialized data, and we raise ``ValueError`` rather than silently + looping forever. """ children = self.children if not children:
