Diagnostics and Troubleshooting
Start with the Form Designer's validation message. For a live form, the Form Runtime Debugger shows the executed effects, field state, and recent failures.
Designer Validation and Diagnostics
| Diagnostic | Result |
|---|---|
$value read not covered by listen | Dependency warning. Add the path if its change should rerun the effect. |
| Field dependency cycle | Warning. Saving remains possible. |
$row prefix is not an array | E_LISTEN_ROW_SCOPE_INVALID; saving is blocked. |
One effect mixes $row array scopes | E_LISTEN_ROW_SCOPE_MISMATCH; saving is blocked. |
One path uses $row for multiple array levels | E_ROW_DEPTH_UNSUPPORTED; saving is blocked. |
Direct or indirect runEffect recursion | Error; saving is blocked. |
| Invoked effect without an ID | Schema validation error. |
| Duplicate invoked-effect ID | Schema validation error. |
Missing, ambiguous, or non-invoked runEffect target | Schema validation error. |
Invalid ${...} syntax | JEXL validation error. |
The diagram displays field and invocation cycles. The linear Effects editor also groups missing-listen dependency warnings.
Runtime Limitations
- Effects are defined at the root schema level.
field,from, andtoare literal paths and cannot be calculated. They support one$rowplaceholder but not JEXL such as$event.indexes[0].- One
$rowscopes an effect to one array level. A single path cannot address multiple nested array levels with repeated$rowplaceholders. - Widget-event
objectPointervalues identify positions and must be remapped after structural schema changes; use the Form Designer for this. - Nested
scriptactions insidesuccessDoanderrorDoare blocked.
Troubleshooting
Runtime logging
Guardrail and execution failures are always reported as console warnings or errors. Detailed per-effect traces are emitted only when runtime effect logging is enabled. Representative messages include:
[FluentEffects] Max depth reached, stopping execution
[FluentEffects] Execution depth warning
[FluentEffects] Possible infinite loop detected: ...
[FluentEffects] Control not found for set action: ...
[FluentExpressionRuntimeService] evaluation error: ...
[FluentScriptEffects] Script executed successfully
[FluentScriptEffects] Script execution failed
Cycle errors include the cascade depth and executionPath, which identifies
the sequence of effect IDs that led to the guardrail.
The effect does not run
- Confirm that it is not disabled.
- For a value-change effect, confirm that
listencontains the value that actually changed. - For a widget event, confirm the selected widget source and event name.
- Remember that the initial form snapshot is only a baseline unless
runOnInitializationis enabled.
A field is not found
Use a literal dot path such as customer.address.street. Remove $value,
${...}, or JSON Pointer slashes from action targets.
A condition looks truthy but does not run
when must evaluate to boolean true. Inspect whether the expression returns a
string, number, object, or missing value instead.
A datasource expression does not resolve
Confirm that the datasource declares a supported effect mode. For an
identifiedPack, read its settled result from .data.
A script result is missing in an invoked effect
$response does not cross an invocation boundary. Map the required value into
runEffect.inputs and read it from $input in the invoked effect.