v0.1.8
Fixed
-
Heredocs survive the cwd-report suffix.
bashappended
; __gray_rc=$?; printf ...to the command text, so a command whose last
line was a heredoc terminator readEOF; __gray_rc=$?and the terminator
never matched: the whole suffix landed inside the heredoc body — a shell file
written with a garbage trailer, or aSyntaxErrorfor an interpreter
heredoc, silently (rc=0). Each piece of the suffix now sits on its own
line, which also stops a trailing#comment from eating it and makes
cmd &legal. 33 of 47 DeepSWE runs in the 2026-09-29 retro reported this;
it cost each a wasted turn at best. -
- The
windows-runtimeCI gate stops hanging on the search-index bench.
Everycirun since the search-as-command merge (#145) died at
index_vs_spawn_tax— "running for over 60 seconds", then silence until
the job's 60-minute budget was spent. The hang had no reachable timeout:
the bench's deadline assert lived inside its own poll loop, but the call it
polled (SearchPool::warm_picker) never returned — it took the pool's
residentmutex with a blockinglock(), and index construction held that
same mutex across everything fff does, which on Windows stalled inside
unbounded dependency waits (LMDB writer lock, git status, watcher init).
The probe is now non-blocking (try_lockwith a ~50ms budget, then "not
warm" → fd/rg answers), construction runs with no pool lock held and is
deduped by root, and every bench phase carries a hard timeout that fails
naming the phase. A wedged build now costs one search its fallback lane —
and costs CI a two-minute failure with a name on it — instead of a 60-minute
silent hang.windows-focusedtakes atest-pathinput, so a native
single-test iteration no longer means editing the workflow.
- The