Skip to content

chore(release): 0.7.0 - #19

Merged
babaliauskas merged 1 commit into
mainfrom
chore/release-0.7.0
Oct 22, 2026
Merged

babaliauskas merged 1 commit into
mainfrom
chore/release-0.7.0

Conversation

@babaliauskas

Copy link
Copy Markdown
Collaborator

What this changes

Release commit for evalshift-sdk 0.7.0 (minor). It bumps pyproject.toml, __version__, the DOCS.md, llms.txt and llms-full.txt version lines, and the package's own uv.lock entry. It also renames the CHANGELOG's [Unreleased] section to [0.7.0] - 2026-10-22 and opens a fresh [Unreleased] above it.

Why

Ships #18, plus #17 (a PyPI metadata chore). Together they are everything merged since 0.6.0:

  • Conversation folders. A capture.agent_session / agent_session_async turn with a conversation_id is written to captures/<suite>/conv_<16 hex>/cap_<hex>.json, on disk and in an object store. The hex is the start of sha256(conversation_id). Standalone captures stay at captures/<suite>/cap_<hex>.json. So does every @capture.agent decorator capture, because the decorator's conversation_id is fixed when it is applied (its envelope still carries the id). To keep the 0.6 layout, set EVALSHIFT_CAPTURE_LAYOUT=flat or pass layout="flat" to FileSink / ObjectStoreSink.
  • Co-install guard. If an evalshift CLI older than 1.6 is installed in the same environment, the SDK writes flat and logs a warning. EVALSHIFT_CAPTURE_LAYOUT=conversation overrides this. The SDK can't detect an older CLI in a different environment (e.g. CI pinned to 1.5).
  • Per-conversation sampling. With EVALSHIFT_SAMPLE_RATE set, an agent_session / agent_session_async given a conversation_id is sampled by a hash of that id. Every turn of a conversation is then captured or none is, in every process. @capture.agent, runs without an id, and the LangChain handler still draw at random.
  • GC by conversation. max_captures / capture_ttl cap each suite directory by unit, a flat capture or a whole conversation folder. The TTL first evicts every capture older than it. max_captures then counts the captures that remain, newest unit first: the newest conversations are kept whole while they fit, the one at the boundary keeps its newest turns, and older ones are evicted whole. Folders left empty are removed. Flat-only suites behave as before, and dedup is unchanged.
  • chore: point PyPI Homepage and Documentation at evalshift.dev #17: the PyPI Homepage link points to https://www.evalshift.dev, and a Documentation link to https://www.evalshift.dev/docs/sdk is added.

The layout change is breaking, which makes this a minor bump under 0.x. The CHANGELOG's 0.7.0 section states that it requires evalshift CLI 1.6.0 or later.

Do not tag v0.7.0 until evalshift CLI 1.6.0 is on PyPI (CLI release PR evalshift/evalshift-cli#64). A CLI ≤ 1.5 cannot see conversation folders, and its capture clean can sweep toolset sidecars that only folder captures use.

After merge, and only once CLI 1.6.0 is on PyPI, tag the merge commit (an up-to-date main). The tag push makes release.yml publish to PyPI:

git tag -a v0.7.0 -m "v0.7.0 — conversation folders"
git push origin v0.7.0

Test plan

  • uv lock --check / uv sync --locked pass (only the evalshift-sdk lock entry changed)
  • uv run ruff check / ruff format --check clean
  • uv run mypy: no issues in 108 source files
  • uv run pytest: 891 passed
  • evalshift.__version__ is 0.7.0
  • CHANGELOG.md updated

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@babaliauskas
babaliauskas merged commit 10aafb5 into main Oct 22, 2026
5 checks passed
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