symphony-land
Squash-merge the issue's PR once it's approved and green. Use only when the issue is in the `Merging` state — Symphony's status router gates entry.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Squash-merge the issue's PR once it's approved and green. Use only when the issue is in the `Merging` state — Symphony's status router gates entry.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Sync the current branch with origin/main via merge (not rebase) and resolve any conflicts. Use whenever Symphony's workflow says "merge origin/main into the branch" — at Step 1 setup, before push, and as part of the Land procedure.
Push the current branch to origin and ensure a PR exists for it (creating or updating one), with the symphony label applied. Use when the workflow says "push" or "open a PR".
Sync the current branch with origin/main via merge (not rebase) and resolve any conflicts. Use whenever Symphony's workflow says "merge origin/main into the branch" — at Step 1 setup, before push, and as part of the Land procedure.
Push the current branch to origin and ensure a PR exists for it (creating or updating one), with the symphony label applied. Use when the workflow says "push" or "open a PR".
Create a well-formed git commit from the current changes. Use when finalizing staged work, preparing a commit message, or splitting in-progress work into reviewable history.
Sweep the PR for actionable reviewer feedback (top-level comments, inline review comments, review states) and resolve every item before moving to In Review. Use after every push that might have triggered review, and as the gate before transitioning the issue to In Review.
| name | symphony-land |
| description | Squash-merge the issue's PR once it's approved and green. Use only when the issue is in the `Merging` state — Symphony's status router gates entry. |
Merging.gh auth status succeeds, and plain git push has credentials for the repo host.
If relying on GitHub CLI for HTTPS git credentials, run gh auth setup-git first
(gh auth setup-git --hostname <host> for a non-default host). GITHUB_TOKEN/GH_TOKEN
alone can authenticate gh pr ... commands but is not enough for the symphony-push
step's git push -u origin HEAD.OPEN (not CLOSED/MERGED).If the PR is already MERGED when entering this skill, skip the merge: record the merge SHA in the workpad and move the issue to Done.
gh pr view --json number,state,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup
Required: state=OPEN, reviewDecision=APPROVED (or no required reviewers).symphony-pull skill to merge origin/main. Conflicts must be resolved in code; never leave a DIRTY/CONFLICTING PR. Re-run validation after the merge.symphony-push skill.gh pr merge --auto — it only blocks on checks that branch protection marks as required, and many repos either configure no required checks or only a subset. Poll gh pr checks explicitly so the gate works the same whether the repo enforces checks at the GitHub level or not — every 30s, up to 30 minutes, before merging:
for _ in $(seq 1 60); do
gh pr checks
rc=$?
case "$rc" in
0) break ;; # all checks passed
8) sleep 30 ;; # checks still pending — keep waiting
*) echo "PR checks failed (exit $rc)" >&2; exit 1 ;;
esac
done
[ "$rc" -eq 0 ] || { echo "Timed out waiting for checks" >&2; exit 1; }
gh pr checks exits 0 only when every check passed; 8 while any are pending; non-zero/non-8 if any failed. A failure or timeout falls into the failure-mode handler below: record the cause and move the issue to Rework.gh pr merge --squash
gh pr merge returning success does not guarantee the PR is merged — if the repo has a merge queue (or any auto-merge path kicks in), the command can return after enqueueing and the PR will still be OPEN while the queue runs. Verify in step 6 before continuing.MERGED state — every 15s, up to 30 minutes:
for _ in $(seq 1 120); do
state=$(gh pr view --json state -q .state)
case "$state" in
MERGED) break ;;
OPEN) sleep 15 ;;
*) echo "PR ended in unexpected state: $state" >&2; exit 1 ;;
esac
done
[ "$state" = "MERGED" ] || { echo "Timed out waiting for MERGED" >&2; exit 1; }
A CLOSED (without MERGED) state or a timeout falls into the failure-mode handler below.state=MERGED):
gh pr view --json mergeCommit -q .mergeCommit.oid
### Notes and move the issue to Done.If any of the following hit, record the cause in the workpad and move the issue to Rework with a brief blocker note:
gh pr checks wait loop times out (still pending after 30 min).gh pr merge --squash keeps failing (e.g., mergeStateStatus flips to BLOCKED/DIRTY, or the PR transitions to CLOSED without MERGED).state=MERGED wait loop times out, or the PR ends in CLOSED without MERGED (e.g., merge queue rejected it).Do not force-push, reset, or close-and-reopen the PR to escape the failure.