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 as 0.9.0, 0.9, and 0 (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 as 0.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-dev target to prevent build failures

  • Fixed 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:latest on Docker Hub

  • Release 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.metadata for installed packages instead of version.txt

  • Version now falls back to "unknown" instead of "0.9-dev" when neither git nor package metadata are available

  • Unified 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 CI

  • Removed development Docker image targets (buildc-dev, runc-dev-shell, testc-*) - tests run natively

  • Message 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-storage and skip-response-body-storage - skip storing message bodies

    • skip-request-headers-storage and skip-response-headers-storage - skip storing message headers

    • skip-request-storage and skip-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.txt creation from build process (bin/sandbox)