원클릭으로
release
Use when the user wants to cut a release, ship a version, prepare for release, or invokes /release
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when the user wants to cut a release, ship a version, prepare for release, or invokes /release
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when the user wants to trigger an Xcode Cloud build for the current branch, kick off the "Deploy Flipcash" workflow, ship an ad-hoc / dogfood build, or push a branch build to a TestFlight group — anything short of a versioned release (for cutting a version, use /release instead).
Fetch latest protobuf definitions, regenerate Swift bindings, verify the build, summarize API changes, and scaffold new service stubs. Usage: /fetch-protos [core|payments] [both]
Daily Bugsnag triage ritual — surface the top open production issue, investigate with evidence, propose a fix direction, route through experts, write a lean review brief.
Build, install, and drive Flipcash on the iPhone 17 simulator to observe a change at its real surface — login deeplink, coordinate-scale gotchas, and chat/send flow routes included.
Write a reflection about a situation that got out of hand during this session
| name | release |
| description | Use when the user wants to cut a release, ship a version, prepare for release, or invokes /release |
| disable-model-invocation | true |
| argument-hint | ["major|minor|patch"] |
| allowed-tools | Bash(git log *), Bash(git checkout *), Bash(git tag *), Bash(git push *), Bash(git cherry-pick *), Bash(git add *), Bash(git commit *), Bash(xcodebuild *), Bash(gh *), Read, Edit, Agent, Grep |
Three-phase workflow. The release branch and tag push automatically so TestFlight can build a dogfooding candidate; the public GitHub release is only drafted after the user confirms on-device testing.
git status --porcelaingit describe --tags --match 'flipcash-*' --abbrev=0 HEAD 2>/dev/null || echo "no tags found"If the pre-flight working tree output is non-empty → STOP. Commit or stash first.
Derive the current released version from the pre-flight latest tag (strip the flipcash- prefix). Do not infer the version from MARKETING_VERSION — it is the version under development, not the version released.
Determine bump type from $ARGUMENTS (default: minor):
| Argument | Bump | Example |
|---|---|---|
major | X+1.0.0 | 2.3.1 → 3.0.0 |
minor (default) | X.Y+1.0 | 2.3.1 → 2.4.0 |
patch | X.Y.Z+1 | 2.3.1 → 2.3.2 |
Confirm with user: "Bumping {type}: flipcash-{current} → flipcash-{next} — correct?"
Skip for patch — patch bumps the version on the release branch in step 4b.
The bump must already be merged into origin/main before cutting the release. A complete bump flips every app-family line from {current-version} to {next-version}, so check both counts:
git fetch origin main
git show origin/main:Code.xcodeproj/project.pbxproj | grep -c "MARKETING_VERSION = {next-version};"
git show origin/main:Code.xcodeproj/project.pbxproj | grep -c "MARKETING_VERSION = {current-version};"
{next-version} count is non-zero and {current-version} count is 0: the bump flipped every line — proceed. (The absolute number doesn't matter; it grows whenever app targets are added.)replace_all on chore/bump-version-{next-version}, merge, then re-run.{next-version} count is 0: STOP. Check whether a chore/bump-version-{next-version} PR is already open (the previous /release run should have auto-prepped one in step 9a). If yes, tell the user: "Merge chore/bump-version-{next-version} and re-run /release {bump}." If no PR exists, tell the user to open one — MARKETING_VERSION = {current-version}; → MARKETING_VERSION = {next-version}; with replace_all — merge it, then re-run. Do not commit the bump locally to main from inside this skill.origin/main. Show the pre-flight latest tag to user. If it picks up a legacy tag, ask for the correct base.release/flipcash-X.Y.Z branch (the release being patched). Checkout that branch before proceeding:
git checkout release/flipcash-{current-version}
Show commits on main that aren't on the release branch yet:
git log release/flipcash-{current-version}..main --oneline --no-merges
Ask the user which SHAs to pick (oldest first). Then:
git cherry-pick <sha> <sha> ...
If a cherry-pick conflicts, STOP and hand off to the user — do not resolve conflicts autonomously.
Skip this step if the user says there are no commits to pick (rare — usually means the branch already has them applied manually).
The release branch's Code.xcodeproj/project.pbxproj is still pinned at {current-version}. The binary produced from this branch needs the patched version or TestFlight/App Store will reject it as a duplicate. Use the Edit tool with replace_all: true:
MARKETING_VERSION = {current-version};MARKETING_VERSION = {next-version};The Flipcash app and its extension targets share one MARKETING_VERSION (extension versions must match the host app), while unrelated targets are pinned at other values — so replace_all hits exactly the app-family lines.
Then commit:
git add Code.xcodeproj/project.pbxproj
git commit -m "chore: bump version to {next-version}"
git log {base-tag}..HEAD --format="- %s" --no-merges
For patch releases, {base-tag} is flipcash-{current-version} (the tag on the branch being patched).
Display for sanity check.
xcodebuild test -scheme Flipcash \
-destination 'platform=iOS Simulator,name=iPhone 17' \
-testPlan AllTargets
The AllTargets test plan already includes UI tests. Do NOT run UI tests separately.
Any failure → STOP.
Use the Agent tool with model: "haiku". Pass the commit list with this prompt:
Given these git commits (conventional commit format), write user-facing release notes.
- Group under: ## New, ## Improved, ## Fixed (omit empty sections)
- Write for end users — no jargon, file names, or internals
- One short sentence per item
- If no user-facing changes, output: Bug fixes and performance improvements.
- Output ONLY markdown
Show to user for approval.
For major / minor: step 3 already verified the bump is on origin/main. Pull main locally, then branch:
git checkout main && git pull --ff-only
git checkout -b release/flipcash-{next-version}
For patch: already on release/flipcash-X.Y.Z from step 4; the version bump commit from step 4b is already on the branch. Skip branch creation.
Then tag:
git tag flipcash-{next-version}
git push -u origin release/flipcash-{version}
git push origin flipcash-{version}
The tag push kicks off the TestFlight build.
Skip for patch — patches don't change main's MARKETING_VERSION.
Compute {next-minor} = the next minor after the version being shipped (e.g. shipping 1.10.0 → 1.11.0; shipping 2.0.0 → 2.1.0).
Check first — if a chore/bump-version-{next-minor} PR or branch already exists, skip silently.
Otherwise, from main:
git checkout main && git pull --ff-only
git checkout -b chore/bump-version-{next-minor}
Edit Code.xcodeproj/project.pbxproj with replace_all: true: MARKETING_VERSION = {version}; → MARKETING_VERSION = {next-minor}; (the app and its extensions share the version and flip together — afterwards no MARKETING_VERSION = {version}; lines should remain).
git add Code.xcodeproj/project.pbxproj
git commit -m "chore: bump version to {next-minor}"
git push -u origin chore/bump-version-{next-minor}
gh pr create --base main --title "chore: bump version to {next-minor}" --body "<one-line body>"
The PR sits open for the user to merge whenever — it's a precondition the next /release will need.
Do NOT draft the GitHub release until the user explicitly confirms on-device testing.
Branch and tag pushed — TestFlight build should be on its way.
Public GitHub release not yet drafted.
Please verify on the TestFlight build:
□ Claim a Cash Link on an empty account
□ Buy a currency with Phantom
□ Scan & Send between 2 devices
□ Expand a chat notification — the rich transcript renders + Reply works
Tell me when you're ready to draft the public release.
After user confirms:
Always create the release as a draft. Publish it manually from the GitHub UI once the App Store rollout is live — publishing fires webhooks and "Latest release" badges, so it should reflect what's actually available to users.
gh release create flipcash-{version} --draft --title "Flipcash {version}" --notes "{changelog}"
Remind the user at the end: "Release drafted. Promote it in the GitHub UI once the App Store rollout is live."
MARKETING_VERSION on the release branch (step 4b) — TestFlight rejects duplicate build versionsmain, merged by the user from a prior /release's step-9a PR (or opened manually); auto-prepping the next version's bump PR in step 9a is the new normalmain whose origin/main already has the merged bump