mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
ESQ1-302 and ESQ1-303 both died at Graph.init -- before workflow_started, so the Builder saw an error frame with no run id and no rows, and spent runs and approvals discovering what a validation pass could have said up front. apply_repair now runs that pass (preflight_errors: the same node-data validation create_node performs, with no factory or runtime state) over the graph it is about to write and raises PreflightError, naming each node Graph.init would reject. Only NEW problems count: a pre-existing broken node the repair does not touch must not veto an unrelated fix, and a repair that heals it passes. PreflightError is a ValueError so the handlers' existing stale-intent guards already surface it as a card. The real ESQ1-303 dev draft is the fixture: preflight names node2 and its numeric value, and passes once the value is a string. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>