Equation transitions fall through to Else despite correct dynamic variables and Code Node readback

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 = ON
  • subflow_result_valid <- subflow_result_valid
  • active_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:

  1. A single Equation condition.
  2. Two conditions joined with ALL.
  3. String equality only.
  4. Code-normalized values.
  5. Binary string flags such as "true" and "false".
  6. Wait for Result = ON.
  7. 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

  1. Is this a known issue with Equation transitions or Logic Split nodes?
  2. Are Code Node response variables guaranteed to be available to an immediately following Logic Split?
  3. Are Equation values treated as strings when both sides contain text?
  4. Is there an undocumented requirement concerning variable declaration, transition ordering, subflow boundaries, or the number of Equation conditions?
  5. 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.

Hello @space_nija

Please share the relevant Call IDs so we can review the issue and investigate further.

Thank You