Skip to content

Releases: libra-tools/libra

v0.18.91

Choose a tag to compare

@genedna genedna released this 15 Jul 06:50

Git Surface Expansion

Remotes & refspecs (v0.18.61)

  • fetch now honors full refspec mappings: configured remote..fetch mappings, exact :, and one wildcard per side. Destination/reflog/remote-HEAD writes are transactional; non-fast-forward mappings without +/--force fail closed. --prune deletes tracking refs against the effective configured destination mapping.
  • remote gains set-branches, set-head, and remote update (with remotes.default and remote-group expansion). rename transactionally migrates refspec destinations, branch upstreams, tracking refs, and reflogs, rolling back entirely on any namespace conflict.

Non-interactive merge/rebase/history controls (v0.18.62–

  • rebase: --autostash, repeatable sandboxed --exec, --update-refs, --fork-point, --onto, --autosquash, --reapply-cherry-picks. - merge: the -s ours strategy, -X ours/theirs strategy ohistories, --log[=], plus the Libra extensions--dry-run (zero-write preview) and --restart. - reset: guarded --merge/--keep modes with snapshot-and-c-from-file/--pathspec-file-nul, and symlink-modefidelity. - cherry-pick/revert: --cleanup=, -X ours/theirs, utoupdate, multi-commit auto-continuation for revert, and a unified sequence_state cross-operation sequencer mutex.
    The diff feature series (v0.18.65–0.18.76, six installments) - Review metadata controls: --src-prefix, --dst-prefix,
  • Pickaxe search: -S (occurrence-count change) and -G (regex-matched hunks). - Word-level diff: --color-words[=] (v0.18.70) an.71).
  • Selectable algorithms: --diff-algorithm=<myers|minimal|patience|histogram> with --minimal/--histogram shorthands (v0.18.73; hardened under audit in v0.18.74/75).
  • Anchored patience: --anchored= (v0.18.76).

