Ship Now
Use this only after the user explicitly requests the fast admin-merge path.
It is an intentional exception to /ship's remote-CI wait and ten-minute
merge soak: local pnpm prep:urgent, or targeted recovery of its failed lanes, is the
pre-merge validation gate. The user has authorized --admin merging once
feedback is handled. Remote CI, release, and beta deploy results are monitored
after merge, not waited on before the admin merge.
Deployment split
Merges to main trigger .github/workflows/deploy-beta-sites-prebuilt.yml,
which builds in GitHub Actions and uploads prebuilt artifacts to the independent
Netlify beta sites at beta.*.agent-native.com. Netlify Git-connected
auto-builds are disabled, so do not wait for Netlify build queues or
deploy-preview checks; verify the Actions run and its per-site smoke checks.
Production promotion is manual for other production sites. The public docs
site is the temporary exception: matching main changes trigger
.github/workflows/deploy-docs-production.yml, which publishes
www.agent-native.com directly and disables its Git-connected Netlify builds.
/ship-now monitors beta, docs production, and any release tail after the
fast merge; it does not imply that other production sites were promoted. If a
critical fix needs another production site, explicitly run the manual
promotion and monitor that result separately.
Use .github/workflows/deploy-production-sites-prebuilt.yml or the targeted
promote-netlify-deploy.yml workflow to promote a critical fix and let it
manage Netlify lock transitions. Do not manually remove or clear a Netlify lock
as a deployment step; clearing one is not the production promotion.
Fast-path contract
/ship-now publishes the complete nonignored current-branch snapshot. Use
corepack pnpm ship:push for every checkpoint; it excludes
learnings.md, bridge/**, and data/**.
The fast gate is local pnpm prep:urgent, or the narrowest successful recovery check
for each failed prep lane. Once that gate and review resolution pass, admin
merge immediately. Do not wait for a full prep rerun, remote CI, release or
beta deploy checks, or the normal /ship soak; monitor those after the merge.
A worktree is a valid publishing checkout. When /ship-now is authorized from
a worktree, keep validation, commit, push, PR lookup, and admin merge in that
worktree's current branch and cwd. Do not copy changes into the shared
checkout, and update the existing PR rather than creating a second one.
Workflow
Inspect the current branch before writing or moving it:
git status --short
git log --oneline -5
git branch --show-current
gh pr list --head "$(git branch --show-current)" --state open --json number,title,url
Stay on the current branch until its PR is merged. Do not reset, rebase,
force-push, clean, or silently discard local work. Record the current status
as the branch snapshot.
Resolve review state before merging. Read every current human and bot
review summary and every top-level inline comment across all pages. Fix
real issues on the current branch and reply to each addressed or declined
comment. Recheck reply coverage after every push; a new bot review is a new
round. Do not merge with unaddressed feedback.
Run the local gate:
pnpm prep:urgent
prep:urgent uses --kill-others-on-fail; a lane killed because a sibling
failed is unknown, never green. Treat a non-zero, skipped, killed, or inconclusive prep result as a failure
to classify, not as a reason to repeat the entire suite automatically. Fix
the root cause and rerun the narrowest meaningful check for the failed lane:
- a package typecheck failure: that package's typecheck, for example
pnpm --filter @agent-native/desktop-app typecheck;
- a test failure: the specific Vitest file or test command;
- a guard failure: the named guard command;
- formatting:
pnpm exec oxfmt --check <changed-files>.
Keep only lanes that conclusively reported success, and rerun any lane whose
result is unknown alongside the failure. Run a full pnpm prep:urgent again only
when the fix crosses several validation boundaries or the failure cannot be
isolated. For a file-scoped type failure, a green
package typecheck is the recovery gate; for a test failure, a green targeted
test is the recovery gate. Once the targeted recovery is green and no lane
is left unknown, continue to the branch-wide push - do not wait for a
redundant full prep rerun. Record that prep recovered through targeted
checks - do not claim the entire pnpm prep:urgent command itself exited 0 when it
did not, and do not report an unknown lane as one that passed.
Preserve exact unrelated check or environment failures rather than
calling them green.
Publish the complete current-branch snapshot immediately after the local
gate passes:
corepack pnpm ship:push
Verify the push landed on the current branch and update the existing ready
PR. Do not create a second PR. Recheck the PR's mergeability and current
review comment reply coverage after the push.
Admin-merge immediately when the explicit fast-path gates are true:
- local
pnpm prep:urgent passed, or every failed and unknown prep lane was fixed
or rerun and its narrow recovery check passed as described above;
- all nonignored local changes are pushed, with only the routine exclusions
remaining;
- every review item has a fix or an explicit reply;
- the PR is not conflicting; and
- the user has explicitly authorized this
/ship-now invocation.
Use the current PR number and no force push:
gh pr merge <number> --squash --admin
Do not wait for remote CI, release checks, or the normal /ship soak, and
do not pretend that a queued merge is complete. Read the merge result,
fetch origin/main, and verify the merge commit is present before rotating
branches.
- Run
/new-branch after the merge lands. Follow its activation guard,
origin/main freshness check, stash gate, branch naming, conflict handling,
and post-flight stash report exactly.
Monitor the merged PR and release tail after rotation. Check the merged PR's
merge commit, all workflows attached to that commit, beta deployment status,
and package publication when applicable. Keep configured, source-tested,
built-runtime, deployed, and observed-live claims separate. A merge is not
proof that beta is healthy, and beta is not proof that production was
manually promoted. Include production only when that manual promotion was
explicitly started. Re-read the merged PR for new review or bot feedback;
fix actionable post-merge feedback on the fresh branch and invoke /ship
for the follow-up.
If a post-merge CI, beta deploy, package-publish, release, or explicitly
promoted production issue appears:
- reproduce or read the failing artifact;
- fix it on the fresh branch, never on the merged branch;
- run the smallest meaningful local check, then
pnpm prep when the change
warrants it;
- invoke
/ship for the follow-up so its normal review, merge, and
post-release gates apply.
If no post-merge issue appears, report the PR, merge commit, fresh branch,
release checks, and the monitoring window honestly.
Safety rules
- Never expose environment values, tokens, cookies, or private payloads in
commits, PR text, logs, prompts, or status reports.
- Publish all nonignored local paths through
corepack pnpm ship:push.
- Never silently skip a review comment, CI failure, package release failure,
or production deploy failure.
- Never treat a Netlify lock as the production promotion mechanism or remove it
manually to force a promotion.
- Never create a fresh branch before verifying that
origin/main contains the
merge commit.
- Never claim the fast path is complete from a successful merge command alone;
verify the merge, branch rotation, and post-merge release state.
Related skills
/ship for the normal guarded ship flow and follow-up fixes.
/ship-and-monitor for the normal guarded ship flow plus this post-merge
monitoring behavior without the fast admin-merge exception.
/babysit-pr for review/comment/CI coverage before a merge when the user did
not explicitly choose this fast path.
/new-branch for the only permitted branch-rotation procedure.
1---2name: ship-now3description: Fast-path the current branch through local `pnpm prep:urgent`, targeted recovery, feedback resolution, whole-branch push, immediate admin merge, and fresh-branch rotation. Use when the user explicitly wants to merge immediately after local prep recovery, then monitor beta, docs production, and release workflows. GitHub Actions auto-deploys beta and the docs site through the prebuilt publisher; other production promotion is manual.4---56# Ship Now78Use this only after the user explicitly requests the fast admin-merge path.9It is an intentional exception to `/ship`'s remote-CI wait and ten-minute10merge soak: local `pnpm prep:urgent`, or targeted recovery of its failed lanes, is the11pre-merge validation gate. The user has authorized `--admin` merging once12feedback is handled. Remote CI, release, and beta deploy results are monitored13after merge, not waited on before the admin merge.1415## Deployment split1617Merges to `main` trigger `.github/workflows/deploy-beta-sites-prebuilt.yml`,18which builds in GitHub Actions and uploads prebuilt artifacts to the independent19Netlify beta sites at `beta.*.agent-native.com`. Netlify Git-connected20auto-builds are disabled, so do not wait for Netlify build queues or21deploy-preview checks; verify the Actions run and its per-site smoke checks.22Production promotion is manual for other production sites. The public docs23site is the temporary exception: matching `main` changes trigger24`.github/workflows/deploy-docs-production.yml`, which publishes25`www.agent-native.com` directly and disables its Git-connected Netlify builds.26`/ship-now` monitors beta, docs production, and any release tail after the27fast merge; it does not imply that other production sites were promoted. If a28critical fix needs another production site, explicitly run the manual29promotion and monitor that result separately.3031Use `.github/workflows/deploy-production-sites-prebuilt.yml` or the targeted32`promote-netlify-deploy.yml` workflow to promote a critical fix and let it33manage Netlify lock transitions. Do not manually remove or clear a Netlify lock34as a deployment step; clearing one is not the production promotion.3536## Fast-path contract3738`/ship-now` publishes the complete nonignored current-branch snapshot. Use39`corepack pnpm ship:push` for every checkpoint; it excludes40`learnings.md`, `bridge/**`, and `data/**`.4142The fast gate is local `pnpm prep:urgent`, or the narrowest successful recovery check43for each failed prep lane. Once that gate and review resolution pass, admin44merge immediately. Do not wait for a full prep rerun, remote CI, release or45beta deploy checks, or the normal `/ship` soak; monitor those after the merge.4647A worktree is a valid publishing checkout. When `/ship-now` is authorized from48a worktree, keep validation, commit, push, PR lookup, and admin merge in that49worktree's current branch and cwd. Do not copy changes into the shared50checkout, and update the existing PR rather than creating a second one.5152## Workflow53541. Inspect the current branch before writing or moving it:5556 ```bash57 git status --short58 git log --oneline -559 git branch --show-current60 gh pr list --head "$(git branch --show-current)" --state open --json number,title,url61 ```6263 Stay on the current branch until its PR is merged. Do not reset, rebase,64 force-push, clean, or silently discard local work. Record the current status65 as the branch snapshot.66672. Resolve review state before merging. Read every current human and bot68 review summary and every top-level inline comment across all pages. Fix69 real issues on the current branch and reply to each addressed or declined70 comment. Recheck reply coverage after every push; a new bot review is a new71 round. Do not merge with unaddressed feedback.72733. Run the local gate:7475 ```bash76 pnpm prep:urgent77 ```7879 `prep:urgent` uses `--kill-others-on-fail`; a lane killed because a sibling80 failed is unknown, never green. Treat a non-zero, skipped, killed, or inconclusive prep result as a failure81 to classify, not as a reason to repeat the entire suite automatically. Fix82 the root cause and rerun the narrowest meaningful check for the failed lane:8384 - a package typecheck failure: that package's typecheck, for example85 `pnpm --filter @agent-native/desktop-app typecheck`;86 - a test failure: the specific Vitest file or test command;87 - a guard failure: the named guard command;88 - formatting: `pnpm exec oxfmt --check <changed-files>`.8990 Keep only lanes that conclusively reported success, and rerun any lane whose91 result is unknown alongside the failure. Run a full `pnpm prep:urgent` again only92 when the fix crosses several validation boundaries or the failure cannot be93 isolated. For a file-scoped type failure, a green94 package typecheck is the recovery gate; for a test failure, a green targeted95 test is the recovery gate. Once the targeted recovery is green and no lane96 is left unknown, continue to the branch-wide push - do not wait for a97 redundant full prep rerun. Record that prep recovered through targeted98 checks - do not claim the entire `pnpm prep:urgent` command itself exited 0 when it99 did not, and do not report an unknown lane as one that passed.100 Preserve exact unrelated check or environment failures rather than101 calling them green.1021034. Publish the complete current-branch snapshot immediately after the local104 gate passes:105106 ```bash107 corepack pnpm ship:push108 ```109110 Verify the push landed on the current branch and update the existing ready111 PR. Do not create a second PR. Recheck the PR's mergeability and current112 review comment reply coverage after the push.1131145. Admin-merge immediately when the explicit fast-path gates are true:115116 - local `pnpm prep:urgent` passed, or every failed and unknown prep lane was fixed117 or rerun and its narrow recovery check passed as described above;118 - all nonignored local changes are pushed, with only the routine exclusions119 remaining;120 - every review item has a fix or an explicit reply;121 - the PR is not conflicting; and122 - the user has explicitly authorized this `/ship-now` invocation.123124 Use the current PR number and no force push:125126 ```bash127 gh pr merge <number> --squash --admin128 ```129130 Do not wait for remote CI, release checks, or the normal `/ship` soak, and131 do not pretend that a queued merge is complete. Read the merge result,132 fetch `origin/main`, and verify the merge commit is present before rotating133 branches.134135 6. Run `/new-branch` after the merge lands. Follow its activation guard,136 origin/main freshness check, stash gate, branch naming, conflict handling,137 and post-flight stash report exactly.1381397. Monitor the merged PR and release tail after rotation. Check the merged PR's140 merge commit, all workflows attached to that commit, beta deployment status,141 and package publication when applicable. Keep configured, source-tested,142 built-runtime, deployed, and observed-live claims separate. A merge is not143 proof that beta is healthy, and beta is not proof that production was144 manually promoted. Include production only when that manual promotion was145 explicitly started. Re-read the merged PR for new review or bot feedback;146 fix actionable post-merge feedback on the fresh branch and invoke `/ship`147 for the follow-up.1481498. If a post-merge CI, beta deploy, package-publish, release, or explicitly150 promoted production issue appears:151152 - reproduce or read the failing artifact;153 - fix it on the fresh branch, never on the merged branch;154 - run the smallest meaningful local check, then `pnpm prep` when the change155 warrants it;156 - invoke `/ship` for the follow-up so its normal review, merge, and157 post-release gates apply.158159 If no post-merge issue appears, report the PR, merge commit, fresh branch,160 release checks, and the monitoring window honestly.161162## Safety rules163164- Never expose environment values, tokens, cookies, or private payloads in165 commits, PR text, logs, prompts, or status reports.166- Publish all nonignored local paths through `corepack pnpm ship:push`.167- Never silently skip a review comment, CI failure, package release failure,168 or production deploy failure.169- Never treat a Netlify lock as the production promotion mechanism or remove it170 manually to force a promotion.171- Never create a fresh branch before verifying that `origin/main` contains the172 merge commit.173- Never claim the fast path is complete from a successful merge command alone;174 verify the merge, branch rotation, and post-merge release state.175176## Related skills177178- `/ship` for the normal guarded ship flow and follow-up fixes.179- `/ship-and-monitor` for the normal guarded ship flow plus this post-merge180 monitoring behavior without the fast admin-merge exception.181- `/babysit-pr` for review/comment/CI coverage before a merge when the user did182 not explicitly choose this fast path.183- `/new-branch` for the only permitted branch-rotation procedure.