mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
An LLM writes `>=` where graphon's `SupportedComparisonOperator` (and the list-operator's `FilterOperator`) spell `≥`; pydantic refuses it at `Graph.init`, so F4's whole Edit batch was rejected and the session parked at `edit.plan_approval` with nothing written. `_normalize_condition_list` -- the walker that already visits all five condition containers and already holds `comparison_operator` in hand -- now canonicalizes the two ordering forms (`>=`→`≥`, `<=`→`≤`) BEFORE the value rule, which keys on that operator. Only the ordering forms. Every equality-family ASCII form is ambiguous: graphon's string equality is `is`/`is not` (`_assert_is` takes `str|bool`) and its number equality is `=`/`≠` (`_assert_equal` takes only numbers/bools), so `==`, `!=` and `<>` carry exactly the ambiguity that keeps `equals`/`gte` rejected. Ordering carries none: graphon has no string ordering operator at all, so `>=` can only mean `≥`. `heal_nodes_for_preflight` is the one shared definition of the deterministic heals a graph gets before it is preflighted, so the write chokepoint and the dry run that decides applicability cannot drift apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>