cairntir

v1.9.0 Release Acceptance

Status: published and independently verified 2026-09-03

Prepared: 2026-09-03

Tag: v1.9.0 at 6a4398661f361c03aa5da4ffb72aa098e6f9f6e1

Release pull request: #84

Publication-settlement pull request: #85

Trusted release workflow: 33717954236

Why a MINOR

This release adds a user-visible bounded-hotfix capability, one MCP tool, one CLI command, and one bundled recipe. It also adds Outcome.delta and carries explicit surprise through the existing reason, replay, and recipe paths. The stable public surface remains source-compatible because the new field has an empty default.

What is accepted

Automated acceptance

Local candidate artifact SHA-256 digests:

Artifact SHA-256
cairntir-1.9.0-py3-none-any.whl a43b4d9d836d38f23adb61160e5d1c96509c39c7c701c9929f3d8b82a5155f5f
cairntir-1.9.0.tar.gz c6d2c0a324e0a23ce3850df6878026c405b16eb69cd97ec039d794d3ebdde0c5

The trusted release workflow rebuilds these artifacts after tagging. Publication acceptance compares the workflow, GitHub Release, and PyPI copies to each other; it does not assume independent builds are byte-for-byte reproducible.

Publication evidence

PR #84’s protected CI run 33717179408 passed on exact candidate head 2a18adb04f4e25fac02a70f1c09e718ee24a0129. The PR merged as 6a4398661f361c03aa5da4ffb72aa098e6f9f6e1; post-merge CI, CodeQL, documentation, and Pages all passed before tagging.

The immutable tag v1.9.0 points to that protected merge. Trusted release run 33717954236 verified, rebuilt, attested, and published both artifacts to PyPI and the GitHub Release. Independent downloads from the workflow artifact, GitHub Release, and PyPI were byte-for-byte identical:

Published artifact SHA-256
cairntir-1.9.0-py3-none-any.whl 539bd2a5296515d2313516830108236de067829d45b4d317906b83e5a1efc900
cairntir-1.9.0.tar.gz 2cb1d001828cc85a90395f12d4c5ef0e84fbcf108ea487b3f78ccf5a4c37cdda

GitHub provenance verification passed for both published files. A fresh Windows/Python 3.11 environment installed cairntir==1.9.0 from the public PyPI index with no broken requirements. The import path came from the isolated environment, cairntir version returned 1.9.0, reason, replay, and recipe-run each exposed --delta, and all five bundled recipes loaded.

Migration

None. The database schema and embedding space are unchanged. Existing valid Reason adapters remain compatible. Outcome.delta defaults to an empty string; hosts may opt in to recording an explicit path-level surprise.

Publication authorization

Patrick explicitly authorized publishing v1.9.0 to GitHub and PyPI after the candidate completed its local and protected-CI gates and merged. Publication used one immutable annotated tag on the protected merge, the existing trusted-publishing workflow, artifact attestations, independent workflow / GitHub / PyPI digest comparison, and a fresh public-PyPI install. Every gate passed; the authorization is fully settled.