Maintenance release focused on Git-compatibility correctness for case-only renames, hardening of the AI agent/Code-UI runtime, and release-pipeline automation.
🐛 Bug Fixes
- libra add / libra status — case-only renames (#435). Renaming a tracked file or directory by case alone (e.g. slides/ → Slides/) no longer raises a false LBR-CASE-001 case-collision error. Such paths are now treated as aliases of the tracked entry, while genuine case-fold twins remain protected by same-file identity comparison. libra status no longer keeps reporting the old-cased path as untracked (?? Slides/) and now honors core.ignorecase consistently across its untracked-scan wrappers.
✨ Improvements & Hardening
- libra agent clean --gc now enforces stderr retention. The agent.retention.stderr_days setting (default 30) is now wired in: --gc prunes reviewer *.stderr.redacted.log files from aged, terminal review/investigate runs while preserving the aggregate record (state, manifest, findings, and stdout). This previously-dead configuration is now effective, with fail-closed guards against symlinked reviewer directories, non-terminal states, and time overflow.
- Deterministic headless Code-UI tool-call projection. Fixed a pre-existing race in the headless runtime where out-of-order on_tool_call_start/_end tasks could clobber a completed state with a late running, leaving plan / tool-call / transcript rows stranded (~40% flaky). An ordering barrier plus a monotonic upsert guard make the projection deterministic.
🚀 CI / Release Automation
- Homebrew tap auto-update on release (#436). The release workflow now updates the Homebrew tap automatically when a version is published.
📚 Documentation
- Added mainline gap-analytics documentation and refreshed the sandbox gap analysis.
- Recorded the tracing-plan §11 completion audit and documented deliberate deferrals (preview/opt-in external-discovery; MCP authz gating; web-only headless IntentSpec approval).
- Added docs/development/experience/pr.md, a development note for the future libra pr workflow.
Full Changelog: v0.18.21...v0.18.22
Want me to:
- Fix the bump commit / version mismatch (the subject says 0.8.22 — should I amend or add a follow-up so the tag/commit read 0.18.22)?
- Add this to CHANGELOG.md (the top [Unreleased] section currently has no 0.18.22 heading)?
- Trim it down to the minimal GitHub auto-notes style (just #435 / #436 + compare link)?