Skip to content

v0.47.2

Choose a tag to compare

@github-actions github-actions released this 18 Jul 18:03
· 1979 commits to main since this release

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)
    where twice(x) => x * 2 produced 1 + 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 (or import 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 (stdout ERR + stderr OR = ERROR). Streams are now scanned
    independently, and matches report which stream they came from.

  • bash wait: true polling 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_zoom on 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.