v0.47.2
v0.47.2
Patch release: a wave of correctness and hot-path fixes from an automated
verify-fix loop, plus URL-reading and PATH improvements.
Data-integrity fixes
- apply_patch no longer corrupts CRLF files. Updating a file with Windows
(CRLF) line endings previously wrote mixed endings (the changed line came
back LF among CRLF lines). Patches now preserve the file's dominant line
ending. - inline refactor preserves operator precedence. Inlining
twice(1 + 2)
wheretwice(x) => x * 2produced1 + 2 * 2(wrong: 5 instead of 6).
Non-atomic arguments are now parenthesized. - Python import aliases are no longer dropped. Removing one name from
from m import a, b as c(orimport a, b as c) could delete the whole
statement including the aliased sibling. Aliases are now modeled and
preserved.
Reliability fixes
-
Fixed a health-probe deadlock under the daemon. A health check could
deadlock against a starting background worker (lock-order cycle), stalling
the probe until the supervisor restarted the module. Health checks now
never wait on worker startup. -
extract_function no longer drops variables. Extracting a range that
declared multiple variables used later kept only the first and silently
deleted the rest (code that crashed at runtime). Multiple live-out
variables now return together (object destructuring in TS/JS, tuples in
Python), and unsupported shapes are rejected with a clear error instead of
emitting broken code. -
File edits no longer rewrite the whole undo history in the database.
Each edit re-wrote every retained undo entry (~41 SQL statements at default
depth); appends now write only the delta. -
bash_watch no longer reports fabricated matches. stdout and stderr were
concatenated before pattern scanning, so a pattern could "match" across the
seam (stdoutERR+ stderrOR=ERROR). Streams are now scanned
independently, and matches report which stream they came from. -
bash
wait: truepolling no longer re-reads output 10×/second. Long
foreground waits stopped doing redundant per-poll output reads under the task
lock. -
Orphaned auto-update locks self-heal. A crashed process could leave a
stale lock that permanently disabled update checks; dead/stale locks are now
reclaimed. -
Warm symbol lookups skip re-hashing unchanged files (zoom/outline/rank-0
search), and the LSP diagnostics store is indexed by file so watcher
invalidation no longer scans every entry.
URL reading
- GitHub file links just work.
aft_outline/aft_zoomon a
github.com/…/blob/…URL now fetch the raw file content instead of the web
page shell (GitLab-/blob/too). - Heading lookups tolerate real-world headings. Zooming a documentation
heading now matches when you pass the human text, even if the outline shows a
numeric prefix (12.1.5 …), a markdown link label, an emoji, or an anchor
slug (#http_flow/http-flow). - Paths and targets can be given as
file://URLs.
Shell PATH
- bash finds tools installed via your shell rc. The login-shell PATH probe
now sources interactive rc files (zsh.zshrc), so binaries on a PATH you
export there (e.g.~/.opencode/bin) resolve in bash tasks.