Skip to content

chore: release v0.5.0#38

Merged
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
chore/release-v0.5.0
Apr 23, 2026
Merged

chore: release v0.5.0#38
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
chore/release-v0.5.0

Conversation

@cmeans-claude-dev
Copy link
Copy Markdown
Contributor

@cmeans-claude-dev cmeans-claude-dev Bot commented Apr 23, 2026

Summary

Release PR for v0.5.0 — the first release since v0.4.2 (2026-03-19).

Bumps `pyproject.toml` version `0.4.2 → 0.5.0` and finalizes the `CHANGELOG` by converting the `[Unreleased]` section to `## [0.5.0] - 2026-04-22` with a fresh empty `[Unreleased]` above for future work.

Why minor (not patch)

The `[Unreleased]` section contains the MIT → Apache-2.0 license switch (PR #22). A license change affects downstream compliance and warrants at minimum a minor bump. Published versions at or below 0.4.2 on PyPI remain MIT permanently; v0.5.0 onward is Apache-2.0.

Other user-visible changes that justify a minor:

15 merged PRs since v0.4.2 in total — see `CHANGELOG.md` `[0.5.0]` for the full grouped entry.

Pre-release gate (all four required, all four satisfied)

  1. ✅ `scripts/smoke-test.sh` — 19/19 passed, version correctly reports `0.5.0`.
  2. ✅ `pytest tests/` — 449 passed on `chore/release-v0.5.0`.
  3. ✅ `ruff check src/ tests/` — clean.
  4. ✅ Live `--dry-run` session signed off by maintainer on 2026-04-22:
    • Fresh-clone `pip install -e .` succeeds (verifies PR fix: remove README-pypi.md generation dance, point pyproject at README.md #37 fix).
    • Browser launch, UA masking, subscription scrape (138 subs), blocklist fetch (both deslop and aislist), list-growth detection, state diff (already-blocked), feed JSON cache (22 entries on initial load), scroll + termination, clean exit all exercised successfully.
    • 0 feed matches across both sources — reflects a well-trained algorithm on a subscription-heavy account, not a regression. Absence of `POSSIBLE SELECTOR FAILURE` warnings confirms selector health.
    • Menu-click code path not exercised (data dependency), but is unchanged in `[Unreleased]` and is well-exercised in production (38 prior successful blocks in account state).

Clickbait FP assessment is N/A — no clickbait-related changes in `[Unreleased]`.

Release mechanics after merge

After this PR is QA-approved and squash-merged:

  1. Maintainer only: `git tag v0.5.0` on `main` and `git push origin v0.5.0`.
  2. `publish.yml` triggers automatically on the tag push:
    • Builds the wheel + sdist from the tag commit.
    • Publishes to PyPI via trusted publishing (no API token needed).
    • Creates a GitHub Release with auto-generated notes diffing `v0.4.2..v0.5.0`.
  3. `sync-labels.yml` runs on the merge to `main` and keeps the label list in sync with `.github/labels.yml`.

I will not tag this release — that's explicitly maintainer-only per project memory.

Test plan

  • `scripts/smoke-test.sh` — 19/19.
  • `pytest tests/ -q` — 449 passed.
  • `ruff check src/ tests/` — clean.
  • `yt-dont-recommend --version` → `0.5.0`.
  • Live `--dry-run` on both deslop and aislist — clean, no warnings.
  • QA: spot-check `CHANGELOG.md` `[0.5.0]` entry covers all 15 merged PRs accurately.
  • QA: confirm no regressions surfaced in CI on this branch.

Bumps pyproject.toml version from 0.4.2 to 0.5.0 and finalizes the
CHANGELOG by converting [Unreleased] to [0.5.0] - 2026-04-22, with a
fresh empty [Unreleased] above for future work.

Minor bump is forced by the MIT -> Apache-2.0 license switch (PR #22)
among other user-visible changes; see CHANGELOG.md [0.5.0] for the
full entry (15 merged PRs since v0.4.2).

Pre-release gate (all four satisfied):
- scripts/smoke-test.sh: 19/19 pass (version correctly reports 0.5.0)
- pytest tests/: 449 passed
- ruff check src/ tests/: clean
- Live --dry-run session signed off by maintainer on 2026-04-22:
  - Fresh-clone pip install -e . succeeds (PR #37 verified)
  - Browser launch, UA masking, subscription scrape, blocklist fetch,
    list-growth detection, state diff, feed JSON cache, scroll, clean
    exit all exercised successfully against both deslop and aislist
  - 0 feed matches reflects well-trained algorithm, not a regression
  - No POSSIBLE SELECTOR FAILURE warnings

After merge, maintainer will tag v0.5.0 and push the tag; publish.yml
auto-publishes to PyPI on tag push and github-release creates the
release notes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the Awaiting CI Dev complete, waiting for CI to pass before QA label Apr 23, 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!

@github-actions github-actions Bot added Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI to pass before QA labels Apr 23, 2026
@cmeans cmeans added the QA Active QA is actively reviewing; Dev should not push changes label Apr 23, 2026
@github-actions github-actions Bot removed the Ready for QA Dev work complete — QA can begin review label Apr 23, 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 Review — PR #38 (release v0.5.0)

Verdict: Ready for QA Signoff

All four pre-release gate items reproduce on my machine; CHANGELOG [0.5.0] entry maps cleanly to git history; [Unreleased] is correctly empty above it. One non-blocking note on the body's PR count (won't ship).

Pre-release gate — re-verified locally

  • uv build on a clean dist/Successfully built dist/yt_dont_recommend-0.5.0.tar.gz and …-0.5.0-py3-none-any.whl. Wheel/sdist both name v0.5.0.
  • pip install -e . --quiet → succeeds (verifies PR #37's fix is intact on the bumped branch).
  • yt-dont-recommend --versionyt-dont-recommend 0.5.0. Confirms the pyproject.toml bump propagates through _resolve_version() / _get_current_version().
  • pytest tests/ -q → 449 passed in 33.94s.
  • ruff check src/ tests/ → all checks passed.
  • bash scripts/smoke-test.sh → 19/19 PASS, final line: All 19 checks passed — ready to release v0.5.0.
  • CI all required checks SUCCESS on chore/release-v0.5.0; mergeable. qa-gate is the only PENDING context — that's the maintainer-applied QA Approved gate by design.

CHANGELOG [0.5.0] ↔ git history

Audited the [0.5.0] section against gh pr list --state merged --base main --search "merged:>2026-03-19":

Section / entry PR(s) covered
Added — QA workflow + label state machine #19
Added — Stricter _get_current_version fallback #35 (closes #32) ✓
Added — Coverage push + # pragma: no cover sweep #30
Added — Codecov #21
Added — README badges + FUNDING.yml #20
Changed — License MIT → Apache-2.0 #22 (license portion) ✓
Fixed — Fresh-clone pip install -e . #37
Fixed — Stale python -m yt_dont_recommend examples + CLAUDE.md cleanup + License docstring #34 (closes #31) ✓
Fixed — Scheduler catch-up spawn storm #18 (closes #17) ✓
Fixed — workflow_run registration #24, #25, #26, #27, #28 (grouped, root cause #28) ✓
Fixed — PyPI badges / Trove classifiers #22 (PyPI metadata portion) ✓

That accounts for 14 substantive PRs (#18, #19, #20, #21, #22, #24, #25, #26, #27, #28, #30, #34, #35, #37). The other three merged PRs since v0.4.2 are CHANGELOG-meta (#29 backfill of #18/#20/#21 entries; #33 fix-misattributions across pre-v0.4.2 entries; #36 fill-Unreleased gaps for #19 and #24-#28) — by design they don't get self-referential entries because their substance IS the entries they added/fixed elsewhere. So the [0.5.0] section is complete.

[Unreleased] shape

## [Unreleased]

## [0.5.0] - 2026-04-22

### Added
…

awk '/^## \[Unreleased\]/{flag=1; next} /^## \[/{flag=0} flag' CHANGELOG.md returns nothing — empty [Unreleased] above [0.5.0]. Correct Keep a Changelog shape for the post-release state.

Note — non-blocking

The PR body says "15 merged PRs since v0.4.2 in total". By literal gh pr list count, 17 PRs have merged into main since v0.4.2 was tagged on 2026-03-19 (#18 #19 #20 #21 #22 #24-#28 #29 #30 #33 #34 #35 #36 #37). The "15" figure looks like it's 17 − {#33, #36} (the two CHANGELOG-meta PRs whose substance lands as entries Dev wrote on behalf of other PRs) — a defensible interpretation, but the "in total" wording reads as a literal headcount. Doesn't affect anything that ships (CHANGELOG entries are accurate; the count claim is body-only and won't make it into the release notes that publish.yml auto-generates from git log v0.4.2..v0.5.0). Worth tightening the wording on the next release PR (e.g. "15 substantive feature/fix PRs (excluding CHANGELOG-meta PRs #33 and #36); 17 merged PRs in total") but not blocking on this round.

After merge — QA reminder for the maintainer

Per CLAUDE.md and project memory, only the maintainer runs git tag v0.5.0 && git push origin v0.5.0. I will not tag.

QA checkboxes ticked. Promoting to Ready for QA Signoff.

@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 Apr 23, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit d1e8e06 into main Apr 23, 2026
28 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the chore/release-v0.5.0 branch April 23, 2026 01:56
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

Development

Successfully merging this pull request may close these issues.

Scheduler catch-up spawn storm: heartbeat fires N consecutive runs when waking from sleep

2 participants