diff --git a/CHANGELOG.md b/CHANGELOG.md index 93dd45b..85f34e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,21 @@ public APIs may still change while the backend design stabilizes. ## [Unreleased] +## [0.2.0b1] - 2026-06-12 + ### Added - Added the public `DuplexStream` API contract for backend-level full-duplex capture and playback. - Added native macOS `DuplexStream` support backed by Core Audio input and output queues owned by one native stream object. +- Added native Linux `DuplexStream` support backed by one miniaudio duplex + device callback. + +### Changed + +- Promoted package metadata from pre-alpha to beta. +- Kept wheel builds intentionally per-CPython-version rather than stable ABI. ## [0.2.0a3] - 2026-06-12 diff --git a/README.md b/README.md index 45297a4..20432a8 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ `tachyaudio` is a low-level audio package intended to replace tachypy’s direct dependency on `sounddevice`/PortAudio over time. -Status: pre-alpha. The native backend currently supports macOS through Core -Audio and Linux through vendored `miniaudio`. Windows support is not implemented -yet. +Status: beta. The native backend currently supports macOS through Core Audio and +Linux through vendored `miniaudio`. Windows support is planned but intentionally +deferred until Windows test hardware is available. ## Goals diff --git a/docs/python-support.md b/docs/python-support.md index dfdf357..863a256 100644 --- a/docs/python-support.md +++ b/docs/python-support.md @@ -11,7 +11,7 @@ - Treat Python 3.10 as the lower-bound type-checking target. - Add version-specific code only behind narrow compatibility helpers. -## Wheel targets +## Wheel targets and ABI decision Initial wheel scope: @@ -25,5 +25,12 @@ The native extension currently uses the regular CPython C API. That means wheel builds are per-CPython-version. Moving to Python’s stable ABI can be evaluated later, but only after the native API settles. +For the public beta, `tachyaudio` intentionally ships per-version CPython +wheels (`cp310` through `cp314`) rather than `abi3` wheels. This keeps the +native backend implementation unconstrained while macOS and Linux playback, +capture, duplex streams, and diagnostics are still evolving. The additional +wheel matrix is acceptable because cibuildwheel already builds the supported +Python minors explicitly. + CI should run unit tests on every supported Python minor version before a wheel is published. diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 0000000..ee54c27 --- /dev/null +++ b/docs/release.md @@ -0,0 +1,51 @@ +# Release checklist + +This project publishes platform wheels for supported CPython versions instead +of `abi3` wheels. + +## Beta release flow + +1. Merge the release-prep pull request. +2. Tag the merged commit: + + ```bash + git checkout main + git pull --ff-only + git tag -a v0.2.0b1 -m "v0.2.0b1" + git push origin v0.2.0b1 + ``` + +3. Wait for the GitHub Actions `wheels` workflow to finish for the tag. +4. Download the `linux-wheels` and `macos-wheels` artifacts. +5. Build the source distribution from the tagged commit: + + ```bash + python -m build --sdist + ``` + +6. Validate package metadata: + + ```bash + python -m twine check dist/* + ``` + +7. Upload to TestPyPI first: + + ```bash + python -m twine upload --repository testpypi dist/* + ``` + +8. Install from TestPyPI in a clean environment and smoke-test import plus a + short playback/capture check where hardware is available. +9. Upload to PyPI: + + ```bash + python -m twine upload dist/* + ``` + +10. Create the GitHub release for the tag and attach wheel artifacts. + +## Windows support + +Windows wheels are intentionally not published until WASAPI support has been +implemented and validated on Windows hardware. diff --git a/pyproject.toml b/pyproject.toml index 86f6324..41f949a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tachyaudio" -version = "0.2.0a3" +version = "0.2.0b1" description = "Low-level audio primitives for tachypy and Python experiments." readme = "README.md" license = "MIT" @@ -14,7 +14,7 @@ authors = [ { name = "tachyaudio contributors" } ] classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3", diff --git a/src/tachyaudio/_version.py b/src/tachyaudio/_version.py index 5213695..a762126 100644 --- a/src/tachyaudio/_version.py +++ b/src/tachyaudio/_version.py @@ -1 +1 @@ -__version__ = "0.2.0a3" +__version__ = "0.2.0b1"