Status: published and independently verified 2026-08-30
Prepared: 2026-08-25
Tag: v1.8.0 at 8dcb3fb676242af49236fac749ac3a57456cac0b
Settlement pull request: #78
Release-record pull request: #79
Publication-repair pull request: #80
Release workflow: run 33346147256
This release adds user-visible recovery and finalization capabilities, new CLI options, an opt-in MCP handoff path, and verified shared-store wiring for four additional agent hosts. Users need the changelog to know these capabilities exist and how transcript trust differs from drawer trust.
cairntir recover,
--recover-from, or recover_transcripts=true;--write N is explicit
and writes with trust=untrusted, capture_path=transcript_recovered;The parsers were checked against local host-owned transcripts without copying their content into fixtures:
type=user, message.parts[].text, and tool-running
assistant parts with functionCall; the real killed 2026-08-05 request at
23:25:50Z is recovered from its bounded tail;type=user, string or text-block content, tool-result
user records, and assistant stop_reason=end_turn completion;session_meta.payload.cwd, user
response_item/input_text, turn ids, and event_msg/task_complete;f53bdea8dcb3fbThe immutable annotated tag v1.8.0 points to the protected release-record
merge 8dcb3fb676242af49236fac749ac3a57456cac0b.
The first tag-triggered run, 33345026660, exposed a circular gate: pre-publication tests required 1.8.0 to exist on PyPI before the workflow was allowed to publish it. The failure occurred before the build, PyPI, or GitHub Release jobs; the tag was not moved, deleted, or reused. PR #80 added an exact-tag recovery path, kept all product tests, moved the self-referential tag/PyPI check after trusted publishing, and required GitHub Release creation to wait for that independent check.
Recovery run 33346147256 checked out v1.8.0, verified that its version and
commit exactly matched the tag, passed the release gates, built and attested the
artifacts, published through PyPI Trusted Publishing, verified the public PyPI
files, and created the GitHub Release. PyPI accepted the files before its JSON
index exposed them; the post-publish gate passed once that propagation completed.
Artifact digests are identical across the workflow artifact, GitHub Release, and PyPI:
| Artifact | SHA-256 |
|---|---|
cairntir-1.8.0-py3-none-any.whl |
74a42bfd5f0db8cb68bf5c3d5a1387c4d73eba19cbc7bd80f09e2da65d44b59e |
cairntir-1.8.0.tar.gz |
8e3be37c9cb05186314d81db014532dc1a3704747c19d3b8f5018015af5146ee |
gh attestation verify --repo pnmcguire480/cairntir verified both artifacts.
Because this was an immutable-tag recovery dispatched from main, the SLSA
certificate identifies workflow commit 3a7af17d6ffd63cb2930dc56af514a4678d9170d
and refs/heads/main; the workflow’s separate exact-tag check is the evidence
that the built checkout was v1.8.0 at 8dcb3fb. This provenance distinction
is recorded rather than overstated.
A fresh Windows Python 3.11 environment installed cairntir==1.8.0 using only
public PyPI. cairntir version returned 1.8.0, --help rendered cleanly, all
four bundled recipes loaded from site-packages, and the 64-package environment
passed uv pip check.
None. The database schema and embedding space are unchanged. Transcript reads are opt-in and local. No reindex or transcript import is performed.
Patrick explicitly requested that 1.8.0 be released on 2026-08-30. The tag
points to the exact protected-branch release-record merge. Trusted publishing,
provenance verification, artifact digest comparison, and a fresh public-PyPI
Windows install all passed.