一键导入
ship-it
One-command post-merge close-out for an approved PR. Trigger on "ship it", "land this PR", "close out PR
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
One-command post-merge close-out for an approved PR. Trigger on "ship it", "land this PR", "close out PR
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when drafting release notes or a changelog for this marketplace — "draft the release notes", "what changed since the last release", "write the changelog", "generate the release-log entry". Mines squash-merged PR titles/bodies + linked issues between the last v-tag and HEAD and renders the docs/release-log.md entry plus a PR/release description, shaped to this repo's calendar-first release flow (ADR-001).
House conventions for reviewing a diff/PR and preparing a PR for merge in this repo. Use when the user says "prep this PR", "review this diff", "review this PR", "ready to merge?", "is this mergeable?", or before opening/landing a PR. Carries the repo-specific review checklist and PR-body shape; defers review *mechanics* to the built-in /code-review, /review, and /security-review commands.
Configure Cursor with the /build command from rpw-published. Use when setting up Cursor to use the build workflow, or when the user asks to add/configure the build command in Cursor.
Build and deploy Databricks Apps using the bash-over-REST starter template. Use when scaffolding, configuring, deploying, or iterating on Databricks Apps with Lakebase connectivity.
Define, deploy, run, and debug Databricks Jobs the house way — DABs-defined (never UI-created), profile-based auth only (no PATs), with CLI log reading for the local-repro debugging loop. Use when creating or editing a Databricks job, wiring a job into a Databricks Asset Bundle (`databricks.yml`), scheduling a notebook/Python/dbt task, running a job from the CLI, or debugging a failed job run (reading run output, task logs, or `run-now` results).
Create, configure, and query Databricks Model Serving endpoints, and route every in-code LLM call through Model Serving (the `ChatDatabricks` / Model-Serving-first convention) instead of a provider SDK. Use when creating or configuring a serving endpoint, querying an endpoint, choosing how Python code should call an LLM, wiring auth passthrough for a deployed agent, or debugging the ambiguous-host-profile crash (`Use --profile to specify which profile to use` / `401 Credential was not sent`).
| name | ship-it |
| description | One-command post-merge close-out for an approved PR. Trigger on "ship it", "land this PR", "close out PR |
code-review-and-pr stops at "ready to merge?". This skill is the tail after that: merge → confirm close → clean → version-check → clone refresh → plugin update → (optionally) publish. Steps 1–6 run autonomously for PRs whose base is the integration branch (production); step 7 runs only on explicit request.
code-review-and-pr.wave-supervisor). Never ship-it around an orchestrator.Input: a PR number (or infer the current branch's open PR via gh pr view --json number).
gh pr merge <N> --squash --delete-branch
GitHub's mergeability computation is eventually consistent: right after approval or a fresh push, the merge can fail with "Pull Request is not mergeable" even though nothing is wrong. That failure is usually transient:
gh pr view <N> --json mergeable,mergeStateStatus, retry. Up to 3 retries.mergeable: CONFLICTING is a real conflict — stop, report, don't loop.gh pr view <N> --json closingIssuesReferences,body
Closes #M linkage: gh issue view <M> --json state. If still open, close it with a comment linking the merged PR.Part of / Advances #M (multi-PR issue): the issue stays open — tick its completed checklist items instead. Do not close umbrella issues early.From the main clone (not inside the doomed worktree):
git worktree list # find the feature worktree, if any
git worktree remove <path> # --force only for disposable leftovers
git branch -D <branch> # if the local branch persists
git fetch --prune # remote branch was deleted by --delete-branch
Superset workspace deletion is owned by the superset-launch skill — hand off there rather than reimplementing.
Why: the per-PR auto-bump Action pushes its bump commit to the PR head branch asynchronously and can lose the race against gh pr merge --squash — the squash captures the pre-bump tree, the branch is deleted, and the plugin ships to production unbumped. Then claude plugin update reports "already at latest" and never delivers the fix to version-detecting consumers. This has happened for real (#198 shipped at the old version; #372 shipped unbumped at 2026.07.1203).
Detect — in the production clone after pulling the merge (for an older merge, substitute <merge-sha> for HEAD):
git diff --name-only HEAD^..HEAD -- plugins/ # which plugin dirs changed
git diff HEAD^..HEAD -- .claude-plugin/marketplace.json 'plugins/*/.claude-plugin/plugin.json'
If a plugin's files changed but its version fields did not → unbumped ship.
Repair (catch-up bump):
production HEAD.make version-bump — for a merge that isn't HEAD, pass MERGE_DIFF_RANGE=<merge-sha>^..<merge-sha>. The script detects the changed plugins and writes both marketplace.json and each plugin's plugin.json in sync (a repo test enforces they match).chore(<plugin>): version catch-up <old> -> <new>, push, open a PR to production, squash-merge it (a catch-up bump is routine → autonomous). Then re-run this step's detect on the catch-up merge to confirm green.If the bump landed inside the squash normally, report that and move on.
In each local production clone the user works from:
git pull --ff-only
--ff-only always — never introduce merge/rebase commits into a tracking clone during close-out. If it refuses, the clone has local divergence: report it, don't force.
claude plugin marketplace update rpw-agent-marketplace
claude plugin update rpw-published@rpw-agent-marketplace # repeat per affected plugin
name@marketplace identifier is required — a bare claude plugin update rpw-published fails to resolve.old → new). If it reports "already at latest" but step 4 said the version did bump, the marketplace cache didn't refresh — rerun the marketplace update first.Never part of the autonomous tail. Only when the user explicitly asks to publish:
make publish-public
This filters the tree per .public-publish.yml, pushes a publish-staging branch to the public mirror, runs the sensitive-content check locally (CI can't — IP ACL), and opens a PR against the mirror's default branch. Stop there. The human reviews the actual public diff and their merge IS the publish — never auto-merge the mirror PR. The PUBLIC_REPO_RELEASE_CONFIRM gate applies. Consider make release-notes / make tag-release alongside, per the release flow in AGENTS.md.
End with one tidy summary:
production @ <sha> (retries needed: n)Part of)old → new) / catch-up PR #X merged / no plugin files touched--ff-only)old → new — restart sessions to apply