diff --git a/land-and-deploy/SKILL.md.tmpl b/land-and-deploy/SKILL.md.tmpl
index f276a8c4d..c54eb2b18 100644
--- a/land-and-deploy/SKILL.md.tmpl
+++ b/land-and-deploy/SKILL.md.tmpl
@@ -495,7 +495,7 @@ Recheck read-only evidence; never redo a merge/deploy because a section was miss
- Never force-push, bypass CI, replay a confirmed merge, or hide missing evidence.
- Auto-detect facts; ask when unknown or when an explicit approval gate applies.
-- Poll at 30-second intervals with the stated deadlines and progress messages.
+- Poll at each step's stated interval and deadline (4-minute CI rounds in Step 3; 30 seconds for merge readback and deploy status), with its progress messages.
- After merge failures, offer approved rollback when appropriate; never revert a rollback automatically.
- Verify once; `/canary` provides extended monitoring. Rechecks require the user's choice.
- Use `--delete-branch`; reconcile failed cleanup non-destructively with confirmation.
diff --git a/land-and-deploy/sections/readiness-gate.md.tmpl b/land-and-deploy/sections/readiness-gate.md.tmpl
index dbd7f6fd8..5e84af651 100644
--- a/land-and-deploy/sections/readiness-gate.md.tmpl
+++ b/land-and-deploy/sections/readiness-gate.md.tmpl
@@ -79,8 +79,8 @@ Read the review checklist:
```bash
cat ~/.claude/skills/gstack/review/checklist.md 2>/dev/null || echo "Checklist not found"
```
-Apply each checklist item to the current diff. This is the same quick review that `/ship`
-runs in its Step 3.5. Auto-fix trivial issues (whitespace, imports). For critical findings
+Apply each checklist item to the current diff. This is the same checklist `/ship`
+applies in its Step 9 review. Auto-fix trivial issues (whitespace, imports). For critical findings
(SQL safety, race conditions, security), ask the user.
**If any code changes are made during the quick review:** Commit the fixes, then **STOP**.
diff --git a/landing-report/SKILL.md.tmpl b/landing-report/SKILL.md.tmpl
index 59f7776d5..1efc4da17 100644
--- a/landing-report/SKILL.md.tmpl
+++ b/landing-report/SKILL.md.tmpl
@@ -38,7 +38,7 @@ Think of it as `gh pr list` for VERSION numbers.
## Step 1: Detect platform and base branch
-Same detection as other gstack skills.
+Use the current PR's base branch, else the repository's default branch, else `main`.
```bash
BASE_BRANCH=$(gh pr view --json baseRefName -q .baseRefName 2>/dev/null || \
@@ -63,8 +63,8 @@ echo "branch HEAD VERSION: $CURRENT_VERSION"
## Step 3: Query the queue
-Call the util three times — once for each bump level — so the user sees what
-they'd claim for micro/patch/minor/major. Cheap (same gh call cached by bun).
+Call the util once per bump level (micro, patch, minor, major) so the user sees
+what each level would claim.
```bash
for LEVEL in micro patch minor major; do
diff --git a/review/TODOS-format.md b/review/TODOS-format.md
index eb2f4d941..073e3b755 100644
--- a/review/TODOS-format.md
+++ b/review/TODOS-format.md
@@ -1,6 +1,6 @@
# TODOS.md Format Reference
-Shared reference for the canonical TODOS.md format. Referenced by `/ship` (Step 5.5) and `/plan-ceo-review` (TODOS.md updates section) to ensure consistent TODO item structure.
+Shared reference for the canonical TODOS.md format. Referenced by `/ship` (Step 14) and `/plan-ceo-review` (TODOS.md updates section) to ensure consistent TODO item structure.
---
diff --git a/review/greptile-triage.md b/review/greptile-triage.md
index 123393fc3..2f0072eed 100644
--- a/review/greptile-triage.md
+++ b/review/greptile-triage.md
@@ -83,7 +83,7 @@ For each non-suppressed comment:
1. **Line-level comments:** Read the file at the indicated `path:line` and surrounding context (±10 lines)
2. **Top-level comments:** Read the full comment body
-3. Cross-reference the comment against the full diff (`git diff origin/main`) and the review checklist
+3. Cross-reference the comment against the full diff (`git diff origin/`, using the base branch the calling skill detected) and the review checklist
4. Classify:
- **VALID & ACTIONABLE** — a real bug, race condition, security issue, or correctness problem that exists in the current code
- **VALID BUT ALREADY FIXED** — a real issue that was addressed in a subsequent commit on the branch. Identify the fixing commit SHA.
diff --git a/ship/sections/apple-release.md.tmpl b/ship/sections/apple-release.md.tmpl
index 46cef9911..5fc8e3c51 100644
--- a/ship/sections/apple-release.md.tmpl
+++ b/ship/sections/apple-release.md.tmpl
@@ -93,4 +93,4 @@ Build this question's options from a LIVE check of installed skills at ask time
`produce` already created the app record and bundle ID during the run — never call the app record a manual gate. Apply the pricing settled in the authorization moment through the App Store Connect price-schedule endpoint (`POST /v1/appPriceSchedules` via the session or the minted key): fastlane's `price_tier` option is broken against the current API ("'prices' is not a relationship on 'apps'"), so never route pricing through it or call its failure an account problem. `deliver` owns everything else the store listing needs: description, keywords, localizations, screenshot upload per device size, attaching the uploaded build, and Submit for Review; `pilot` manages TestFlight groups and testers as an intermediate round when the user asked for one. Submission follows the same durable-effect contract with key `appstore.submit..` — on ambiguity, inspect App Store Connect before re-running. Monitor review status from the CLI afterward.
-What remains web-only, ever: the paid Apple Developer Program membership purchase itself (a precondition, not a release step) and, for PAID apps only, the one-time Paid Apps agreement with banking and tax — offer the agentic-browser drive per the Third-Party Web Actions contract (earlier in this skill) before any manual checklist for those. A free app needs no browser at any point. After submission, report that App Review typically answers within a day or two and close the run; review outcome is not a gate this workflow can hold open. In that SAME closing report, disclose the durable credential the release created — one line, once per run: "This created an App Store Connect API key (`gstack-upload`, scoped to this app) that persists for future releases; revoke it anytime at App Store Connect → Users and Access → Integrations, or delete `~/.gstack/apple/api-key.json` locally." This is the deliberate exception to the mid-run no-credential-talk rule (line 14): the user is otherwise never told a standing credential now exists on their account and on disk, so it never reaches their revocation checklist. Disclosure at exit, not a mid-run question, so the one-authorization-moment contract holds.
+What remains web-only, ever: the paid Apple Developer Program membership purchase itself (a precondition, not a release step) and, for PAID apps only, the one-time Paid Apps agreement with banking and tax — offer the agentic-browser drive per the Third-Party Web Actions contract (earlier in this skill) before any manual checklist for those. A free app needs no browser at any point. After submission, report that App Review typically answers within a day or two and close the run; review outcome is not a gate this workflow can hold open. In that SAME closing report, disclose the durable credential the release created — one line, once per run: "This created an App Store Connect API key (`gstack-upload`, scoped to this app) that persists for future releases; revoke it anytime at App Store Connect → Users and Access → Integrations, or delete `~/.gstack/apple/api-key.json` locally." This is the deliberate exception to the mid-run no-credential-talk rule in this adapter's opening section: the user is otherwise never told a standing credential now exists on their account and on disk, so it never reaches their revocation checklist. Disclosure at exit, not a mid-run question, so the one-authorization-moment contract holds.