diff --git a/README.md b/README.md index c0ce59e..1c4a752 100644 --- a/README.md +++ b/README.md @@ -212,7 +212,7 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md). ## Roadmap and status -**Current release: v0.3.1.** +**Current release: v0.3.2.** See [SCOPE.md](./SCOPE.md) for the current project boundary. See [ROADMAP.md](./ROADMAP.md) for the full plan. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index ff31b5e..53b87da 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -177,6 +177,20 @@ Check that `notes_path` points to the vault root (the folder containing your `.m The JabRef adapter resolves file links relative to the `.bib` file location. If your PDFs are in a different directory tree, use absolute paths in your JabRef file links, or symlink the PDFs next to the `.bib` file. +## "index lock is held by another process" + +Since v0.3.2, one `partial-recall index` writer runs per vector DB. A +second `index` / `index --extend` against the same DB exits immediately +with this error instead of duplicating embedding spend — the check runs +before the model loads, so the failed command costs nothing. + +Wait for the running index to finish (or stop it), then rerun. The lock +lives in a `.indexlock` file next to your vector DB and is +released automatically when the indexing process exits — including +crashes and `kill -9` — so there is never a stale lock to clean up. +Deleting the `.indexlock` file does not force-release anything; the +lock is held by the running process, not the file's existence. + ## I want to use partial-recall offline / on a plane That's the default. With `[embedding] provider = "local-onnx"` and diff --git a/docs/walkthrough/five-minute-walkthrough.md b/docs/walkthrough/five-minute-walkthrough.md index ca1f1de..5c65339 100644 --- a/docs/walkthrough/five-minute-walkthrough.md +++ b/docs/walkthrough/five-minute-walkthrough.md @@ -37,7 +37,7 @@ Check: ```zsh partial-recall --version -# → partial-recall 0.3.1 +# → partial-recall 0.3.2 ``` If you get `command not found: partial-recall`, see diff --git a/pyproject.toml b/pyproject.toml index c5d6936..b071afb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "partial-recall" -version = "0.3.1" +version = "0.3.2" description = "Semantic memory for your scholarly corpus. Multilingual, offline-first, free." readme = "README.md" license = {text = "AGPL-3.0-or-later"} diff --git a/src/partial_recall/__init__.py b/src/partial_recall/__init__.py index 0d083a9..821772a 100644 --- a/src/partial_recall/__init__.py +++ b/src/partial_recall/__init__.py @@ -1,3 +1,3 @@ """partial-recall — semantic memory for your scholarly corpus.""" -__version__ = "0.3.1" +__version__ = "0.3.2" diff --git a/tests/test_cli_init.py b/tests/test_cli_init.py index be180b8..d67e850 100644 --- a/tests/test_cli_init.py +++ b/tests/test_cli_init.py @@ -177,3 +177,20 @@ def test_version_flag() -> None: result = runner.invoke(app, ["--version"]) assert result.exit_code == 0 assert "partial-recall" in result.stdout + + +def test_version_matches_package_metadata() -> None: + """`--version` prints partial_recall.__version__, which is set by hand + and can silently diverge from pyproject.toml at release time (it did + in the 0.3.2 release PR; caught by review). Keep them locked.""" + import tomllib + + import partial_recall + + pyproject = Path(__file__).resolve().parents[1] / "pyproject.toml" + with pyproject.open("rb") as fh: + declared = tomllib.load(fh)["project"]["version"] + assert partial_recall.__version__ == declared + + result = runner.invoke(app, ["--version"]) + assert declared in result.stdout