本文へ移動
cccskills
無料GitHub で公開

merge-release-to-dev

Merge the current release branch forward into `dev` and push `dev`, so fixes committed straight to `release/vX.Y` reach `dev` and the issues their `Closes #N` lines name get closed. Use when the user says "merge release into dev", "merge the release forward", "bring my release fixes to dev", "are my release fixes on dev?", "/merge-release-to-dev", or right after a release fix lands on `release/*`. `--dry-run` only reports what is missing.

日本語の概要は準備中です。原文の説明を表示しています。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

/merge-release-to-dev — Merge the release branch forward

Nothing merges release/* into dev automatically. The team does it by hand, pushing a Merge release/vX.Y into dev commit straight to dev — no pull request. /cherry-pick-to-release does it as its last step, but only when it picked something, so a fix committed directly to the release branch waits for whoever merges next. Until then it is not on dev, and a Closes #N in its message closes nothing: GitHub acts on closing keywords only when the commit reaches the default branch, dev.

Arguments

  • none — merge and push.
  • --dry-run — steps 1–2 only: report what dev is missing and stop.

Invoking this skill is the permission to push dev

The standing rule is never to push unless the user asked in that message. Running this skill is that ask: merge and push without re-confirming. It never pushes the release branch (that triggers a release build) and never force-pushes.

Reuse

  • Release branch discovery is /cherry-pick-to-release step 2 (.claude/commands/cherry-pick-to-release.md): the highest origin/release/v*, sanity-checked against version.json.
  • The version.json conflict rule is the one /cherry-pick-to-release step 7 and /prepare-release use: keep dev's side.

Steps

1. Find the release branch

git fetch origin --prune
git branch -r --format='%(refname:short)' \
  | grep -E '^origin/release/v[0-9]+(\.[0-9]+)?$' \
  | sed 's#^origin/release/v##' | sort -V | tail -1

That X.Y gives release/vX.Y. Work from origin/release/vX.Y and origin/dev, never from the local branches: the local dev may be stale or checked out in another worktree.

If a local release/vX.Y exists and is ahead of origin, those commits would be left out:

git rev-parse -q --verify refs/heads/release/vX.Y \
  && git rev-list --count origin/release/vX.Y..release/vX.Y

A count above 0 means unpushed commits. Show them and ask via AskUserQuestion: Merge origin only or Stop (the user pushes them first — pushing the release branch is not this skill's call).

2. List what dev is missing

git log --no-merges --reverse --format='%h%x09%an%x09%ad%x09%s' --date=format:'%m-%d %H:%M' \
  origin/dev..origin/release/vX.Y

Empty → say dev already has everything on release/vX.Y and stop.

Otherwise print a table, oldest first, with a Kind column:

  • copy — the body has (cherry picked from commit <sha>): the original is already on dev, and the merge only records it.
  • new — no trailer: committed straight to the release branch. These are the ones that reach dev for the first time.

Then list the issues the merge will close:

git log --format=%B origin/dev..origin/release/vX.Y \
  | grep -oiE "^(close[sd]?|fix(e[sd])?|resolve[sd]?) #[0-9]+" | grep -oE '[0-9]+' | sort -u

Commits by other people go too — a merge forward takes the whole branch. Say whose they are; that is expected, not a reason to stop.

--dry-run stops here.

3. Merge in a temporary worktree

The merge happens in a throwaway worktree on a detached origin/dev, so the current checkout — its branch, its uncommitted changes — is never touched, and nothing needs a clean tree or a stash. Put it in the scratchpad (or tmp/):

W=<scratchpad>/merge-release
git worktree add --detach "$W" origin/dev
git -C "$W" merge --no-ff origin/release/vX.Y -m "Merge release/vX.Y into dev"

A version.json conflict (release has X.Y, dev the next -alpha) — keep dev's side:

git -C "$W" checkout --ours version.json && git -C "$W" add version.json
git -C "$W" commit --no-edit

Any other conflict: capture git -C "$W" diff --name-only --diff-filter=U, then git -C "$W" merge --abort, remove the worktree (step 5), show the files and ask. Don't resolve content conflicts on a guess.

4. Push

git -C "$W" push origin HEAD:dev

Rejected as non-fast-forward → someone pushed dev meanwhile. Redo from a fresh base once — the merge commit lives only on the worktree's detached HEAD, so nothing is lost:

git -C "$W" fetch origin dev
git -C "$W" switch --detach origin/dev
git -C "$W" merge --no-ff origin/release/vX.Y -m "Merge release/vX.Y into dev"
git -C "$W" push origin HEAD:dev

Rejected again → stop and report. Never --force.

5. Clean up

git worktree remove "$W"
git fetch origin dev:dev 2>/dev/null || true

The second line fast-forwards a local dev when it can; it refuses, harmlessly, when dev is the current branch, is checked out elsewhere or has local commits.

6. Report

Merged release/v2.22 into dev (a1b2c3d4e5, clean) and pushed dev:

  new   f173c72546  Frol  fix(ios): turn CallKit off on the China storefront
  new   d327a910a9  Frol  fix(ios-share): move the share extension to the app's RPC endpoint

Issues closed by the merge: #5520 (closed).

For each issue from step 2, check gh issue view <N> --json state --jq .state. GitHub closes it within seconds of the push. Still OPEN → say so, and note that it may need a manual close if the keyword was malformed. If you stopped early, say where and what state the repo is in.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

Delete the `-bak` backup branches that `/prepare-merge` leaves behind, local and on origin, once the work they back up has merged. Use when the user says "remove my bak branches", "clean up bak branches", "delete the backups", or "/clean-bak-branches".

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

create-pr

無料

Use when work on a branch is finished and the next step is a pull request — "create a PR", "open a PR", "push and PR this", "/create-pr" — when a draft PR should be marked ready for review — "mark the PR ready", "undraft it", "it's ready for review" — or right after either has happened and the team has not been told about it yet.

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

Design a new UI icon in Voxt's style as an SVG and add it to the icon font. Use whenever a new icon is needed and no existing glyph fits — "create an icon", "make an icon for X", "draw an icon", "design an icon", "we need an icon for …", "add an icon", "there is no icon for …", a request for an SVG glyph, or when a feature needs `<i class="icon-…">` and `src/nodejs/icons/` has nothing suitable. Covers matching the existing line width and contoured (not solid) style, the Figma "UI Icons" reference, and regenerating the font. Do not use it to pick an existing icon, or for multi-color art (that is a `.lit.ts` SVG component, see docs/ui/components.md).

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

Search Google Cloud (GKE) server logs of the DEV environment (dev.voxt.ai). Use when troubleshooting anything that needs the server side of the story — stream stalls, RPC peer changes / reconnects, watchdog closures, mesh/node churn, pod restarts — or when the user says "check GCP logs", "check server logs on dev", or gives a dev.voxt.ai timeline from a client console log.

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

Search Google Cloud (GKE) server logs of the PROD environment. Use when troubleshooting a production incident that needs the server side of the story — stream stalls, RPC peer changes / reconnects, watchdog closures, mesh/node churn, pod restarts — or when the user says "check PROD logs", "check production server logs", or gives a production timeline from a client console log.

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

memories

無料

What this project has already learned the hard way, and where any new such fact belongs. Two jobs. (1) Routing: this project keeps NO per-project Claude memories — read this before writing anything down, and pick a durable home from the list here. (2) An index, by area, of non-obvious facts worth knowing before you guess: debugging rigs and measurements that lie, iOS/WebKit and the tethered iPhone, the Windows app, production and deployment, and general codebase traps. Use before setting up a browser- or server-driven debugging session, when a bug reproduces only on iPhone, in Safari or in the Windows app, before changing deployment configuration or reading store/crash data, when something behaves unexpectedly and you are about to guess why, and whenever you are tempted to record a fact for later.

日本語の概要は準備中です。原文の説明を表示しています。

Actual-Chat/actual-chat572026年10月23日 更新

Actual-Chat のスキルをすべて見る

このスキルの問題を報告する