From 88ba81b749c3b4ebcb689241fe148903e55e9fe9 Mon Sep 17 00:00:00 2001 From: "cmeans-claude-dev[bot]" <272174644+cmeans-claude-dev[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 19:38:03 -0500 Subject: [PATCH] =?UTF-8?q?release:=20v0.3.0=20=E2=80=94=20per-OS=20downlo?= =?UTF-8?q?ad=20breakdown=20badges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps version 0.2.0 → 0.3.0 and promotes the [Unreleased] section to [0.3.0] - 2026-04-29. One feature PR plus three small chore PRs land in this release; full bullets in CHANGELOG.md. Minor bump (rather than patch) is justified because run_pypinfo's return type changed from `dict[str, int]` to a TypedDict carrying both `by_installer` and `by_system` aggregates in PR #57 — same kind of internal-contract evolution that drove the 0.1.x → 0.2.0 jump. The feature surface is also new (3 new badge files per package per window), making 0.3.0 the right semantic line. ### Added - feat(collector): per-OS download breakdown badges (#57, d7688ce). Three additional badge files per package per window (`os-linux-Nd-non-ci.json`, `os-macos-Nd-non-ci.json`, `os-windows-Nd-non-ci.json`); pypinfo group-by extends from `ci installer` to `ci installer system`; `_health.json` per-package successful entries gain a `counts_by_system` field. Hero count and the seven v0.2.0 `installer-*` files unchanged in filename, schema, and value. Already verified end-to-end on the live CT 112 deploy with real production data (11 files per package across all 4 dogfood packages). - ci: add weekly uv lock --upgrade refresh cron (#54, 3ed03b9). New scheduled workflow runs `uv lock --upgrade` every Thursday 12:00 UTC as a backstop for transitive freshness; skip-gate defers when a prior `dependencies` + `python` PR is open; test gate blocks PR creation if the new lockfile breaks the suite. ### Changed - chore(deps): refresh uv.lock transitive pins (#55, 92ec030). Routine `uv lock --upgrade` resolve. No `pyproject.toml` range changes. - chore(.gitignore): ignore .deploy/ for private operator tooling (#52, 5bae606). Maintainer-shaped deploy scripts stay out of public history. - chore(.gitignore): ignore .claude/settings.local.json (#53, 2bd764a). Per-machine Claude Code permission overrides. Co-Authored-By: Claude Opus 4.7 (1M context) --- CHANGELOG.md | 5 +++-- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd8c7fe..614a7c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.3.0] - 2026-04-29 ### Added @@ -301,7 +301,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 collector finds pypinfo via `sys.executable`'s neighbor instead of PATH. -[Unreleased]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.2.0...HEAD +[Unreleased]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.3.0...HEAD +[0.3.0]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.1.3...v0.2.0 [0.1.3]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.1.2...v0.1.3 [0.1.2]: https://github.com/cmeans/pypi-winnow-downloads/compare/v0.1.1...v0.1.2 diff --git a/pyproject.toml b/pyproject.toml index 7e19e71..6c214d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "pypi-winnow-downloads" -version = "0.2.0" +version = "0.3.0" description = "Self-hosted PyPI download badge service that winnows CI traffic out of download counts." readme = "README.md" requires-python = ">=3.11"