fix: persist invalid draft forward routes
- Fix _validate_reachable_outcomes to skip unknown nodes (root cause) - Add safety net in validate_workflow_draft for diagnostics exceptions - Add test proving forward-route edits persist as invalid
This commit is contained in:
@@ -64,7 +64,10 @@ def validate_workflow_draft(
|
||||
return _invalid_result(_diagnostic_from_exception(exc))
|
||||
if node_defs is not None:
|
||||
workflow = workflow.model_copy(update={"node_defs": list(node_defs)})
|
||||
diagnostics = _diagnostics_from_workflow_issues(workflow)
|
||||
try:
|
||||
diagnostics = _diagnostics_from_workflow_issues(workflow)
|
||||
except (KeyError, ValueError) as exc:
|
||||
return _invalid_result(_diagnostic_from_exception(exc))
|
||||
if diagnostics:
|
||||
return _invalid_result(*diagnostics)
|
||||
if outcome_lookup is not None:
|
||||
@@ -113,6 +116,9 @@ def patch_workflow_draft(
|
||||
result = validate_workflow_draft(patched, node_defs=effective_node_defs)
|
||||
if result["status"] == "valid":
|
||||
patched = WorkflowDraft.model_validate(patched).model_dump(mode="json")
|
||||
# Forward-route references to steps added later must persist as invalid
|
||||
# so the next edit can resolve the missing edge. Always return the
|
||||
# patched draft alongside diagnostics.
|
||||
return {"draft": patched, **result}
|
||||
|
||||
|
||||
|
||||
@@ -192,7 +192,9 @@ def _validate_reachable_outcomes(
|
||||
reachable = reachable_node_ids(workflow.start, workflow.edges, nodes_by_id)
|
||||
|
||||
for node_id in reachable:
|
||||
node = nodes_by_id[node_id]
|
||||
node = nodes_by_id.get(node_id)
|
||||
if node is None:
|
||||
continue
|
||||
declared_outcomes = declared_outcomes_for_step(node, node_defs)
|
||||
wired = outgoing.get(node_id, set())
|
||||
missing = declared_outcomes - wired
|
||||
|
||||
Reference in New Issue
Block a user