Revision parsing & plumbing (v0.18.78/79)

  • Typed peel ^{commit|tree|blob|tag|object}, recursive ^rs @{N}, and REV:path — wired uniformly throughrev-parse, cat-file (including batch modes), show-ref --dereference, and branch --points-at.
  • New/extended plumbing: commit-tree (side-effect-free cree --index-file (scratch index that never touches theshared .libra/index).

Sandboxed repository hooks (v0.18.80)

  • A .libra/hooks lifecycle covering commit, checkout/swill — structured arguments, allowlisted environment,offline required sandboxing, and bounded I/O. --no-verify and LIBRA_NO_HOOKS provide escape valves; .git/hooks is never executed.

Migration & interoperability (v0.18.82)

  • fast-export/fast-import expanded (multiple revisions, ted tags, notes, inline blobs, copy/rename, atomicpublication); bundle gains --all/--branches/--tags, full checksum verification, and hash-kind-aware unbundle — covering SHA-256 repositories and system-Git round trips.

Mail patch workflow (v0.18.84–0.18.87)

  • libra am (v0.18.84): a minimal mail patch sequencer with --continue/--skip/--abort, crash-safe recovery, and atomic branch advancement.
  • libra mailinfo (v0.18.85): repository-independent mailone bounded parser with am.
  • format-patch (v0.18.86): -1/--root, threaded cover letters, and strict format.* config defaults — proven by a seven-scenario Libra↔Git am
    interoperability suite.
  • send-email (v0.18.87): explicitly documented as a non-sending policy surface.

Other improvements

  • checkout - / switch - previous-target shortcut (v0.18.
  • Installer: optional movable lba -> libra alias symlink (v0.18.88).
  • Agent session list shows relative times; reset command

AI Agent Session-Capture Pipeline (plan-20260713 DR seri

  • M1 (v0.18.72): the unified TranscriptSource seam (DR-0col with golden vectors; theagent_coverage_claim/revision gate schema with redact-before-digest and semantic type validation; a claim state machine with fenced
    takeover; a single-transaction ref+catalog+revision+clai live path first.
  • M2 (v0.18.77): Claude session discovery (~/.claude/projects/ resolution with symlink rejection and root containment); bounded
    fail-closed Codex rollout discovery; the transcript flus/02/03). Multiple hardening rounds followed: globalfan-out/deadline bounds, home-independent CODEX_HOME, authorized and bounded transcript preparation.
  • M3 (v0.18.81): the OpenCode export bridge (DR-04b) — ttrusted, sandboxed opencode export subprocess under arequired bwrap offline profile, coordinated by the agent_export_job generation/lease scheme, with cross-path digest parity. Hardened across
    five Codex review rounds (RLIMIT_FSIZE cap, fd-pinned WAe pin closing the check-to-bind race, bounded bwrapprobe, and more).
  • M4 foundation: agent_import_identity + agent_import_to (DR-05c/DR-06), laying the groundwork forcrash-recoverable imports and tombstone propagation.

Robustness, Release Engineering & Documentation

  • Future-schema config degradation (v0.18.89, P0-12): local commands now skip a future-schema global config store with a deduplicated
    warning instead of failing with LBR-IO-001; all other reosed (pinned by a 12-case regression suite).
  • Unmerged conflict-code closure (v0.18.91, P0-01): all seven porcelain v1/v2 unmerged XY codes (DD/AU/UD/UA/DU/AA/UU) pinned by unit tests
    plus real merge-conflict fixtures.
  • Benchmark tooling (v0.18.90): new benchmark/ suite (run.sh harness + test runner).
  • Documentation: professional README overhaul for the opLAUDE.md trimmed; agent tracing docs synced to code truth (A0-02/A0-09).
  • Test stability: concurrent-rollback contract stabilizegated, OID-pinned fixtures gated on presence.
  • Note: v0.18.67–0.18.69 were version-contention resolution releases under the concurrent-push protocol (version numbers consumed, no standalone features).

v0.18.60

Choose a tag to compare

@genedna genedna released this 13 Jul 02:16

Libra 0.18.60 — Release Notes

Release date: 2026-07-13
Theme: feat(commit): honor status template defaults

This release completes Libra's "honor Git config defaults" line by making commit's editor status template Git-compatible by default, and it lands a hardened, resource-bounded implementation of the commit --dry-run / -a preview path. It also
ships a gitlink-directory safety fix for restore.

Highlights

commit: status template is now included by default (Git-compatible)

The commit-message editor template now seeds the working-tree status as #-commented lines by default, matching Git. Previously Libra omitted it unless you passed --status.

  • commit.status=false disables the status section.
  • --status / --no-status explicitly override the config for a single commit (last flag wins).
  • The status lines are comments, so message cleanup always strips them — they never enter the final commit message.
  • Only paths that can actually open an editor and strip comments read the key. -m, --dry-run/--porcelain, --json, and non-stripping cleanup modes (verbatim/whitespace/scissors) bypass it entirely, so the status can never leak into a message.

libra commit # editor template now includes the commented status
libra config commit.status false
libra commit --status # re-enable for just this commit
libra commit --no-status # omit for just this commit

commit.status follows the strict local → global → system cascade and accepts Git boolean forms (including numeric values). An invalid value fails fast with LBR-CLI-002, and an unreadable config store fails with LBR-IO-001 — both before -a,
hooks, object writes, or history updates.

Hardened, resource-bounded commit --dry-run / -a preview

The dry-run preview path was reworked to be safe, isolated, and bounded:

  • Index isolation: --dry-run -a runs against a task-local temporary index. The live index is never replaced, and temporary auto-stage blobs, LFS backups, and tree objects are not persisted.
  • No side effects: dry-run and porcelain previews skip the pre-commit hook, the editor, rerere updates, and post_commit automation because no commit occurs.
  • Bounded verbose previews: every unique changed/staged/auto-staged blob is reserved before loading, with limits of 32 MiB per blob, 64 MiB aggregate scratch, and 4,096 objects. Over-limit declarations are rejected before decoding; the preview
    reads existing pack indexes only and never rebuilds them; remote-only or index-missing blobs are refused up front. On a limit hit, Libra advises rerunning without -v and leaves the live index and object store untouched.
  • Bounded scratch: preview scratch lives under shared repository storage at .libra/tmp/commit-preview (shared by linked worktrees), is capped at 256 MiB across concurrent runs, and scavenges stale runs (older than 24h) on a bounded startup
    scan. Runs with missing/unreadable reservation metadata fail closed rather than being charged as zero.
  • Symlink-safe auto-stage: tracked symlinks (including dangling links and LFS-pattern paths) are detected without being followed; the link-target bytes are hashed and mode 120000 is preserved in both real commits and previews.
  • Durable real -a: blob/LFS materialization streams to a temporary snapshot, derives the pointer from those exact bytes, and atomically replaces any stale/truncated backup. Under --sync-data, staging and destination directories are fsync'd
    around the atomic replacement (Windows uses a write-through atomic replace).
  • Fail-closed I/O: auto-stage read failures surface as LBR-IO-001; preview/LFS-backup/object-write failures as LBR-IO-002 — no panics. When status.showStash=true, an unreadable/non-file stash ref or corrupt stash log aborts template collection
    with LBR-IO-001 before any hook, editor, or ref write.

restore: gitlink directory safety

restore can now safely remove an empty materialized gitlink directory or replace it with a regular file, symlink, deletion result, or rebuilt conflict-marker file (--merge / --conflict=diff3). All selected directory transitions are preflighted
before any write, and a non-empty directory is refused — so nested repositories and user files are never recursively deleted or left behind after a partial multi-path restore.

Compatibility

  • COMPATIBILITY.md updates the commit row to document the new commit.status default, the preview resource boundary, and the durability guarantees, plus a new Restore gitlink directory safety section.
  • No breaking CLI changes. The only behavior change is that commit's editor template now shows the commented status by default; set commit.status false (or pass --no-status) to restore the previous behavior.

Documentation

Updated command docs (EN + zh-CN) for commit and restore, and their development-doc counterparts.

Testing

Adds a suite of tests/compat/config_defaults_commit_status* guards covering the status-template default, auto-stage limits, I/O and recovery failure modes, verbose previews, and side-effect isolation, alongside updated commit/restore
integration tests.

v0.18.22

Choose a tag to compare

@genedna genedna released this 08 Jul 06:02

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:

  1. 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)?
  2. Add this to CHANGELOG.md (the top [Unreleased] section currently has no 0.18.22 heading)?
  3. Trim it down to the minimal GitHub auto-notes style (just #435 / #436 + compare link)?

v0.18.21

Choose a tag to compare

@genedna genedna released this 06 Jul 23:05
d3fd829

What's Changed

Full Changelog: v0.18.20...v0.18.21

v0.18.20

Choose a tag to compare

@genedna genedna released this 06 Jul 14:33

What's Changed

  • fix(install): update canonical install URL to download.libra.tools by @genedna with @Copilot in #430
  • chore: bump git-internal to 0.8.2 by @Ivanbeethoven in #428
  • [codex] fix stash pop index preservation by @genedna in #429
  • fix(reset): support git-style bare path reset by @genedna in #431

New Contributors

Full Changelog: v0.18.15...v0.18.20

v0.18.15

Choose a tag to compare

@genedna genedna released this 06 Jul 01:55

What's Changed

  • fix(pull): match git no-upstream advice by @genedna in #424

Full Changelog: v0.18.7...v0.18.15

v0.18.7

Choose a tag to compare

@genedna genedna released this 05 Jul 05:47

What's Changed

  • [codex] skip unnecessary status untracked scans by @genedna in #423

Full Changelog: v0.18.6...v0.18.7

v0.18.6

Choose a tag to compare

@genedna genedna released this 04 Jul 23:55
fc406ba

What's Changed

Full Changelog: v0.18.1...v0.18.6

v0.18.1

Choose a tag to compare

@genedna genedna released this 04 Jul 12:55

What's Changed

  • chore: update release metadata and repository links by @genedna in #421

Full Changelog: v0.18.0...v0.18.1

v0.18.0

Choose a tag to compare

@genedna genedna released this 04 Jul 01:19

What's Changed

New Contributors

Full Changelog: v0.17.1513...v0.18.0