بنقرة واحدة
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