v0.3.1
v0.3.1 is a patch release. It closes three LSP recovery correctness gaps disclosed as known limitations in v0.3.0, plus release-workflow reliability fixes. No new public capability, no breaking change.
Fixes
Non-Git roots now bind cross-file influence patterns inside excluded directories
Before: a declared influence pattern (pyproject.toml, go.mod, and similar project-config files) sitting inside an excluded build directory (env/, vendor/, node_modules/) never invalidated the content snapshot on a non-Git root, so recovery could carry stale evidence past a real cross-file configuration change. Git roots already bound this correctly through git ls-files.
After: a bounded search beneath an otherwise-excluded directory looks for declared-pattern matches specifically, without degrading into a full scan of the directory's contents. An ordinary file with no declared pattern still contributes nothing, so build noise inside target//node_modules//.venv/ still cannot invalidate recovery.
A bare Git repository no longer disables LSP enrichment
Before: a bare-repository startup root made recovery return an error rather than falling back to a content snapshot, unlike every other Git failure path in the same function — disabling LSP enrichment for the whole repository.
After: falls back consistently, like its neighboring branches.
A transient source-read failure no longer sticks for the rest of a pass
Before: SourceLineCache cached the empty result of a failed file read exactly like a genuinely empty file, permanently. A file unreadable once (briefly missing mid-scan, a permission race) stayed at column 0 for the rest of the pass even after the condition cleared, and the degradation was invisible.
After: a failed read is not cached, and failures are counted and surfaced in the existing "LSP Pass 1 complete" summary log line.
Release-workflow reliability
Three defects in the tag/release/version-bump pipeline used to publish RNA itself, found while shipping v0.3.0:
- The version-bump step could leave
Cargo.lockreporting a different version thanCargo.toml, socargo build --lockedand similar commands failed onmainafter a release. The patch logic is now a single, tested script (.github/scripts/patch-version.sh, 24-case test suite) that keepsCargo.toml,Cargo.lock, and.claude-plugin/marketplace.jsonin agreement and fails the release outright if any one of them does not verify. - A global regex patch to
marketplace.jsonrewrote every"version"key in the file, not only the two describing this package — silently clobbering any unrelated version field the file might carry. Replaced with a targeted patch of exactly those two fields. - The GitHub release's published notes could silently fall back to the tagged commit's message instead of the curated notes, because
actions/checkoutdoes not preserve the annotated tag object read by the release step. The workflow now re-fetches the tag explicitly before reading it.
Known limitations from v0.3.0 addressed here
The three gaps disclosed in v0.3.0's release notes — non-Git influence binding, bare-repo fallback, and the source-cache negative-caching behavior — are all closed in this release. See v0.3.0's notes for the original disclosure.
Not in this release
No new public capability. No performance or efficacy claim; the benchmark programme referenced in v0.3.0's notes remains paused, unchanged by this release.
Install
Download the archive for your platform, extract, and put repo-native-alignment on your PATH.
repo-native-alignment-darwin-arm64-fast.tar.gz— Apple Silicon, tuned for M4repo-native-alignment-darwin-arm64.tar.gz— Apple Silicon, M1 baselinerepo-native-alignment-linux-x86_64.tar.gz— Linux x86_64
On macOS, if the binary is killed on launch after copying, re-sign it: codesign --force --sign - <path>.