Agent skill

Release Patch

by tetherto in tetherto/qvac

Back-port fix(es) onto an existing release line and cut a patch release.

Apache-2.0Auto-check passedDevelopment

Install Release Patch

skills CLI
$ npx skills add tetherto/qvac --skill release-patch -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tetherto/qvac release-patch --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tetherto/qvac.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/ocr-ggml/.agent/skills/release-patch .claude/skills/release-patch && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
release-patch
GitHub stars
674
Token cost
~3k tokens
SKILL.md length
1,419 words
Files
1
Skills in repo
50
Repo updated
First seen
Licence
Apache-2.0

At a glance

Back-port fix(es) onto an existing release line and cut a patch release.

  • Works in 8 steps: Identify the target release line + next… → Resolve the source commits (use the… → Assess cherry-pick cleanliness BEFORE… → …
  • Patching a shipped version (e.g
  • SKILL.md covers Golden rule, Workflow, Nuances & gotchas (all hit for… and Worked example —…, plus 1 more section
  • Calls git, npm and gh; needs GITHUB_TOKEN and PAT_TOKEN

What it does

Release Patch is an agent skill from tetherto/qvac. Back-port fix(es) onto an existing release line and cut a patch release. Create the new release branch from the base with NO direct commits, land the fix(es) and the version+changelog bump via PRs into it, then publish via the release skill. Use for patching a shipped version (e.g. what an older SDK release pins) without pulling in later main-line changes.

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Changelog and release notes. The repository describes itself as: Open-source local AI SDK - run AI on-device with no cloud, no API keys. Supports GGUF, RAG, image, music, and video generation, speech-to-text, P2P inference, and more… The licence is Apache-2.0.

When your agent uses it

  • Patching a shipped version (e.g
  • Tasks that involve Changelog and release notes

Example prompts

  • “/release-patch”

Requirements

  • A credential in GITHUB_TOKEN
  • A credential in PAT_TOKEN

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Identify the target release line + next version
  2. Resolve the source commits (use the SQUASH-merge SHAs on main)
  3. Assess cherry-pick cleanliness BEFORE touching anything
  4. Create the release branch from the base — NO changes — and push it
  5. PR #1: the fix(es), into the new release branch
  6. PR #2: version + CHANGELOG bump, into the release branch
  7. Release (merging PR #2 auto-triggers publish; use the release skill to verify)
  8. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit d92f697. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • npm
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, npm and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GITHUB_TOKEN
    • PAT_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Release Patch loads about 3k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 1,419 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~94
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from tetherto/qvac at commit d92f697, republished under its Apache-2.0 licence (© tetherto). 1,419 words, ~2,983 tokens.

Download SKILL.mdSave it as .claude/skills/release-patch/SKILL.md (or your agent's skills folder).
name
release-patch
description
Back-port fix(es) onto an existing release line and cut a patch release. Create the new release branch from the base with NO direct commits, land the fix(es) and the version+changelog bump via PRs into it, then publish via the `release` skill. Use for patching a shipped version (e.g. what an older SDK release pins) without pulling in later main-line changes.
argument-hint
<package> <fix-PR-or-commit>... [base-release-branch]
disable-model-invocation
true

Release Patch — back-port a fix to an existing release line

Cut a patch release on an existing release line (a shipped x.y.z a consumer still depends on) by back-porting one or more already-merged fixes, without dragging in later main-line changes.

Use this when, e.g., an older SDK release pins @qvac/<pkg> ^0.36.3 and needs a fix that only landed on main/a newer minor. The output is a new patch (e.g. 0.36.4) published under the line's maintenance dist-tag — latest is left pointing at the newest version.

<package> is the directory name under packages/ (e.g. llm-llamacpp). <fix-PR-or-commit> is one or more merged fix PRs (or their squash-merge SHAs). [base-release-branch] is the release line to patch (e.g. release-llm-0.36.3); if omitted, discover it in Step 1.

Golden rule

Never commit or git push directly onto a release-* branch. The release-* ruleset requires all changes to arrive via a merged PR (a bare branch creation push is allowed; subsequent commits are rejected — GH013 … Changes must be made through a pull request). So: create the release branch as an exact copy of the base, push it once, then land every change (fix cherry-picks, version bump) via PRs whose base is that release branch.

Workflow

Step 1 — Identify the target release line + next version
  1. Determine the version the consumer needs — read its dependency spec, e.g. the SDK's packages/sdk/package.json: "@qvac/<pkg>": "^0.36.3" → the 0.36 line, and the patch must be >= 0.36.3 < 0.37.0.
  2. Find the actual release-line ref. ⚠ Naming is not uniform. The release skill's default is release-<package>-<version> / tag <package>-v<version>, but real patch lines have used a short prefix: branch release-llm-<version> + tag llamacpp-llm-v<version>. Do not assume — verify:
    bash
    git ls-remote origin 'release-*' | grep -i <pkg>        # candidate branches
    git ls-remote --tags origin | grep -iE '<pkg>|llm'      # candidate tags
    Pick the branch/tag that actually holds the target version (confirm with git show <ref>:packages/<pkg>/package.json | grep '"version"'). That commit is the base.
  3. Next patch version = base patch + 1 (must satisfy the consumer range and stay below the next minor). Record it as <newver> and the base branch as <base>.
Step 2 — Resolve the source commits (use the SQUASH-merge SHAs on main)

For each fix PR, take the squash-merge commit on main, not the PR's individual branch commits:

bash
gh pr view <N> --repo tetherto/qvac --json number,title,mergeCommit --jq '{n:.number,title,sha:.mergeCommit.oid}'

Do not cherry-pick a version/changelog-only PR (e.g. a prior x.y.z bump) — that bump is redone for this line in Step 6.

Step 3 — Assess cherry-pick cleanliness BEFORE touching anything

For each source commit, diff its touched files between the base and the commit's parent:

bash
git diff --numstat <base> <squash-sha>~1 -- <touched-paths>

Empty output ⇒ that file is identical at the base ⇒ the hunk applies cleanly. Non-empty ⇒ that file diverged ⇒ expect a conflict there (typically test files). If the core source files are identical, the back-port is safe; a few diverged test files are resolved by grafting in Step 5. If everything is heavily diverged, stop and reconsider (the fix may need manual porting, not a cherry-pick).

Step 4 — Create the release branch from the base — NO changes — and push it
bash
git -C <repo> fetch origin <base>
git -C <repo> worktree add <wt> origin/<base>
git -C <wt> checkout -b release-<pkg>-<newver>     # exact copy of the base, no edits
git -C <wt> config user.email "<you>"; git -C <wt> config user.name "<you>"
git -C <wt> push origin release-<pkg>-<newver>     # branch-creation push (allowed)

Commit identity = the releaser; never add an AI signature / Co-Authored-By. Confirm HEAD == base commit. Do not bump the version here — leave it at the base value (publish-safe).

Step 5 — PR #1: the fix(es), into the new release branch

Work on a normal-named branch (not release-*, so it isn't push-protected):

bash
git -C <wt> checkout -b <TICKET>/backport-<pkg>-<newver>
git -C <wt> cherry-pick <squash-sha>...

Resolve only the expected diverged-file conflicts by grafting the commit's added block into the base file (keep the base file's structure; do not reformat unrelated lines). All identical-at-base files apply automatically.

Validate completeness (that the cherry-pick captured the source, nothing missed):

  • Cleanly-applied files — resulting blob byte-identical to the source commit's post-image: git rev-parse <squash-sha>:<file> == git rev-parse HEAD:<file> for each.
  • Manually-resolved files — the added lines equal the commit's added lines (git show <squash-sha> -- <file> +-lines vs git diff <base> HEAD -- <file> +-lines).

Push the helper branch; open PR #1 with base = release-<pkg>-<newver> (four-emoji body; link the source PR(s)).

CI: add the matrix labels — prebuilds, run-cpp-addon-tests, run-desktop-addon-tests, run-mobile-addon-tests — to run the fix-validating jobs. Do not add verified: ci-router reads only those four names, so verified selects no stage and fails silently, costing a CI round. (The label still exists and its siblings' descriptions still read "requires verified" — that text is stale; the label gate was retired, and ci-trust-policy.test.mjs asserts it stays retired.) Auto-approve the release environment deployment when it appears. Always read failures from full logs via gh api repos/tetherto/qvac/actions/jobs/{id}/logs — gh run view --job --log silently truncates (~1.1 MB of ~9 MB) and can fake a "hang". Triage flaky-vs-real; pre-existing environment failures (e.g. test-darwin-x64 macOS-x64-VM timeouts) are non-gating and not blockers — confirm the fix's own tests pass. Merge PR #1 into the release branch.

Step 6 — PR #2: version + CHANGELOG bump, into the release branch

On another helper branch off the (now fix-carrying) release branch:

  • packages/<pkg>/package.json: base version → <newver>.
  • packages/<pkg>/CHANGELOG.md: add ## [<newver>] - <YYYY-MM-DD> (bracketed heading — the release workflow requires this format) above the base entry; reuse the original fix's changelog wording, crediting the fix PR(s). package.json version MUST equal the new heading.
  • Keep the version at the base value until this PR so nothing publishes early.
  • Lint gate varies by line era — run npm run lint in packages/<pkg> (older release lines use standard, newer use prettier); match whatever that branch enforces.

Open PR #2 (base = release-<pkg>-<newver>).

Show full SKILL.md (590 more words)Show less
Step 7 — Release (merging PR #2 auto-triggers publish; use the release skill to verify)

Merging the bump PR into the release-* branch is a trusted push → on-merge-<pkg>.yml runs and publishes automatically. No labels are needed on a merge/push: push is a trusted event in ci-router, which short-circuits label parsing and enables every stage on its own. Publication is gated by version>npm + release-merge-guard. Follow the release skill for the monitor/verify mechanics (its Steps 4–6), with these nuances:

  • release-skill latest-guard caveat. The release skill's Step 1 compares the local version to npm latest and stops if not higher. A back-port (e.g. 0.36.4 < latest 0.38.0) fails that check — so the publish path for a maintenance patch is the on-merge auto-trigger from the PR merge, and you verify against the line's maintenance dist-tag, not latest. Use the release skill for its monitor/verify steps; don't let the latest-guard block a legitimate back-port.
  • dist-tag. The npm-dist-tag-determination action publishes an older-than-latest patch under a maintenance tag (e.g. release-<major.minor>) and must NOT move latest. This is correct — consumer semver ranges (^0.36.3) resolve by version, so they still pick up the new patch.
  • create-tag job fails (HTTP 403/422). It uses secrets.GITHUB_TOKEN, which is not authorized to create the protected release tag (no repo tag-ruleset; a user/PAT can). So the git tag is NOT created automatically — create it manually with a user/PAT credential:
    bash
    git tag <pkg-tag-prefix>-v<newver> <release-branch-sha>   # e.g. llamacpp-llm-v0.36.4
    git push origin <pkg-tag-prefix>-v<newver>
    (Longer-term fix: change create-release-tag.yml to use secrets.PAT_TOKEN, like label-gate does.)
Step 8 — Verify
  • npm view @qvac/<pkg>@<newver> version → the new patch exists.
  • npm view @qvac/<pkg> dist-tags → latest unchanged; the new patch under its maintenance tag.
  • The release git tag exists.
  • The consumer's range now resolves to the new patch (npm view @qvac/<pkg>@'<range>' version).

Nuances & gotchas (all hit for real; do not relearn them)

  • PR-only changes to release-* — the ruleset blocks direct commits after branch creation. Land everything via PRs whose base is the release branch (helper branches are normal-named).
  • Cherry-pick the squash-merge SHA, not PR-branch commits.
  • gh run view --log truncates — use gh api …/actions/jobs/{id}/logs; sanity-check job duration vs timeout before believing a "hang". (See reference_gh_job_log_truncation.)
  • Merging into release-* auto-publishes (on-merge, trusted push) — the version bump is the point-of-no-return; keep version at base until then.
  • Back-port dist-tag goes to a maintenance tag, never clobbering latest.
  • create-tag 403/422 → create the tag manually (GITHUB_TOKEN can't; PAT/user can).
  • release-skill Step 1 latest-guard doesn't fit back-ports — verify against the maintenance tag.
  • No AI signatures / Co-Authored-By in commits or PRs.
  • Lint gate era — standard on older release lines, prettier on newer; run npm run lint.

Worked example — @qvac/llm-llamacpp 0.36.4 (QVAC-22472)

SDK 0.15 pinned ^0.36.3; the n_predict-inside-reasoning fix was only on main/0.37+.

  • Base: branch release-llm-0.36.3 = tag llamacpp-llm-v0.36.3 (84be415c, v0.36.3).
  • Source: PR #3318 squash 0d782b12c (the fix). PR #3327 (0.37.1 bump) NOT cherry-picked.
  • Cleanliness: all C++/unit files identical at base; only qwen3-5.test.js diverged → grafted the one new test block; blob-identity confirmed for the rest.
  • Branch release-llm-0.36.4 created from base (no changes) → PR #3337 (fix) → PR #3342 (0.36.4 bump).
  • Merge auto-published: run 29749326488; npm 0.36.4 under dist-tag release-0.36; latest stayed 0.38.0. create-tag failed 403/422 → tag llamacpp-llm-v0.36.4 created manually via SSH.

Error handling

  • Heavy cherry-pick conflicts across core source (not just tests) → the fix predates too much divergence; stop and port it manually or reconsider the base.
  • release-merge-guard fails on merge → version not bumped or CHANGELOG heading missing/mis-formatted.
  • Publish didn't run after merge → confirm the merge was a push to release-* and packages/<pkg>/** changed; check on-merge-<pkg>.yml runs.
  • Publish ran but latest moved to the patch → the dist-tag logic mis-fired; restore with npm dist-tag add @qvac/<pkg>@<real-latest> latest.

© tetherto, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in packages/ocr-ggml/.agent/skills/release-patch of tetherto/qvac.

Open the folder on GitHubat commit d92f697

Compare with similar skills

Release Patch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Release Patch compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Patch this skilltetherto/qvac674—~3kAutomated safety check: PassApache-2.0
Release DigestKiln-AI/Kiln5.2k—~2.7kAutomated safety check: PassCustom licence
Releaseddalcu/mlx-serve1.8k—~1.8kAutomated safety check: PassCustom licence
Skills Constitutionjiabaobei/skills-constitution231—~5.6kAutomated safety check: PassMIT
Phoenix Release NotesArize-ai/phoenix12k—~6.7kAutomated safety check: PassCustom licence
Skill ProvenanceLeoYeAI/openclaw-master-skills2.2k—~4.8kAutomated safety check: PassMIT

Similar skills

  • Release Digest

    Kiln-AI/Kiln

    Post a "what's changed since the last release" recap to the release Slack channel for final QA.

    5.2k GitHub stars~2.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Release

    ddalcu/mlx-serve

    mlx-serve pre-release validation checklist, CalVer versioning, release steps, and CHANGELOG style.

    1.8k GitHub stars~1.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Skills Constitution

    jiabaobei/skills-constitution

    当 Agent 接到专业任务(编码/爬虫/文件操作/API调用/数据分析/文档/部署/推送等)时,强制先查记忆层和技能索引,有匹配必用、无匹配必搜、答复时自动推荐(排除已装)。用于防止 Agent 跳过技能直接硬扛通用能力。跨平台通用(WorkBuddy/Claude/ChatGPT/Cursor/Gemini 等 20+ 框架)。完整版本史见 CHANGELOG.md。

    231 GitHub stars~5.6k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Phoenix Release Notes

    Arize-ai/phoenix

    Create Phoenix release documentation grounded in actual code changes.

    12k GitHub stars~6.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Skill Provenance

    LeoYeAI/openclaw-master-skills

    Version tracking for Agent Skills bundles and their associated files across sessions, surfaces, and platforms.

    2.2k GitHub stars~4.8k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Simple English

    moeru-ai/airi

    Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.

    50k GitHub starsUsed in 2 repos~4.6k tokens
    DevelopmentAuto-check passed

More from tetherto/qvac

All 50 skills in this repo
  • Creates a Solutions page in the QVAC documentation website from a real use case, generalizing the case into reusable guidance and registering the page in the site navigation.

    674 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Qv Docs Update

    tetherto/qvac

    Updates the docs website after a change to the SDK or CLI. An agent skill from tetherto/qvac.

    674 GitHub stars~11k tokensUpdated today
    Auto-check passed
  • Qv Agent Stack Sync

    tetherto/qvac

    Plan and prepare the QVAC agent-stack release cascade across @qvac/inference, @qvac/sdk, @qvac/cli, @qvac/ai-sdk-provider, @qvac/opencode-plugin, and @qvac/openclaw-plugin.

    674 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Run the deterministic code-quality audit, turn related findings into contextual remediation groups, prepare approval-gated Asana proposals, reconcile recurring runs, or configure twice-monthly…

    674 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Review C++ changes for string parameter and call-site efficiency conventions (std::stringview, std::string&&, const std::string&, const char, and TransparentStringMap lookup).

    674 GitHub stars~702 tokensUpdated today
    Auto-check passed
  • Qv Addon Changelog

    tetherto/qvac

    Generate changelog entries for a target add-on package. An agent skill from tetherto/qvac.

    674 GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Questions about Release Patch

What does Release Patch do?

Back-port fix(es) onto an existing release line and cut a patch release. Release Patch is an agent skill from tetherto/qvac. Back-port fix(es) onto an existing release line and cut a patch release.

When should I use Release Patch?

Release Patch fits situations like: patching a shipped version (e.g; tasks that involve Changelog and release notes.

How do I install Release Patch in Claude Code?

Run `npx skills add tetherto/qvac --skill release-patch -a claude-code`. Or copy the skill folder (packages/ocr-ggml/.agent/skills/release-patch in tetherto/qvac) into .claude/skills/release-patch in your project. Claude Code loads it when a task matches its description.

How do I install Release Patch in Codex?

Run `npx skills add tetherto/qvac --skill release-patch -a codex`. Or copy the skill folder (packages/ocr-ggml/.agent/skills/release-patch in tetherto/qvac) into .agents/skills/release-patch in your project. Codex loads it when a task matches its description.

Can I use Release Patch in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tetherto/qvac --skill release-patch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-patch, .gemini/skills/release-patch, .github/skills/release-patch and .opencode/skills/release-patch in your project.

What does Release Patch need to run?

Going by SKILL.md and its folder, Release Patch needs the command-line tools its instructions call (git, npm and gh) and credentials named GITHUB_TOKEN and PAT_TOKEN. Our summary lists: A credential in GITHUB_TOKEN; A credential in PAT_TOKEN.

Does Release Patch access the network?

SKILL.md contains no URLs. Its commands use git, npm and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Release Patch safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Release Patch use?

Release Patch is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Release Patch use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Release Patch?

Skills that share tags, products or a category with Release Patch: Release Digest (Kiln-AI/Kiln, 5.2k stars), Release (ddalcu/mlx-serve, 1.8k stars), Skills Constitution (jiabaobei/skills-constitution, 231 stars) and Phoenix Release Notes (Arize-ai/phoenix, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release Patch?

tetherto (a GitHub organization) maintains it in tetherto/qvac, which has 674 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on October 7, 2026.

Source: tetherto/qvac on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.