chore: release v2.6.1#139
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 — release PR #139 (round 1)
Verdict: Zero findings. Recommending Ready for QA Signoff.
Bump correctness
The Unreleased CHANGELOG content being stamped under this release is a single ### Fixed entry — the SVG clipboard round-trip fix from #138 (closes #136). Per semver §6, "PATCH version when you make backwards-compatible bug fixes". Fixed-only ⇒ patch bump (2.6.0 → 2.6.1) is exactly right.
Project precedent confirms:
| Release | Bump | What landed | Convention |
|---|---|---|---|
v2.5.0 (2026-05-05) |
minor | Added + Changed + Fixed bundle (PRs #120/#121/#122) | minor when any Added |
v2.5.1 (2026-05-05) |
patch | Fixed-only (registry README token) | patch when Fixed-only |
v2.6.0 (2026-05-07) |
minor | Added (CLI flags, github-release job) + Changed (README) + Fixed (Windows UTF-8) | minor when any Added (after R1 correction in #135) |
v2.6.1 (this PR) |
patch | Fixed-only (#138 SVG round-trip) | patch when Fixed-only — matches v2.5.1 precedent |
Diff scope check
Standard release-PR triad, exactly 5/3 across the three expected files:
| File | Change |
|---|---|
pyproject.toml:7 |
version = "2.6.0" → "2.6.1" |
server.json:6 (top-level) |
"version": "2.6.0" → "2.6.1" |
server.json:15 (packages[0].version) |
"version": "2.6.0" → "2.6.1" |
CHANGELOG.md |
Inserts ## [2.6.1] - 2026-05-07 heading below empty ## [Unreleased] shell |
uv.lock correctly absent from diff (gitignored on this repo per .gitignore:17). No drift outside the release-bump triad.
CHANGELOG content
The ## [2.6.1] section is the SVG-fix Unreleased entry verbatim from #138. Reads end-to-end (root cause → three layered gaps → backend symmetry note for Linux). Critically, the entry does not mention CRLF — which is correct because #138's R4 CRLF cleanup was reverted in R6 (live regression on CD Windows). The release content matches what actually merged.
Verification on 8b804dc
| Check | Result |
|---|---|
pyproject.toml version |
2.6.1 ✓ |
server.json top-level + packages[0] |
both 2.6.1 ✓ |
CHANGELOG.md heading position |
## [Unreleased] shell preserved at line 5; ## [2.6.1] - 2026-05-07 at line 7 (Keep a Changelog convention) ✓ |
uv run pytest -q |
618 passed, 19 deselected, 5 xfailed (matches body's claim and unchanged from post-#138 main) |
uv run ruff check src tests scripts |
All checks passed |
uv run ruff format --check src tests scripts |
11 files already formatted |
uv run mypy src |
clean (4 source files) |
uv run python scripts/sync-server-json.py --check |
in sync at 2.6.1 |
uv build --wheel |
dist/mcp_clipboard-2.6.1-py3-none-any.whl builds cleanly |
Em-dash sweep on the new ## [2.6.1] section |
clean (git diff v2.6.0..HEAD -- CHANGELOG.md | grep '^+' | grep '—' returns no matches in the new section) |
| American-English spelling on the new section | clean |
CI on 8b804dc |
11 actual checks all green (codecov/patch, integration-x11, lint, on-push, qa-approved, test ×3, typecheck, validate-server-json, version-sync); 3 conditional jobs skipping (changelog, on-label, on-unlabel) — normal |
Test-plan checkboxes
- CI passes on this PR — green on
8b804dc. Ticked. -
git tag v2.6.1 && git push origin v2.6.1after merge — Dev's job post-merge. -
publish-pypishipsmcp-clipboard==2.6.1— gated on tag push. Leaving unticked. -
publish-registryupdatesio.github.cmeans/mcp-clipboardto 2.6.1 — gated on tag push. Steady-state since v2.5.1; should be uneventful. -
github-releaseauto-creates v2.6.1 GitHub Release — gated on tag push. Steady-state since v2.6.0's first firing. - Spot-check via
pip index versions,gh release view, registry curl — post-tag-push verification.
Round 1 verdict
Clean release-bump shape. Bump level matches content (Fixed-only → patch). All three release files in lockstep at 2.6.1. CHANGELOG content accurately reflects what actually merged from #138 (the SVG fix only, no CRLF since reverted in R6). CI green, all linters/typechecker green, sync gates green, wheel builds.
This is the simplest release PR in recent history — a single-PR aggregation with a clean revert-aware CHANGELOG. No findings.
Applying Ready for QA Signoff.
Patch release. Single `### Fixed` entry under Unreleased: the SVG clipboard round-trip on Windows + macOS that landed in #138 (closes #136).
What's in this release
_windows_read(clipboard.py)image/svg+xmlbranch viaClipboard::GetData('image/svg+xml')with[Console]::OutputEncoding = UTF8_macos_read(clipboard.py)image/svg+xmlbranch readingpublic.svg-imageUTI as UTF-8 NSData;_UTI_TO_MIMElearnspublic.svg-image -> image/svg+xmlclipboard_pasteauto-dispatch (server.py)raster_formats(returnsImage) andsvg_formats(returns text in a ```svg fence); raster wins when both are present# SVG round-trip read paths (#136); total 618Per semver §6, this is a patch bump (Fixed-only). Project precedent: v2.5.1 was also Fixed-only and shipped as patch.
Diff summary
The standard release-PR triad. Heading rename
## [Unreleased]->## [2.6.1] - 2026-05-07plus a fresh empty## [Unreleased]section above it.Test plan
git tag v2.6.1 && git push origin v2.6.1after merge firespublish.yml.publish-pypishipsmcp-clipboard==2.6.1to PyPI.publish-registryupdatesio.github.cmeans/mcp-clipboardto 2.6.1 withisLatest=true(steady-state since v2.5.1 first registered).github-releasejob (steady-state since v2.6.0 first firing) auto-creates the v2.6.1 GitHub Release page.pip index versions mcp-clipboard⇒ 2.6.1;gh release view v2.6.1;curl 'https://registry.modelcontextprotocol.io/v0/servers?search=mcp-clipboard'returns 2.6.1.Local verification on this commit
uv run python scripts/sync-server-json.py --check: in sync at 2.6.1.uv run pytest -q: 618 passed, 19 deselected, 5 xfailed.uv run ruff check src tests scripts: clean.uv run ruff format --check src tests scripts: clean.uv run mypy src: clean.uv build --wheel: producesmcp_clipboard-2.6.1-py3-none-any.whl.