Fixed
- CRITICAL: Untrusted workspace could disable gitignore-respecting indexing (#833).
respect_gitignore = falsein an untrusted.lean-ctx.tomlnow stripped by
strip_sensitive_overrides; only trusted workspaces may widen the index. - ctx_refactor symbol edits now have a tree-sitter syntax gate (#836).
replace_symbol_body/insert_before/after_symbolpreviously wrote without
validating syntax. A clean→broken regression is now rejected before any write,
matchingctx_patchbehavior. Also added brace-balance status to diff previews. - addon registry resolver hangs indefinitely on dead IPv6 (#829).
Added connect (10s), resolve (5s), and response (30–60s) timeouts to all
registry HTTP calls. A dead AAAA route now fails over to IPv4 within seconds. - Dashboard
/api/statsshows 0 whilelean-ctx gainreports real totals (#830).
Replacedstats::load()with aggregatingload_for_display()across 11
user-facing surfaces (dashboard, TUI, wrapped card, gain views, ctx_discover). shelltool shown as "never called" in health check (#838).
tools healthnow resolves alias tools (e.g.shell→ctx_shell) for
usage lookup, preventing false "unused" reports.- Dashboard source trail expansion follows row index after sort/filter (#834).
_expandedTrailskeyed by stable file path instead of transient row index. gain --deeptables have no column headers (#837).
RECENT DAYS and TOP COMMANDS sections now show labeled header rows.enable-gpushows false "Update available" on same version (#839).
Now shows "Installing GPU binary for vX.Y.Z…" when versions match.- Secret redaction false positives for numbers and env refs (#827).
Numeric values (e.g.1.4e-06) and env references (e.g.os.environ/KEY)
are no longer incorrectly redacted.
Changed
shadow_modedefault changed totrue(#828).
One-time migration onlean-ctx updateenables shadow_mode for users who
never explicitly set it. Disable withlean-ctx config set shadow_mode false.
Added
ctx_patch op=replace_all(#825). Bulk literal find-and-replace without anchors.ctx_shellcompound-command block clarity (#815). Blocked segment position
and "no part ran" message. Timeout exit code 124 now labeled.shell_allow_inline_scriptsconfig option (#814). Opt-in forpython3 -c
/node -einline scripts.- Project-root binary auto-allow (#813).
./my_binarypaths under project
root are auto-allowed by the shell allowlist. xargs,env,nohupin default allowlist (#822).
Upgrade
lean-ctx update # recommended (auto-downloads + refreshes shell hooks)
cargo install lean-ctx # or
npm update -g lean-ctx-bin # or
brew upgrade lean-ctxNote: After upgrading via cargo/npm/brew, run
lean-ctx setupto refresh shell aliases.lean-ctx updatedoes this automatically.
Full Changelog: v3.9.10...v3.9.10