Skip to content

chore(release): 0.3.0 - #257

Merged
tpouyer merged 1 commit into
mainfrom
chore/release-0-3-0
Sep 5, 2026
Merged

tpouyer merged 1 commit into
mainfrom
chore/release-0-3-0

Conversation

@tpouyer

@tpouyer tpouyer commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Bumps pyproject.toml and __version__ to 0.3.0. Nothing else changes.

Why minor, not patch

Two things in the 29 unreleased commits are not patches:

  • --record is now the default on the six verbs that call a provider. A run that reaches a model writes a cassette where it previously wrote nothing; --no-record declines. A behaviour a person did not ask for and now gets is a minor bump whatever the diff size says.
  • py.typed ships. That is a capability the distribution did not have — an adopter's own lockstep.py now type-checks against the installed package instead of answering import-untyped to every framework import.

Why now

git tag --contains 930ab3a is empty. #226 — which stops a model reading .env through search_text — has been on main and in no installable artifact, while README.md:8 tells a new adopter to install the version that still has the hole. That is the fact that made this urgent rather than tidy.

What ships

29 commits: 13 feat, 14 fix, 2 docs. The headline set —

fix(tools) a model's read tools consult a deny-read tier; search_text had no guard at all
fix(redact) a credential named rather than prefixed is still a credential
feat(packaging) py.typed, and everything init writes survives mypy --strict
feat(record) recording is what a run does; implement and fix can record at all
feat(record) a session is one case, and what leaves the runner is addresses
feat(review) /review <lens> from a comment, resolved against the lenses that exist
feat(evidence) a promoted case has a home, a ceiling, and a person deciding

A fresh init will pin in-lockstep[anthropic]==0.3.0, which test_gitlab.py:509 asserts.

make check 2120 passed / 4 skipped.

After this merges, pushing v0.3.0 publishes to PyPI — the release workflow refuses if the tag and either version disagree.

A minor bump rather than a patch, for two reasons that are not bookkeeping.

`--record` is now the default on the six verbs that call a provider, so a run
that reaches a model writes a cassette where it previously wrote nothing.
`--no-record` declines. A behaviour a person did not ask for and now gets is a
minor bump whatever the diff size says, and `init`'s disclosure states it at the
moment somebody opts in.

And `py.typed` ships, which is a capability the distribution did not have: an
adopter's own `lockstep.py` type-checks against the installed package instead of
answering `import-untyped` to every framework import.

The reason to cut this now rather than at a rounder moment: #226 stops a model
reading `.env` through `search_text`, and `git tag --contains 930ab3a` is empty.
The fix has been on main and in no installable artifact, while README.md:8 tells
a new adopter to install the version that still has the hole. Twenty-nine
commits is too many to have gone unreleased and this is the one that made it
urgent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tpouyer
tpouyer merged commit 3ee7433 into main Sep 5, 2026
3 checks passed
@tpouyer
tpouyer deleted the chore/release-0-3-0 branch September 5, 2026 15:21
@tpouyer tpouyer mentioned this pull request Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant