Skip to content

Release v0.5.1#78

Merged
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
release/v0.5.1
May 1, 2026
Merged

Release v0.5.1#78
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
release/v0.5.1

Conversation

@cmeans-claude-dev
Copy link
Copy Markdown
Contributor

@cmeans-claude-dev cmeans-claude-dev Bot commented May 1, 2026

Summary

Patch release rolling up the post-0.5.0 fixes. Five PRs land in this release:

Files touched (per CLAUDE.md release procedure)

  • pyproject.toml: 0.5.0 → 0.5.1
  • server.json: synced via scripts/sync-server-json.py (top-level + packages[0].version)
  • uv.lock: refreshed via uv lock
  • CHANGELOG.md: ## Unreleased renamed to ## 0.5.1 (2026-05-01); fresh empty ## Unreleased added above for the next cycle

QA

Manual tests

    • python scripts/sync-server-json.py --check — reports "in sync (0.5.1)".
    • uv run pytest — 550 passed, 96.13% coverage.
    • uv run ruff check src/ tests/ scripts/ — clean.
    • uv run ruff format --check src/ tests/ scripts/ — clean.
    • uv run mypy src/ scripts/ — clean.
    • CHANGELOG diff is exactly: ## Unreleased## 0.5.1 (2026-05-01), plus a fresh empty ## Unreleased heading inserted above. No content was moved or rewritten — every entry under ## 0.5.1 already lived under ## Unreleased on main.
    • After merge: tag-push triggers publish.yml. The awk extractor on ## <version>( |\() matches ## 0.5.1 (2026-05-01) correctly and the new empty ## Unreleased is harmlessly walked past.

Verification I already ran

Check Result
python scripts/sync-server-json.py --check in sync (0.5.1)
uv run pytest 550 passed, 100 deselected, 96.13% coverage
uv run ruff check src/ tests/ scripts/ clean
uv run ruff format --check src/ tests/ scripts/ 72 files already formatted
uv run mypy src/ scripts/ clean (30 files, strict-mode)
git diff --stat HEAD~1 4 files: CHANGELOG.md, pyproject.toml, server.json, uv.lock

🤖 Generated with Claude Code

Patch release rolling up the post-0.5.0 fixes:

- #69 Atomic state-file writes (closes #36)
- #71 Atomic write for cli/setup.py interactive config (closes #70)
- #72 README per-installer and per-OS download-breakdown badges
- #73 Recycle-bin status probed per share (closes #37)
- #77 Per-path serial for multi-path getinfo + delete (closes #68)

#77 in particular fixes a v0.5.0 silent-no-op regression on
delete_files with multi-path arrays — caller would see "[+] Deleted
N item(s)" but no paths were actually deleted on real DSM 7.x.

Files touched per project release procedure:
- pyproject.toml: 0.5.0 → 0.5.1
- server.json: synced via scripts/sync-server-json.py
- uv.lock: refreshed via `uv lock`
- CHANGELOG.md: ## Unreleased renamed to ## 0.5.1 (2026-05-01),
  fresh empty Unreleased added above

Local verification on release/v0.5.1:
- uv run pytest: 550 passed, 100 deselected, 96.13% coverage
- uv run ruff check src/ tests/ scripts/: clean
- uv run ruff format --check src/ tests/ scripts/: clean
- uv run mypy src/ scripts/: clean
- python scripts/sync-server-json.py --check: in sync (0.5.1)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels May 1, 2026
Copy link
Copy Markdown
Owner

@cmeans cmeans left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cmeans cmeans added the QA Active QA is actively reviewing; Dev should not push changes label May 1, 2026
@github-actions github-actions Bot removed the Ready for QA Dev work complete — QA can begin review label May 1, 2026
Copy link
Copy Markdown
Owner

@cmeans cmeans left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA Round 1 — PASS

Release rollup PR for v0.5.1, bundling #69, #71, #72, #73, #77 — all five already QA-Approved this cycle. Diff is exactly what a clean release PR should be: 6 lines across 4 files, no feature-code changes.

Verification

Check Result
python scripts/sync-server-json.py --check server.json in sync with pyproject.toml (0.5.1)
uv run pytest 550 passed, 100 deselected, 96.13% coverage (matches the post-#77 baseline)
uv run ruff check src/ tests/ scripts/ clean
uv run ruff format --check src/ tests/ scripts/ 72 files already formatted
uv run mypy src/ scripts/ clean (30 files, strict-mode)
Required CI on d7343e0 13/13 green (vdsm completed SUCCESS)

Diff sanity

Verified the four files contain exactly the version-bump + CHANGELOG-split mechanics, no surprise content:

  • pyproject.toml: single line version = "0.5.0""0.5.1".
  • server.json: top-level version + packages[0].version both 0.5.00.5.1 (the two distinct version sites that scripts/sync-server-json.py keeps in lockstep).
  • uv.lock: single line version = "0.5.0""0.5.1" on the mcp-synology package entry.
  • CHANGELOG.md: new ## 0.5.1 (2026-05-01) heading inserted between the existing ## Unreleased and the existing ### Fixed content. No prose moved or rewritten — every entry under ## 0.5.1 already lived under ## Unreleased post-#77. Section order on disk is now Unreleased (empty placeholder) → 0.5.1 (2026-05-01)0.5.0 (2026-04-10) → … as expected.

publish.yml extractor sanity (manual test #7 — post-merge but pre-verifiable)

Read the awk extractor at .github/workflows/publish.yml:117-120:

$0 ~ "^## "version"( |\\()" {flag=1; next}
flag && /^## / {exit}
flag

For VERSION=0.5.1 against this CHANGELOG:

  • ## Unreleased — pattern ^## 0.5.1( |\() doesn't match (no version match), flag=0, walked past.
  • ## 0.5.1 (2026-05-01) — pattern matches the literal 0.5.1 (, flag=1, next.
  • All ### Fixed / ### Added content under 0.5.1 — flag=1, lines emitted.
  • ## 0.5.0 (2026-04-10)flag=1 and ^## matches, exit.

The empty ## Unreleased placeholder is harmlessly skipped exactly as the PR body claims; the extracted block will be the 0.5.1 entries verbatim.

Notes

  • All five rolled-up PRs are already QA-Approved with audit trails on each PR.
  • No CHANGELOG drift, no version desync between manifest files, no test regressions, no lint/type drift.
  • Manual tests 1–6 verified directly; #7 verified by reading the awk pattern against the new heading shape (post-merge tag-push behavior is then mechanical).

PR-body manual tests 1–7 all checked.

Verdict

Ready for QA Signoff. Final maintainer call.

@cmeans
Copy link
Copy Markdown
Owner

cmeans commented May 1, 2026

Applying Ready for QA Signoff as the final act of round 1. Release rollup PR for v0.5.1 — bundles #69, #71, #72, #73, #77 (all already QA-Approved). All four files (pyproject.toml, server.json, uv.lock, CHANGELOG.md) contain exactly the version-bump + section-split mechanics; no surprise content. scripts/sync-server-json.py --check reports in-sync. publish.yml awk extractor verified by inspection — matches ## 0.5.1 (2026-05-01) and walks past empty ## Unreleased placeholder. 550/550 pass, 96.13% coverage, ruff/mypy clean, 13/13 required CI green. Final maintainer call.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge QA Approved Manual QA testing completed and passed and removed QA Active QA is actively reviewing; Dev should not push changes Ready for QA Signoff QA passed — ready for maintainer final review and merge labels May 1, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit b3e4ab7 into main May 1, 2026
34 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the release/v0.5.1 branch May 1, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

QA Approved Manual QA testing completed and passed

Projects

None yet

2 participants