feat: validate foreach control regions

This commit is contained in:
lda
2026-09-04 07:46:29 +07:00 Verified
parent f23e760b5f
commit b073407441
6 changed files with 123 additions and 14 deletions
+5 -3
View File
@@ -505,14 +505,16 @@ def test_adapter_lowers_foreach_policy_through_builder() -> None:
"collect_to": "state.item_errors",
},
}
}
},
"echo": {"use": "demo.echo"},
},
"routes": {
"each_item": {
"loop": "__end__",
"loop": "echo",
"done": "__end__",
"completed_with_errors": "__end__",
}
},
"echo": {"ok": "each_item"},
},
}
)
+13 -5
View File
@@ -322,7 +322,7 @@ def test_workflow_draft_foreach_over_dumps_structural_path() -> None:
},
"routes": {
"each_item": {"loop": "echo", "done": "__end__"},
"echo": {"ok": "__end__"},
"echo": {"ok": "each_item"},
},
}
)
@@ -338,6 +338,7 @@ def test_workflow_draft_foreach_accepts_canonical_item_error_policy() -> None:
**_keyed_echo_draft(),
"start": "each_item",
"steps": {
**_keyed_echo_draft()["steps"],
"each_item": {
"foreach": {
"over": "state.items",
@@ -349,9 +350,12 @@ def test_workflow_draft_foreach_accepts_canonical_item_error_policy() -> None:
"collect_to": "state.item_errors",
},
}
}
},
},
"routes": {
"each_item": {"loop": "echo", "done": "__end__"},
"echo": {"ok": "each_item"},
},
"routes": {"each_item": {"loop": "__end__", "done": "__end__"}},
}
)
@@ -372,15 +376,19 @@ def test_workflow_draft_foreach_accepts_item_error_action_string() -> None:
**_keyed_echo_draft(),
"start": "each_item",
"steps": {
**_keyed_echo_draft()["steps"],
"each_item": {
"foreach": {
"over": "state.items",
"as": "item",
"item_error": "skip",
}
}
},
},
"routes": {
"each_item": {"loop": "echo", "done": "__end__"},
"echo": {"ok": "each_item"},
},
"routes": {"each_item": {"loop": "__end__", "done": "__end__"}},
}
)