release: v0.18.2#356
Conversation
Stamp 0.18.2. Aggregates #351, #352, #350, #353, #354, #355 — all merged to main since v0.18.1 on 2026-04-20: - CI matrix widened to Python 3.10–3.14 (#354) - Dockerfile base bumped to python:3.13-slim (#355) - docker-smoke workflow added (#350) - docker-compose host port parameterized (#353) - OAuth URL log redaction (CodeQL #5-#9) (#352) - Workflow permission hardening (#351) Patch bump — no new user-facing features, no API changes, requires-python floor unchanged at >=3.10. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 — PR #356 (release v0.18.2)
Lightweight per project convention — feature code for all six rolled-up PRs was QA'd in its own cycle.
Verification performed
| Step | Result |
|---|---|
pyproject.toml version |
✅ Line 3 reads version = "0.18.2". |
| CHANGELOG header placement | ✅ ## [0.18.2] - 2026-04-21 sits below an empty ## [Unreleased] — correct Keep-a-Changelog shape. |
| Rolled-up entries (6) | ✅ All present under [0.18.2] in original order (Changed #355 → Added #354 → Changed #353 → Security #352 → Security #351 → Added #350). Order matches PR body claim. |
| Content drift in rolled-up entries | ✅ None possible — the diff only inserts the ## [0.18.2] - 2026-04-21 header + blank line and updates the footer; body of each entry is unchanged from what lived under [Unreleased] on main. |
| Comparison links | ✅ [Unreleased]: …/compare/v0.18.2...HEAD and [0.18.2]: …/compare/v0.18.1...v0.18.2 — both correct. |
| Scope | |
| Tag-command rollup coverage | ✅ Post-merge tag message names all six rolled-up areas (3.13/3.14 matrix, Dockerfile bump, docker-smoke, compose port, OAuth redaction, permission hardening). |
| CI rollup | ✅ docker-smoke, lint, typecheck, test (3.10–3.14), codecov/patch, CodeQL, license/cla — all green. |
Findings
-
[substantive] PR body scope claim is off by one on
CHANGELOG.md. Both the Summary and the acceptance checkbox #4 assertCHANGELOG.md (+3, -1). Actual:$ git diff --shortstat origin/main..origin/release/v0.18.2 -- CHANGELOG.md 1 file changed, 4 insertions(+), 1 deletion(-)The
[0.18.2] - 2026-04-21header hunk inserts a header line and the blank line between[Unreleased]and[0.18.2](+2); the footer hunk adds the new[Unreleased]link and the new[0.18.2]link while removing the old[Unreleased]link (+2, -1). Net(+4, -1), not(+3, -1).Fix: update the PR body's Summary paragraph and checkbox #4 to read
CHANGELOG.md (+4, -1). Nothing code-side changes.
What's good
- Proper two-file scope; no surprise edits.
## [Unreleased]section correctly preserved as an empty shell above## [0.18.2](Keep-a-Changelog convention).- Rolled-up entries untouched; the release PR does exactly what a release PR should and nothing else.
- All six included PRs have matching CHANGELOG entries with original wording intact.
- Post-merge tag plan is tight and covers every rolled-up area.
Verdict
QA Failed — one substantive finding (scope-count drift in PR body). Trivial body-edit fix, no code change needed.
All feature-level code testing was completed in the individual PRs (#350, #351, #352, #353, #354, #355). This review confirms the release-mechanics shape only.
|
QA audit — transitioning label to QA Failed. Release-mechanics review complete:
One substantive finding — PR body's scope claim is off by one on |
Dev response to QA findingFinding 1 —
|
cmeans
left a comment
There was a problem hiding this comment.
QA review — PR #356 (round 2)
Head: eb5c7270 (unchanged — body-only edit). CI rollup carries over from round 1: all green.
Round-1 finding resolution
| Finding | Resolution |
|---|---|
PR body scope claim CHANGELOG.md (+3, -1) vs actual (+4, -1) |
✅ Checkbox #4 updated to CHANGELOG.md (+4, -1) and pyproject.toml (+1, -1). My round-1 mention of "Summary paragraph" was incorrect — the Summary uses a narrative description, not explicit line counts, so the checkbox was the only place that needed editing. Fix is complete. |
Re-verification
| Step | Result |
|---|---|
| PR body diff vs round 1 | ✅ Only line 47 (checkbox #4) changed. All other body content identical. |
Actual git diff --shortstat origin/main..origin/release/v0.18.2 -- CHANGELOG.md |
✅ 1 file changed, 4 insertions(+), 1 deletion(-) — now matches the body. |
| Head SHA unchanged | ✅ eb5c7270 — no code change, so CI results carry forward as valid. |
| CI rollup | ✅ All checks still green (same run as round 1). |
Findings
None.
Verdict
Ready for QA Signoff — round-1 finding resolved, no new issues, release-mechanics shape verified.
Awaiting maintainer to apply QA Approved.
|
QA audit — round 2. Transitioning label to Ready for QA Signoff. Round-1 finding (PR body scope-count off-by-one) resolved — checkbox #4 now reads Zero findings this round. Awaiting maintainer to apply |
Patch release stamping six PRs merged to
mainsince v0.18.1 on 2026-04-20.Summary
Two-file diff:
pyproject.toml—versionbump0.18.1→0.18.2CHANGELOG.md—[Unreleased]renamed to[0.18.2] - 2026-04-21; new empty[Unreleased]section seeded; comparison-link footer updatedWhy patch
requires-python = ">=3.10"floor unchanged inpyproject.toml.docker-composehost-port parameterization is backward-compatible — default behavior unchanged.Textbook patch bump for a 0.x project.
Included PRs
pr-labels.yml+ workflow permissionsdocker-smokeworkflow — build + import smoke on Dockerfile PRsdocker-compose.yamlpython:3.12-slimto3.13-slimAll six merged via their own QA-Approved cycles — nothing in this release bypasses the standard pipeline.
What's unchanged
docker-compose.yaml— uses:latest, no version bump neededREADME.md— tool count (32) and text-mode content unchanged; no update neededuv.lock— no dep changes in any of the six PRsQA
Lightweight per project convention — all substantive code was tested in its own PR. Review-only checks:
pyproject.tomlversion is0.18.2. Verify line 3:version = "0.18.2".[0.18.2] - 2026-04-21heading exists; the six rolled-up entries sit beneath it in their original order (Changed → Added → Changed → Security → Security → Added); empty[Unreleased]seeded above.[0.18.2]: …v0.18.1...v0.18.2added;[Unreleased]now points atv0.18.2...HEAD.git diff --stat origin/mainshows exactlyCHANGELOG.md(+4, -1) andpyproject.toml(+1, -1). Nothing else.[0.18.2]section and what was in[Unreleased]onmainbefore this PR should be zero beyond the heading/anchor move.Acceptance
Merge + tag (Dev post-merge action)
After merge, Dev runs:
```
git checkout main && git pull --ff-only origin main
git tag -a v0.18.2 -m "v0.18.2 — CI matrix widening (3.13/3.14), Dockerfile to python:3.13-slim, docker-smoke workflow, compose host-port parameterization, OAuth log redaction, workflow permission hardening"
git push origin v0.18.2
```
The tag triggers `docker-publish.yml` to build and publish the `:v0.18.2` + `:latest` images.
🤖 Generated with Claude Code