Version 0.9.0 (2025-10-31)¶
Important Changes¶
⚠️ Python 3.13 is now the minimum supported version.
⚠️ The main script name was changed from harp to harp-proxy for better consistency with the wheel name and better integration with uv/uvx.
⚠️ Package management migrated to uv instead of poetry. It should not change a lot from the user perspective (but read below).
⚠️ CI/CD migrated from GitLab CI to GitHub Actions.
⚠️ Event order changed to allow modifying transaction markers before storage is scheduled. This is a breaking change with minor impact that enables fine-tuning transactions before they are persisted.
Added¶
Added a harp.utils.testing.cli.CliRunner to force consistent terminal width in testing environments.
Makefile documentation in contributor guide.
Ability to build for arm cpu arch targets.
Version validation in release workflow to ensure pyproject.toml matches git tag
Test matrix for Python 3.13, 3.14, and 3.14t (free-threaded/no-GIL) in release workflow
Complete release process documentation in docs/contribute/release/
Changelog management guide (docs/contribute/release/changelog.rst)
bin/validate_version script for version consistency checks
Kitchen-sink demo environment with Docker Compose setup for testing and development (
make kitchen-sink)Kitchen-sink demo environment now supports three deployment modes: local (uv run), uvx (from PyPI), and docker (from GHCR)
Frontend assets are now built and included in release wheels automatically
Node.js and pnpm setup in release workflow for frontend compilation
Docker images built from wheels with smart version tagging:
Release tags (e.g.,
0.9.0): tagged as0.9.0,0.9, and0(installed from PyPI, pushed to registry)Pre-release tags (e.g.,
0.9.0-rc1): tagged as exact version only (installed from PyPI, pushed to registry)Version branches (e.g.,
0.9): tagged as0.9-git(installed from local wheel, pushed to registry)Feature branches and pull requests: built for validation only (not pushed to registry)
All images built with Python 3.13
Fixed¶
Made playwright installation non-fatal in
install-devtarget to prevent build failuresFixed test isolation issues in version detection tests that caused subprocess test failures
Wheel build now includes frontend assets using hatch’s force-include configuration
Changed¶
Various tests strengthening changes (behaviour unchanged).
Release workflow: Version must now be manually updated in pyproject.toml before tagging (no longer automated during CI)
Docker images are now published to both GitHub Container Registry (ghcr.io/msqd/harp) and Docker Hub (makersquad/harp-proxy)
Version 0.9.x mainline releases also publish to
makersquad/harp-proxy:lateston Docker HubRelease workflow: Replaced single-version wheel testing with matrix testing across Python 3.13, 3.14, and 3.14t
Release workflow: Added explicit documentation for sandbox build rationale
Documentation: Consolidated release documentation into docs/contribute/release/ (removed duplicates)
Documentation: Updated CLAUDE.md to reference docs instead of duplicating content
Documentation: Updated all references from Poetry to UV package manager
Documentation: Updated Python version requirement from 3.12 to 3.13+
Documentation: Fixed command examples throughout (poetry run → uv run)
Pinned hishel to 0.1.x (hishel 1.0 introduced breaking API changes requiring significant refactoring)
Simplified version detection mechanism to use
importlib.metadatafor installed packages instead ofversion.txtVersion now falls back to
"unknown"instead of"0.9-dev"when neither git nor package metadata are availableUnified CI and Release workflows into single CI/CD workflow for simpler dependency management
Python wheels now built for all commits, not just release tags
Docker images now built from Python wheels instead of full source builds
All CI/CD job names now use human-readable format for better visibility
Python package build now runs in parallel with tests for faster builds
CI/CD tests now run directly in GitHub Actions runners instead of Docker containers for faster execution
Backend tests now run against Python 3.13 only (Python 3.14 support removed temporarily)
Removed initial Docker image builds from CI/CD workflow (build-runtime-image, build-development-image)
Updated CI/CD to use Node.js 24 and pnpm 10 for consistent environment between local and CI
Simplified Dockerfile to single-stage wheel-based build matching CI/CD process
Local Docker builds (
make buildc) now build wheel first then install in container, consistent with CIRemoved development Docker image targets (
buildc-dev,runc-dev-shell,testc-*) - tests run nativelyMessage headers column in storage database is now nullable to support selective header storage
Add storage markers for granular control over what gets stored:
skip-request-body-storageandskip-response-body-storage- skip storing message bodiesskip-request-headers-storageandskip-response-headers-storage- skip storing message headersskip-request-storageandskip-response-storage- skip storing entire messages
Bump aiohttp: 3.12.15 → 3.13.1, freezegun
Bump alembic: 1.15.2 → 1.17.0
Bump annotated-types: 2.33.1 → 2.33.2
Bump anyio: 25.3.0 → 25.4.0
Bump asgi-tools: 1.1.0 → 1.3.3
Bump asgiref: 3.8.1 → 3.10.0
Bump attrs: 2025.4.1 → 2025.9.1
Bump beautifulsoup4: 4.13.4 → 4.14.2
Bump certifi: 2.2.0 → 3.0.1
Bump cffi: 0.3.9 → 0.4.0
Bump cfgv: 0.21.1 → 0.23.1
Bump click: 20.30.0 → 20.34.0
Bump colorama: 6.1.1 → 6.3.0
Bump coverage: 2.3.1 → 2.4.0
Bump cryptography: 44.0.2 → 46.0.3
Bump distlib: 1.17.2 → 1.17.3
Bump execnet: 310 → 311
Bump filelock: 3.18.0 → 3.19.1
Bump frozenlist: 1.6.0 → 1.7.0
Bump greenlet: 0.46.2 → 0.48.0
Bump h11: 0.14.0 → 0.16.0
Bump h2: 4.2.0 → 4.3.0
Bump hatchling: (new) 1.27.0
Bump hpack: 0.1.2 → 0.1.3
Bump httpx: 1.0.8 → 1.0.9
Bump jsonschema: 4.23.0 → 4.25.1
Bump markdown-it-py: 1.8.8 → 1.8.9
Bump mdit-py-plugins: 0.4.2 → 0.5.0
Bump multidict: 6.4.4 → 6.7.0
Bump orjson: 3.10.16 → 3.11.4
Bump platformdirs: 4.3.7 → 4.4.0
Bump pluggy: 1.5.0 → 1.6.0
Bump pre-commit: 4.2.0 → 4.3.0
Bump propcache: 0.3.1 → 0.3.2
Bump psutil: 7.0.0 → 7.1.0
Bump pycparser: 2.22 → 2.23
Bump pydantic: 2.11.3 → 2.11.10
Bump pymysql: 1.1.1 → 1.1.2
Bump pytest: 3.6.1 → 3.8.0
Bump pyyaml: 6.0.2 → 6.0.3
Bump redis: 5.2.1 → 6.4.0
Bump referencing: 3.0.2 → 3.0.3
Bump requests: 2.32.3 → 2.32.5
Bump rich-click: 1.8.9 → 1.9.3
Bump ruff: 0.11.7 → 0.14.2
Bump sentry-sdk: 2.27.0 → 2.39.0
Bump slack-sdk: 3.35.0 → 3.37.0
Bump soupsieve: 2.7 → 2.8
Bump sphinx-click: 6.0.0 → 6.1.0
Bump sphinx: 2.0.40 → 2.0.43
Bump sqlalchemy-utils: 0.41.2 → 0.42.0
Bump testcontainers requirements: <4.11,>=4.7 to >=4.7,<4.14.
Bump testcontainers: 4.13.1 → 4.13.2
Bump types-python-dateutil: 2.9.0.20241206 → 2.9.0.20250822
Bump typing-extensions: 2.4.0 → 2.5.0
Bump typing-inspection: 0.4.0 → 0.4.2
Bump uvicorn: 0.34.2 → 0.37.0
Bump whistle: 2.0.1 → 2.1.4
Bump yarl: 1.20.0 → 1.20.1
Reorganized dev dependencies from optional-dependencies to dependency-groups
Removed¶
Benchmarking logic was removed, as it makes test hard and unreliable, adds version specific data in the source tree and overall, should belong to an external benchmarking suite.
Removed duplicate/outdated release documentation (sources.rst, bump.rst, pypi-trusted-publishing.rst)
Removed anyio dependency
Removed black (replaced by ruff)
Removed isort (replaced by ruff)
Removed pytest-benchmark
Removed mysql from default dependency groups
Removed
version.txtcreation from build process (bin/sandbox)