chore(deps): sync uv.lock self-version to 0.3.0 (release-commit follow-up)#59
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
cmeans
left a comment
There was a problem hiding this comment.
QA review — round 1: QA Failed
PR head: f27f949 · branch: chore/uv-lock-refresh-2026-04-30
Verification
| Check | Result |
|---|---|
uv sync --frozen --extra dev |
clean — pulls in pypi-winnow-downloads 0.2.0 → 0.3.0, no other diffs |
uv run pytest --cov |
88/88 pass, 100% coverage on 286 src statements |
uv run ruff check . |
clean |
uv run ruff format --check . |
11 files already formatted |
uv run mypy src/pypi_winnow_downloads/ |
clean (CI's invocation; no issues in 5 src files) |
| CI status | all green (lint, typecheck, test 3.11/3.12/3.13, deploy-smoke) |
Findings
-
(substantive) PR title, body, and CHANGELOG bullet describe a transitive-pin refresh, but the actual diff is a self-version sync. The full
uv.lockchange is two lines:-version = "0.2.0" +version = "0.3.0"
That is the project's own
pypi-winnow-downloadsentry catching up to the v0.3.0 release. No transitive dependencies changed in this PR. As written, the CHANGELOG bullet ("transitive dependency pins refreshed via routineuv lock --upgraderesolve") would land in v0.4.0's release notes telling users a fiction.Why it happened: the v0.3.0 release commit (fdd4fc3) bumped
pyproject.tomlversion = "0.2.0" → "0.3.0"but did not updateuv.lock's self-version entry. The v0.2.0 release commit (35aca51) did update both, so this is a one-off regression in release discipline. The cron's diff-gate then fired on this stale-self-version drift two days later and opened #59 with its standard transitive-refresh template.I've filed the underlying release-flow gap as #60 so the cron isn't asked to paper over it on every future release. That issue is not gating this PR — it is for follow-up.
For this PR, suggested options (Dev to choose):
- A. Rewrite the CHANGELOG bullet, PR title, and PR body honestly — e.g., "
uv.lockself-version entry synced to0.3.0(release commit fdd4fc3 bumpedpyproject.tomlonly)." Title becomes something like "chore(deps): sync uv.lock self-version to 0.3.0". - B. Close this PR without merging and resolve via the release-flow fix in #60 instead — i.e., land a tiny PR that runs
uv lockto bringuv.lockin sync, with a one-line CHANGELOG bullet describing exactly that, then close #59 as superseded.
Either path is fine; the choice is whether to fix-in-place or supersede. Whichever, the misleading "transitive pins refreshed" framing must not survive into a release.
- A. Rewrite the CHANGELOG bullet, PR title, and PR body honestly — e.g., "
Test plan checkboxes
-
uv sync --frozen --extra dev && uv run pytestpasses (test gate). — verified locally onf27f949 - CI green on PR head. — verified via
gh pr view - No
pyproject.tomllines changed (verify in Files tab). — confirmed (pyproject.tomlalready at0.3.0on main)
Will update the PR body checkboxes accordingly.
Verdict
QA Failed — substantive finding 1 must be addressed before signoff. Toggling labels: QA Active → QA Failed.
Follow-up tickets:
- #60 (release-flow gap; needs-PR-before-ship-of-fix-A — addressing #60 may obviate #59 entirely if Dev picks option B)
Re-flag Ready for QA after addressing.
|
Audit: posted review (QA Failed, round 1) → updated PR body checkboxes (all 3 checked, verified locally) → filing follow-up issue #60 for release-flow gap → applying QA Failed label as final act. |
The auto-generated bullet described a "transitive dependency pins refresh," but the entire uv.lock diff is the self-version entry catching up to the v0.3.0 release. Rewrite the Unreleased bullet to match what actually changed; release-flow gap that caused the drift remains tracked in #60. Per QA round 1 finding on PR #59 (option A: fix in place).
|
QA round 1 finding addressed via option A (fix in place):
Diff under review remains the single 2-line
|
cmeans
left a comment
There was a problem hiding this comment.
QA review — round 2: PASS
PR head: 805f5ad · branch: chore/uv-lock-refresh-2026-04-30
Re-verification
| Check | Result |
|---|---|
uv sync --frozen --extra dev |
clean |
uv run pytest |
88/88 pass |
uv run ruff check . |
clean |
uv run ruff format --check . |
11 files already formatted |
uv run mypy src/pypi_winnow_downloads/ |
clean (CI invocation) |
| CI status | all green (lint, typecheck, test 3.11/3.12/3.13, deploy-smoke) |
Round 1 finding — addressed
Dev took option A (fix in place). Concretely:
CHANGELOG.mdUnreleased bullet rewritten to honestly describe a self-version sync (not a transitive refresh); calls out the v0.3.0 release-flow gap and links #60.- PR title rewritten:
refresh uv.lock transitive pins (2026-04-30)→sync uv.lock self-version to 0.3.0 (release-commit follow-up). - PR body rewritten with accurate framing.
Diff is one CHANGELOG line (1+/1−) on top of the original uv.lock two-line self-version bump. No other files touched.
Repo-wide drift check
Grepped for the original "transitive dependency pins refreshed" phrasing across the repo. Three remaining occurrences are all out of scope for this PR and are not drift:
CHANGELOG.md:24— under## [0.3.0]describing PR #55 (an actual pathspec1.1.0 → 1.1.1transitive bump). Correct in context.docs/superpowers/specs/2026-04-29-uv-lock-refresh-cron-design.md:47anddocs/superpowers/plans/2026-04-29-uv-lock-refresh-cron.md:161— cron's design-time CHANGELOG-template, intentional spec text..github/workflows/uv-lock-refresh.yml:109— cron's hardcoded template string. The "always-call-it-transitive" framing is the underlying issue surfaced by #60; cron logic improvement is out of scope here.
Verdict
Ready for QA Signoff. Round 1 substantive finding fully addressed; verification clean.
Follow-up tickets:
- #60 — release-flow gap (
uv lockshould run as part of release commits). Independent of this PR; Dev to schedule.
Awaiting maintainer QA Approved.
|
Audit: round 2 verification complete on |
Adds a `uv lock --locked` step to the `lint` job in `.github/workflows/ci.yml`. Closes #60. Catches the v0.3.0-style regression (commit fdd4fc3) where a release commit bumps `pyproject.toml` `version` without re-running `uv lock`, leaving `uv.lock`'s self-version block on the previous release. PR #59 fixed the symptom days later via the weekly cron; this PR prevents recurrence — a release commit that forgets the lockfile bump now redlits its own PR before merge. Does NOT check `uv.lock` freshness against PyPI — that remains the weekly `uv-lock-refresh.yml` cron's job. `uv lock --locked` only validates `pyproject.toml`-vs-lockfile consistency, so transitive churn upstream produces no false positives.
Summary
uv.lock's self-version entry catches up to0.3.0after the v0.3.0 release commit (fdd4fc3) bumpedpyproject.tomlwithout updatinguv.lock. The v0.2.0 release commit (35aca51) updated both, so this is a one-off regression in release discipline rather than the established pattern.Picked up by the weekly
uv-lock-refreshcron on its first firing (2026-04-30). The cron's standard transitive-refresh framing was wrong for this run — entire diff is the self-version sync; no transitive pins changed. PR title, body, and CHANGELOG bullet have been rewritten to match what actually changed.The underlying release-flow gap (
uv lockshould run as part of the release commit, as it did at v0.2.0) is tracked separately in #60.Diff
Test plan
uv sync --frozen --extra dev && uv run pytestpasses (test gate, verified pre-PR by the cron).f27f949; refreshes on805f5ad).pyproject.tomllines changed (confirmed —pyproject.tomlalready at0.3.0on main).QA round 1 → round 2 changes
refresh uv.lock transitive pins (2026-04-30)→sync uv.lock self-version to 0.3.0 (release-commit follow-up).🤖 Originally opened by
uv-lock-refresh.yml; framing rewritten by Dev round 2 per QA finding.