Skip to content

docs(changelog): fill Unreleased gaps for #19 QA workflow and #24-#28 CI fix#36

Merged
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
docs/changelog-unreleased-gaps
Apr 22, 2026
Merged

docs(changelog): fill Unreleased gaps for #19 QA workflow and #24-#28 CI fix#36
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
docs/changelog-unreleased-gaps

Conversation

@cmeans-claude-dev
Copy link
Copy Markdown
Contributor

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

Summary

Pre-release audit against `git log v0.4.2..main` surfaced three gaps in `CHANGELOG.md` § `[Unreleased]`:

  1. No entry for PR chore: adopt mcp-clipboard QA workflow, label automation, and label source-of-truth #19 — QA workflow + PR label state machine (`qa-gate.yml`, `pr-labels*.yml`, `sync-labels.yml`, `labels.yml`). Major infrastructure addition, precedented by v0.4.2's Ruff linting entry being listed.
  2. No entry for the fix(workflows): add workflow_dispatch to pr-labels-ci.yml to prime workflow_run listener #24-fix(workflows): remove literal dollar-brace-brace from run-block comments (actual root cause) #28 `workflow_run` registration fix saga (five PRs over one diagnostic cycle). The label automation workflow was silently never registering because literal GitHub Actions template-expression syntax inside shell comments was being substituted at queue time.
  3. The test: push pure-logic modules to 100% coverage; fail_under=60 regression guard #30 coverage entry did not call out the `# pragma: no cover` sweep, which is a hard-rule project policy — pragma suppressions were removed across the codebase as part of that PR. Adding a sentence to the existing entry rather than a new bullet.

No code changes — CHANGELOG-only.

Test plan

Context

This is the final gap-fill before proposing a `v0.5.0` tag (minor bump forced by the MIT → Apache-2.0 license switch in PR #22).

…CI fix

Pre-release audit against `git log v0.4.2..main` surfaced three gaps in the
`[Unreleased]` section:

- No entry for PR #19 (QA workflow + PR label state machine) — a major
  infrastructure addition precedented by v0.4.2's Ruff entry.
- No entry for the #24-#28 `workflow_run` registration fix saga.
- The coverage push entry did not call out the `# pragma: no cover` sweep,
  which is a hard-rule policy for the project.

Adds an Added entry for #19, a Fixed entry for #24-#28, and tacks a sentence
onto the existing coverage entry. No code changes.

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 to pass before QA 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 22, 2026
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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

@cmeans cmeans added the QA Active QA is actively reviewing; Dev should not push changes label Apr 22, 2026
@github-actions github-actions Bot removed the Ready for QA Dev work complete — QA can begin review label Apr 22, 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 #36

Verdict: Ready for QA Signoff

CHANGELOG-only; all three gap-fill claims verified against git history. Test suite + lint + CI clean. One note on the local smoke-test claim, tracked elsewhere — does not block.

Verification — each gap claim

Claim 1 — PR #19 QA workflow + label state machine. PR #19 merged at 0774c91. Touched files (gh pr view 19): .github/labels.yml, .github/workflows/{qa-gate,pr-labels,pr-labels-ci,sync-labels}.yml, CLAUDE.md. Exactly the set the new ### Added bullet names. The state machine described (Awaiting CI → Ready for QA → QA Active → Ready for QA Signoff / QA Failed → QA Approved) matches the workflow files on main. CLAUDE.md § "PR & Label Workflow" exists (1 hit via grep). ✓

Claim 2 — PRs #24#28 workflow_run registration fix saga. Confirmed all five PRs touch only .github/workflows/pr-labels-ci.yml:

  • #24 add workflow_dispatch to prime workflow_run listener
  • #25 guard env against missing workflow_run context
  • #26 use 'none' instead of '' as null-coalesce fallback
  • #27 extract workflow_run fields via jq from $GITHUB_EVENT_PATH
  • #28 remove literal dollar-brace-brace from run-block comments (actual root cause)

PR #28's title exactly matches the CHANGELOG description ("literal GitHub Actions template-expression syntax inside shell comments … substituted by the runner at queue time … silently prevented the workflow from registering"). "Five iterations" is literal. ✓

Claim 3 — #30 pragma sweep. PR #30 merged at b327ad4; its two commits on test/coverage-push are e472e32 test: push pure-logic modules to 100% coverage, add regression guard and bb2b9d7 test: remove all \# pragma: no cover` — cover, delete, or refactor instead. Confirmed the pragma-removal commit is part of PR #30 (gh pr list --search→ #30 ownstest/coverage-push`). Adding one sentence to the existing entry rather than a new bullet is appropriate for a single PR. ✓

Local tests

  • .venv/bin/python -m pytest tests/ -q → 449 passed in 33.95s.
  • .venv/bin/ruff check src/ tests/ → all checks passed.
  • CI green on docs/changelog-unreleased-gaps; mergeable.

Note — not blocking

Local scripts/smoke-test.sh fails on this branch at the uv build step with Readme file does not exist: README-pypi.md. This is a pre-existing repo issue — pyproject.toml declares readme = {file = "README-pypi.md"}, but that file is generated on the fly inside .github/workflows/ci.yml and publish.yml (three Path('README-pypi.md').write_text(cleaned, ...) hits) and is not checked into git (git log --all -- README-pypi.md returns empty across every branch). So the smoke test passes in CI because the workflow generates the file first, but fails for anyone running it locally without reproducing that step. PR #36 does not change any of this — it's CHANGELOG-only — and PR #37 (fix/remove-readme-pypi-dance, "fix: remove README-pypi.md generation dance, point pyproject at README.md") is already open and targets exactly this. So the PR body's scripts/smoke-test.sh — 19/19 passed (pre-change state) checkbox is probably true in a CI-primed working tree but not locally from a clean checkout. Worth tightening the test-plan wording when this surfaces again (e.g. "via CI" or "after running the CI README-pypi generation step"), but out of scope for this PR.

No findings

QA checkbox in PR body now ticked. Promoting to Ready for QA Signoff. Maintainer can apply QA Approved.

@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 22, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit 9db1efa into main Apr 22, 2026
28 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the docs/changelog-unreleased-gaps branch April 22, 2026 20:43
@cmeans cmeans mentioned this pull request Apr 23, 2026
7 tasks
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.

2 participants