Whether a divergence is selector drift, and so in scope for re-resolution.
This is an ALLOWLIST, and deliberately so. Exactly two divergences mean "the
element I recorded is not where I recorded it": the target never appeared, and
the action against it failed. Everything else is flow drift — the run is not
where it should be — and re-resolving a selector there finds a same-named
control on the wrong page, clicks it, and reports the run Completed from
somewhere it was never meant to be.
It used to exclude reasons starting with postcondition, which let a URL
PREcondition failure through: a step recorded at /app/data, replayed at
/app/home with a button "Save" present, healed and passed.
An exclusion list also fails open — every divergence reason added later is
healable until someone remembers to exclude it. This fails closed.
Whether a divergence is selector drift, and so in scope for re-resolution.
This is an ALLOWLIST, and deliberately so. Exactly two divergences mean "the element I recorded is not where I recorded it": the target never appeared, and the action against it failed. Everything else is flow drift — the run is not where it should be — and re-resolving a selector there finds a same-named control on the wrong page, clicks it, and reports the run Completed from somewhere it was never meant to be.
It used to exclude reasons starting with
postcondition, which let a URL PREcondition failure through: a step recorded at /app/data, replayed at /app/home with abutton "Save"present, healed and passed.An exclusion list also fails open — every divergence reason added later is healable until someone remembers to exclude it. This fails closed.