be-coder-08 found two defects in the regression test I added with the fix. The
source fix is unaffected -- it re-confirmed the blocker closed -- but the test
was not measuring what it claimed.
1. `out=$( ... ) 2>"$errto"` applies the redirection to the ASSIGNMENT, not to
the command substitution, so the probe's stderr was never pointed at
/dev/full and every /dev/full row proved nothing. Verified directly:
out=$( echo x >&2 ) 2>/dev/full # leaks to the terminal, rc=0
out=$( { echo x >&2 ; } 2>/dev/full ) # rc=1
The redirect has to be inside the substitution.
2. `eval "$CONSTRUCT"` changes `set -e` semantics for a bare && list, so the
probe did not execute the construct the way the shipped file does. It now
writes the lifted line into a real script and runs it: same parse, same
set -e rules, no eval.
Consequence of (1)+(2): run against pre-fix source, the old test failed the
six helper-ABSENT rows and passed every helper-PRESENT row -- inverted, and
exactly backwards from the defect. It would have gone green on a broken tree
for the wrong reason.
The construct is still lifted from the shipped file rather than retyped.
Faithful control, matching be-coder-08's prediction exactly:
fixed source: all 12 behavioural rows 0:yes
pre-fix source: 1:no on helper-present + failing-stderr ONLY (3 rows, one per
call site); all 9 other rows 0:yes
Reported-by: be-coder-08