v3.0.2
What's Changed
Maintenance release: bug fixes, a fix to restore source builds, a supply-chain/security pass, and modernized release tooling. No breaking API changes. Strif remains zero-dependency at runtime.
Fixes
- Restore source builds.
tool.uv-dynamic-versioning.bumpwas a string ("true") which currentuv-dynamic-versioningrejects, breakinguv syncand editable installs. Now a proper boolean. temp_output_fileno longer leaks file descriptors. Themkstempfd was never closed on context exit; it is now closed in cleanup (and tolerates a user-closed fd).is_truthybool handling is now correct by construction (theboolbranch previously sat unreachable behind theintcheck; behavior was right only by coincidence).copy_to_backupis now silent when the source is missing, matchingmove_to_backupinstead of raisingFileNotFoundError.move_filebackup condition now checks the destination (not the source) before backing it up.- Removed a broken
strifconsole-script entry point that referenced a nonexistentmain(a real CLI may come later).
Security
- No known vulnerabilities in the dependency tree (verified with
pip-audit). This release fixes two CVEs that affected the previous dev toolchain: pytest CVE-2025-71176 (via the pytest 8→9 bump) and pygments CVE-2026-4539 (pinned to 2.20.0). Both are dev-only; strif's published wheel has zero runtime dependencies, so neither reached end users. - GitHub Actions pinned to commit SHAs in CI and the publish workflow, hardening the release pipeline against tag-retargeting supply-chain attacks.
Packaging & API
DEV_NULLis now exported from the top-level package (from strif import DEV_NULL).- Added Python 3.10 and 3.14 to the package classifiers (3.10 was supported but unlisted).
- Dropped a no-op
random.SystemRandom().seed()call.
Tooling
- Upgraded the
simple-modern-uvproject template (v0.2.7 → v0.2.25): newer GitHub Actions, uv 0.10.2, and refreshed dev dependencies (pytest 9, ruff 0.15, rich 15, basedpyright 1.39, +pytest-sugar). Docs moved underdocs/. - Releases are now tag-triggered: pushing a
v*tag builds, publishes to PyPI via trusted publishing, and creates the GitHub Release automatically.
Tests
- Added
tests/test_files.py(18 tests) covering the fixed functions plus the previously-untestedatomic_output_file. Suite is now 26 tests.
Full Changelog: v3.0.1...v3.0.2