E-VALIDATOR-CIRCULAR-DEP
Validator predicate arguments form a cycle.
What it means
Cross-field validators may reference other fields — eq(), comparisons against sibling cells — and those references form a dependency graph. That graph must be a DAG: validation is evaluated in dependency order, so a cycle has no valid evaluation order. The code fires both for a direct self-reference (a field whose validator reads itself) and for a longer cycle across several fields.
Minimal reproducer
This is the exact source compiled against the linked compiler and verified to produce E-VALIDATOR-CIRCULAR-DEP.
<program title="p">
<signup>
<email req eq(@signup.email)> = <input type="email"/>
</>
<errors of=@signup.email/>
</>
How to fix
- Break the self-reference. A field's own validator should constrain its value, not compare it to itself; the self-reference is usually a typo for a sibling field.
- Make the dependency one-directional. For a confirm-password pair, only the confirmation field references the original — not both.
Related
Specification
Normative text: §31.4, §53.6.1, §55.11, §55.15, §34. Spec lives at compiler/SPEC.md .