.claude/skills/release-pr/SKILL.md
Prepare or update a release PR from dev to master with auto-generated release notes
npx skillsauth add fgforrest/evitadb release-prInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Creates or updates a GitHub pull request from dev (main branch) to master (release branch) with auto-generated release notes. The release notes are assembled from GitHub milestone issues and git commit history, following the established evitaDB release notes format.
dev to master/release-prExecute the following steps in order. Stop and report to the user if any step fails.
Verify that all dependency signatures are valid before proceeding with the release. This catches PGP key rotations that would break the CI/CD PGP Keys Check step.
./tools/verify-pgp-keys.sh --check
If it exits 0 (all signatures valid), skip to Step 1.
If it exits non-zero, the script outputs a structured report for each failing group with:
For each group in the script output, present a summary table:
| Check | Result |
|---|---|
| New key fingerprint | 0x... (from script output) |
| Cross-ref: same key signs other group artifacts | Yes/No |
| Key found on public keyserver | Yes/No (which server) |
| Key UID | From script output |
| Old key expired | Yes (date) / No |
For [PASS] entries (cross-reference succeeded AND/OR key exists on a keyserver):
./tools/verify-pgp-keys.sh --fix
This updates pgp-keys-map.list with the validated fingerprints.git add pgp-keys-map.list && git commit -m "chore: update PGP keys for <groupIds> after key rotation"For [FAIL] entries (cross-reference failed AND key not on any keyserver):
If the report contains a mix of PASS and FAIL entries, apply the PASS fixes first, then stop and report the FAIL entries. Do not proceed to Step 1 until all entries are resolved.
After applying fixes, re-run the check:
./tools/verify-pgp-keys.sh --check
If it passes, proceed to Step 1. If it still fails, repeat from P2 for the remaining failures.
Note: Any PGP key update commits from the Preliminary Phase will be part of the working tree when Step 2 checks for a clean state. The user must push those commits before proceeding.
Run git branch --show-current and verify the result is dev. If not, stop and tell the user they must be on the dev branch.
git status --porcelain — if output is non-empty, stop and tell the user to commit or stash changes.git fetch origin dev then compare git rev-parse dev vs git rev-parse origin/dev — if they differ, stop and tell the user to push their commits first.pom.xml and extract the version from the first <version> tag.-SNAPSHOT suffix if present (e.g. 2026.1-SNAPSHOT becomes 2026.1).Release {version} (e.g. Release 2026.1).Run the following to find the latest release tag on master:
git fetch origin master
git describe --tags --abbrev=0 origin/master
This returns a tag like v2025.8.15. Strip the leading v to get the base version (e.g. 2025.8.15). This is passed to list-issues.sh as the second argument for dependency comparison.
Run both scripts and capture their output:
./tools/list-issues.sh "{version}" "{base_version}"
./tools/list-commits.sh "{base_version}"
Where {version} is the milestone title from Step 3 (e.g. 2026.1) and {base_version} is from Step 4 (e.g. 2025.8.15).
Then aggregate the two outputs into a single release notes body following these rules:
list-issues.sh are authoritative — they have proper issue numbers and milestone categorization. Always include all of them.list-commits.sh supplement — include commit entries that represent meaningful user-facing features or bug fixes not already covered by an issue entry. Match by description similarity to avoid duplicates.### ☢️ Breaking changes### 🚀 Features### 🐛 Bug Fixes### ⛓ Dependencies upgrades📝) and test (🧪) sections from the final release notes — they are internal-facing.## What's Changed.dev to master already exists:
gh pr list --repo FgForrest/evitaDB --head dev --base master --state open --json number,title --jq '.[0]'
gh pr create --repo FgForrest/evitaDB --head dev --base master \
--title "Release {version}" \
--body "<release notes body>"
Then request Copilot review:
gh api --method POST /repos/FgForrest/evitaDB/pulls/{PR_NUMBER}/requested_reviewers \
-f 'reviewers[]=copilot-pull-request-reviewer[bot]'
gh pr edit {PR_NUMBER} --repo FgForrest/evitaDB \
--title "Release {version}" \
--body "<release notes body>"
Print the PR URL and a summary of what was done (created vs updated).
gh pr create or gh pr edit to preserve markdown formatting.list-issues.sh script requires the gh CLI to be authenticated.list-issues.sh reports no milestone found, tell the user to verify the milestone title exists on GitHub.development
Use when dropping a class name or folder path to perform a full quality pass - tests, simplification, and bug hunting - using the test-architect, code-simplifier, and bug-hunter-tdd agents in succession, both for analysis and execution
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.