Skip to content

release: 0.3.0 - #8

Merged
jqnatividad merged 3 commits into
mainfrom
release/0.3.0
Oct 10, 2026
Merged

jqnatividad merged 3 commits into
mainfrom
release/0.3.0

Conversation

@jqnatividad

@jqnatividad jqnatividad commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Release prep for 0.3.0, plus the test-coverage gaps found before cutting it.

Release

  • Version 0.3.0 in pyproject.toml, __init__.py, and uv.lock. A new test checks that __version__ matches the package metadata, so the two can't drift.
  • CHANGELOG [Unreleased] finalized as [0.3.0] - 2026-10-10 (adjust the date if the release goes out later), with compare links.
  • publish.yml: before building, the job fails if the release tag doesn't match the package version (uv version --short).

Fix

  • On Windows, find_qsv (and binary= / QSV_BIN) now accept a path without its extension, e.g. C:/tools/qsv for qsv.exe, by trying each PATHEXT extension. shutil.which only does this for directory-qualified paths from Python 3.12. POSIX behavior is unchanged.
  • --capabilities JSON without a usable version (null, "dev", "") now falls back to --version, instead of being accepted as version "None", which made min_version raise a bare ValueError. This closes the known gap noted in fix: resolve stdout_path against cwd=, and raise QsvError from the probe #7 (found by roborev review 5206). It isn't reachable with a real qsv, whose own tests require a semver version, but the fix is two lines. Six new tests (sync and async) fail without it.

Coverage

The latest qsv release (24.0.0) supports neither QSV_ERROR_FORMAT=json nor --capabilities, so CI never took the client's JSON paths. The supports_json_errors branches of the integration tests are skipped today.

  • New tests/test_client.py (22 tests):
    • find_qsv / QsvNotFound: default binary order, QSV_BIN, explicit path, relative path, not found, and the Windows extension case. The Windows case fails without the fix.
    • Structured errors end to end through run(), sync and async: csv, io, no_match, usage, and an unmapped other. The fake emits JSON only when QSV_ERROR_FORMAT=json is set, in the shape qsv's tests/test_error_format.rs pins.
    • Capabilities from --capabilities JSON, sync and async: parsed fields, probed once and cached, never falling back to --version, and min_version enforced from the JSON.
  • CI: new test-qsv-24-0-0 job that runs the integration tests against a pinned qsv/qsvlite 24.0.0. test always downloads the latest qsv, so without this job the text-error and --version fallback paths would stop being tested once a JSON-capable qsv ships.

Full suite: 97 passed locally (macOS). ruff and mypy are clean (default and --platform win32).

Release sequence after merge

  1. gh release create 0.3.0, with the stdout_path behavior change (from fix: resolve stdout_path against cwd=, and raise QsvError from the probe #7) at the top of the notes: a relative stdout_path now resolves against cwd=, and existing code that relies on the old location gets no error.
  2. Publishing the release runs publish.yml, and the new tag check gates the PyPI upload.

🤖 Generated with Claude Code

jqnatividad and others added 3 commits October 10, 2026 14:02
- Bump the version to 0.3.0 and finalize the CHANGELOG.
- find_qsv: on Windows, accept a path without its extension by trying
  each PATHEXT extension (shutil.which only does this from Python 3.12).
- tests/test_client.py: find_qsv and QsvNotFound; the JSON error and
  --capabilities paths end to end through run() and the probe, in the
  shapes qsv's own tests pin (the latest qsv release, 24.0.0, takes
  neither, so nothing exercised them); __version__ matching the package
  metadata.
- CI: a job pinned to qsv 24.0.0, so the text-error and --version
  fallbacks stay tested once the latest release supports JSON.
- publish: fail before building when the release tag doesn't match the
  package version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
from_capabilities_json turned a null (or "dev") version into a string
and accepted the document, so the probe skipped --version and, with
min_version set, parse_version raised a bare ValueError. Validate the
version where the document is accepted, and fall back otherwise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jqnatividad
jqnatividad merged commit 3105e48 into main Oct 10, 2026
17 checks passed
@jqnatividad
jqnatividad deleted the release/0.3.0 branch October 10, 2026 18:15
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