Hi Retell team,
We are seeing an apparent runtime issue with Equation transitions in a Traditional/Rigid Conversation Flow.
Expected behavior
A Code Node returns and stores:
{
"subflow_result_valid": "true",
"active_subflow_exit": "create_booking"
}
The following Logic Split contains:
ALL:
subflow_result_valid = "true"
active_subflow_exit = "create_booking"
Expected destination: Create Booking.
Actual behavior
The Logic Split ignores the matching Equation and follows Else → Safe technical fallback.
Relevant transition sequence:
map_availability_subflow_exit
Result:
{
"subflow_source": "availability",
"availability_subflow_exit": "create_booking"
}
normalize_active_subflow_result
Result:
{
"subflow_result_valid": "true",
"active_subflow_exit": "create_booking"
}
Subflow Result Router
→ Safe technical fallback (Else)
Store Fields/readback verification
The Code Node has:
Wait for Result = ONsubflow_result_valid <- subflow_result_validactive_subflow_exit <- active_subflow_exit
To exclude a Store Fields timing or propagation problem, we added another Code Node immediately before the Logic Split:
return {
debug_subflow_result_valid: String(
dv.subflow_result_valid ?? "__missing__"
),
debug_active_subflow_exit: String(
dv.active_subflow_exit ?? "__missing__"
),
};
Its runtime result was:
{
"debug_subflow_result_valid": "true",
"debug_active_subflow_exit": "create_booking"
}
Therefore, the expected dynamic variables were present and readable immediately before entering the Logic Split. The Equation still fell through to Else.
Other variants tested
We observed similar behavior with:
- A single Equation condition.
- Two conditions joined with
ALL. - String equality only.
- Code-normalized values.
- Binary string flags such as
"true"and"false". Wait for Result = ON.- An intermediate Code Node confirming the stored values.
We also found that numeric comparisons such as:
booking_intake_attempts < 2
do not work when the Code Node stores the value as a string. We removed those comparisons, but the two-string-equality case above still failed.
Prompt transition comparison
Equivalent Prompt transitions sometimes route correctly, but they are not sufficiently deterministic for backend statuses. For example, a Prompt route for create_booking incorrectly matched when:
active_subflow_exit = "technical_failure"
because the conversation itself concerned booking. This caused the flow to re-enter the booking subflow until Retell detected a transition cycle.
Questions
- Is this a known issue with Equation transitions or Logic Split nodes?
- Are Code Node response variables guaranteed to be available to an immediately following Logic Split?
- Are Equation values treated as strings when both sides contain text?
- Is there an undocumented requirement concerning variable declaration, transition ordering, subflow boundaries, or the number of Equation conditions?
- What is the recommended deterministic routing pattern for backend and Code Node statuses in Traditional mode?
We can provide anonymized call logs and the exported conversation-flow JSON privately. The issue is reproducible and currently blocks us from using Equation transitions for critical booking and fallback routing.