v3.8.20
Fixed (GH#18804 follow-up)
PR #18813 (v3.8.18) added a 'entering candidate loop' fence-post that proved the silent dispatch failure happens INSIDE the candidate loop, not in the prepass capture. This release adds the next layer of diagnostics.
- Switched candidate iteration from process substitution to a tempfile feed. Process substitution failures are invisible to set -e and the parent subshell; a tempfile is observable — line count is now logged BEFORE the loop runs.
- Per-iteration fence-post logging (unconditional, not PULSE_DEBUG-flagged): logs every iteration entry, the rc from
_dff_process_candidate, and the 'loop body finished' marker. This pinpoints the exact iteration where a silent exit occurs. _dff_process_candidaterc is now captured via the set-e-safe|| _dff_proc_rc=$?idiom instead of relying on if-context masking — belt-and-braces against any future refactor that loses that masking.- First-candidate JSON preview log (240-byte truncated) so operators can see the shape the loop is iterating over.