cairntir

v1.7.0 Release Acceptance

Status: accepted for publication Prepared: 2026-08-13 Target: v1.7.0 Origin: external upgrade review of 1.4.1 → 1.6.2 against a live 3,586-drawer store (Jarvis, for Lou), 2026-08-11

Why a MINOR

By the Release Cadence tiebreak — if a user would need to read the changelog to know what changed, it is a MINOR — two changes qualify:

Everything else is a fix. This is not a patch.

No reindex required

The embedding space is unchanged from 1.5.0: same model, same 512 dimensions, same embedding_space_id. Only the location of the cached model file changes. The live store was checked before tagging and reports state=verified dim=512, so no migration or reindex is part of this upgrade.

Automated acceptance

Live store evidence

Read before tagging, without writing:

db            : %LOCALAPPDATA%\cairntir\cairntir.db
model cache   : %LOCALAPPDATA%\cairntir\models
drawers       : 425   wings: 24
longest drawer: #239  8,924 chars  2,377 tokens
headroom      : 3.45x (window 8,192)
over window   : 0 drawers
index state   : verified  dim=512

The rewritten window test measures this store with the real tokenizer rather than comparing two literals. Note that 2,377 tokens matches the constant the old test froze — the literal was accurate for this store, which is precisely why the test stayed green while being false on the reviewer’s 3,586-drawer corpus, where the longest drawer is 6,414 tokens and the true headroom is 1.28x.

Isolated wheel smoke

Fresh venv, wheel installed from dist/, run from outside the source tree:

Two fixes were confirmed by the install itself. The model downloaded into the new anchored cache at %LOCALAPPDATA%\cairntir\models\, proving the cache relocation, and the directory it created is models--xenova--jina-embeddings-v2-small-en — direct confirmation of the provenance finding that the declared jinaai/… identifier resolves to a third-party re-conversion.

Known limits

Publication

Tag v1.7.0 pushed to trigger trusted publishing. Confirm the GitHub Release, the PyPI upload, and both provenance attestations before considering the release done. If a tag push creates no workflow run, check https://www.githubstatus.com before suspecting the workflow — that was the cause in 1.4.1, and the escape hatch is gh workflow run release.yml --ref v1.7.0, which is legitimate because the publish jobs gate on the ref being a tag.

PyPI’s aggregate /pypi/cairntir/json lags the per-version endpoint by minutes. Checking only the aggregate immediately after publishing produces a false “publish failed” verdict. Confirm with /pypi/cairntir/1.7.0/json.