pub fn external_effect_barrier(op: &Op) -> Option<&'static str>Expand description
Whether the reverse executor supports op yet — the GROWING reversible subset. R1 covers the
abelian core (RevSwap, zero garbage), straight-line scalar compute (overwritten_reg), the
global write/read, output, and program stop. A program containing any other op declines recording
with a clear error rather than silently mis-reversing; the subset expands (control flow,
collections, effects) in R2/R3.
If op is a truly-EXTERNAL effect that cannot be un-done — the honest Landauer wall, an
already-sent network message can’t be un-sent — name the irreversibility barrier. None for
reversible ops and for internally-modeled effects (buffered output, in-process channels, the
clock) that DO reverse. This turns an irreversibility into a NAMED, enumerable boundary instead of
a generic “unsupported”, so the reverse executor never silently pretends the world can be rewound.