feat(ship): Step 19.5 — offer gstack-publish for methodology skill changes

Wires the orphaned gstack-publish binary into /ship. When a PR touches
any standalone methodology skill (openclaw/skills/gstack-*/SKILL.md) or
skills.json, /ship now runs gstack-publish --dry-run after PR creation
and asks the user if they want to actually publish.

Previously, the only way to discover gstack-publish was reading the
CHANGELOG or README. Most methodology skill updates landed on main
without ever being pushed to ClawHub / SkillsMP / Vercel Skills.sh,
defeating the whole point of having a marketplace publisher.

The check is conditional — for PRs that don't touch methodology skills
(the common case), this step is a silent no-op. Dry-run runs first so
the user sees the full list of what would publish and which marketplaces
are authed before committing.

Golden fixtures (claude/codex/factory) regenerated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-04-18 08:18:50 +08:00
parent 6a07bdb499
commit dfedafea7d
5 changed files with 160 additions and 5 deletions
+32 -1
View File
@@ -2684,7 +2684,38 @@ EOF
**If neither CLI is available:**
Print the branch name, remote URL, and instruct the user to create the PR/MR manually via the web UI. Do not stop — the code is pushed and ready.
**Output the PR/MR URL** — then proceed to Step 20.
**Output the PR/MR URL** — then proceed to Step 19.5.
---
## Step 19.5: Offer methodology skill publishing (conditional)
If this PR touched any standalone methodology skill (`openclaw/skills/gstack-*/SKILL.md`) or the marketplace manifest (`skills.json`), offer to publish the updated skills to the configured marketplaces after merge.
```bash
git diff origin/<base>...HEAD --name-only | grep -E '^(openclaw/skills/gstack-[^/]+/SKILL\.md|skills\.json)$' || true
```
If the output is empty: skip this step silently. Continue to Step 20.
If any matches: run a dry-run preview so the user sees exactly what would publish and what auth is missing.
```bash
~/.claude/skills/gstack/bin/gstack-publish --dry-run
```
Then use AskUserQuestion with the structure in the preamble:
- **Re-ground:** project, branch, PR just opened.
- **Simplify:** "This PR updated methodology skills. gstack-publish can push them to ClawHub, SkillsMP, and Vercel Skills.sh so other developers on other agents can install them. Dry-run above shows what would ship and whether each marketplace is authed."
- **RECOMMENDATION:** A because the dry-run just verified the manifest and one-command distribution is the whole point of having a marketplace publisher.
- **Options:**
- A) Publish now — run `gstack-publish` (human: ~2min / CC: ~30s). Completeness: 9/10.
- B) Publish after the PR merges — `/document-release` won't push this automatically; you'll run `gstack-publish` manually once the branch is on main. Completeness: 7/10.
- C) Skip — don't publish this release. Completeness: 4/10.
If A: run `~/.claude/skills/gstack/bin/gstack-publish` (no --dry-run). Report success/failure per marketplace. If any marketplace auth is missing, the dry-run above surfaced it; the real publish will skip that marketplace with an isolated error rather than aborting the batch.
If B or C: continue to Step 20.
---
+32 -1
View File
@@ -767,7 +767,38 @@ EOF
**If neither CLI is available:**
Print the branch name, remote URL, and instruct the user to create the PR/MR manually via the web UI. Do not stop — the code is pushed and ready.
**Output the PR/MR URL** — then proceed to Step 20.
**Output the PR/MR URL** — then proceed to Step 19.5.
---
## Step 19.5: Offer methodology skill publishing (conditional)
If this PR touched any standalone methodology skill (`openclaw/skills/gstack-*/SKILL.md`) or the marketplace manifest (`skills.json`), offer to publish the updated skills to the configured marketplaces after merge.
```bash
git diff origin/<base>...HEAD --name-only | grep -E '^(openclaw/skills/gstack-[^/]+/SKILL\.md|skills\.json)$' || true
```
If the output is empty: skip this step silently. Continue to Step 20.
If any matches: run a dry-run preview so the user sees exactly what would publish and what auth is missing.
```bash
~/.claude/skills/gstack/bin/gstack-publish --dry-run
```
Then use AskUserQuestion with the structure in the preamble:
- **Re-ground:** project, branch, PR just opened.
- **Simplify:** "This PR updated methodology skills. gstack-publish can push them to ClawHub, SkillsMP, and Vercel Skills.sh so other developers on other agents can install them. Dry-run above shows what would ship and whether each marketplace is authed."
- **RECOMMENDATION:** A because the dry-run just verified the manifest and one-command distribution is the whole point of having a marketplace publisher.
- **Options:**
- A) Publish now — run `gstack-publish` (human: ~2min / CC: ~30s). Completeness: 9/10.
- B) Publish after the PR merges — `/document-release` won't push this automatically; you'll run `gstack-publish` manually once the branch is on main. Completeness: 7/10.
- C) Skip — don't publish this release. Completeness: 4/10.
If A: run `~/.claude/skills/gstack/bin/gstack-publish` (no --dry-run). Report success/failure per marketplace. If any marketplace auth is missing, the dry-run above surfaced it; the real publish will skip that marketplace with an isolated error rather than aborting the batch.
If B or C: continue to Step 20.
---
+32 -1
View File
@@ -2684,7 +2684,38 @@ EOF
**If neither CLI is available:**
Print the branch name, remote URL, and instruct the user to create the PR/MR manually via the web UI. Do not stop — the code is pushed and ready.
**Output the PR/MR URL** — then proceed to Step 20.
**Output the PR/MR URL** — then proceed to Step 19.5.
---
## Step 19.5: Offer methodology skill publishing (conditional)
If this PR touched any standalone methodology skill (`openclaw/skills/gstack-*/SKILL.md`) or the marketplace manifest (`skills.json`), offer to publish the updated skills to the configured marketplaces after merge.
```bash
git diff origin/<base>...HEAD --name-only | grep -E '^(openclaw/skills/gstack-[^/]+/SKILL\.md|skills\.json)$' || true
```
If the output is empty: skip this step silently. Continue to Step 20.
If any matches: run a dry-run preview so the user sees exactly what would publish and what auth is missing.
```bash
~/.claude/skills/gstack/bin/gstack-publish --dry-run
```
Then use AskUserQuestion with the structure in the preamble:
- **Re-ground:** project, branch, PR just opened.
- **Simplify:** "This PR updated methodology skills. gstack-publish can push them to ClawHub, SkillsMP, and Vercel Skills.sh so other developers on other agents can install them. Dry-run above shows what would ship and whether each marketplace is authed."
- **RECOMMENDATION:** A because the dry-run just verified the manifest and one-command distribution is the whole point of having a marketplace publisher.
- **Options:**
- A) Publish now — run `gstack-publish` (human: ~2min / CC: ~30s). Completeness: 9/10.
- B) Publish after the PR merges — `/document-release` won't push this automatically; you'll run `gstack-publish` manually once the branch is on main. Completeness: 7/10.
- C) Skip — don't publish this release. Completeness: 4/10.
If A: run `~/.claude/skills/gstack/bin/gstack-publish` (no --dry-run). Report success/failure per marketplace. If any marketplace auth is missing, the dry-run above surfaced it; the real publish will skip that marketplace with an isolated error rather than aborting the batch.
If B or C: continue to Step 20.
---
+32 -1
View File
@@ -2299,7 +2299,38 @@ EOF
**If neither CLI is available:**
Print the branch name, remote URL, and instruct the user to create the PR/MR manually via the web UI. Do not stop — the code is pushed and ready.
**Output the PR/MR URL** — then proceed to Step 20.
**Output the PR/MR URL** — then proceed to Step 19.5.
---
## Step 19.5: Offer methodology skill publishing (conditional)
If this PR touched any standalone methodology skill (`openclaw/skills/gstack-*/SKILL.md`) or the marketplace manifest (`skills.json`), offer to publish the updated skills to the configured marketplaces after merge.
```bash
git diff origin/<base>...HEAD --name-only | grep -E '^(openclaw/skills/gstack-[^/]+/SKILL\.md|skills\.json)$' || true
```
If the output is empty: skip this step silently. Continue to Step 20.
If any matches: run a dry-run preview so the user sees exactly what would publish and what auth is missing.
```bash
$GSTACK_ROOT/bin/gstack-publish --dry-run
```
Then use AskUserQuestion with the structure in the preamble:
- **Re-ground:** project, branch, PR just opened.
- **Simplify:** "This PR updated methodology skills. gstack-publish can push them to ClawHub, SkillsMP, and Vercel Skills.sh so other developers on other agents can install them. Dry-run above shows what would ship and whether each marketplace is authed."
- **RECOMMENDATION:** A because the dry-run just verified the manifest and one-command distribution is the whole point of having a marketplace publisher.
- **Options:**
- A) Publish now — run `gstack-publish` (human: ~2min / CC: ~30s). Completeness: 9/10.
- B) Publish after the PR merges — `/document-release` won't push this automatically; you'll run `gstack-publish` manually once the branch is on main. Completeness: 7/10.
- C) Skip — don't publish this release. Completeness: 4/10.
If A: run `$GSTACK_ROOT/bin/gstack-publish` (no --dry-run). Report success/failure per marketplace. If any marketplace auth is missing, the dry-run above surfaced it; the real publish will skip that marketplace with an isolated error rather than aborting the batch.
If B or C: continue to Step 20.
---
+32 -1
View File
@@ -2675,7 +2675,38 @@ EOF
**If neither CLI is available:**
Print the branch name, remote URL, and instruct the user to create the PR/MR manually via the web UI. Do not stop — the code is pushed and ready.
**Output the PR/MR URL** — then proceed to Step 20.
**Output the PR/MR URL** — then proceed to Step 19.5.
---
## Step 19.5: Offer methodology skill publishing (conditional)
If this PR touched any standalone methodology skill (`openclaw/skills/gstack-*/SKILL.md`) or the marketplace manifest (`skills.json`), offer to publish the updated skills to the configured marketplaces after merge.
```bash
git diff origin/<base>...HEAD --name-only | grep -E '^(openclaw/skills/gstack-[^/]+/SKILL\.md|skills\.json)$' || true
```
If the output is empty: skip this step silently. Continue to Step 20.
If any matches: run a dry-run preview so the user sees exactly what would publish and what auth is missing.
```bash
$GSTACK_ROOT/bin/gstack-publish --dry-run
```
Then use AskUserQuestion with the structure in the preamble:
- **Re-ground:** project, branch, PR just opened.
- **Simplify:** "This PR updated methodology skills. gstack-publish can push them to ClawHub, SkillsMP, and Vercel Skills.sh so other developers on other agents can install them. Dry-run above shows what would ship and whether each marketplace is authed."
- **RECOMMENDATION:** A because the dry-run just verified the manifest and one-command distribution is the whole point of having a marketplace publisher.
- **Options:**
- A) Publish now — run `gstack-publish` (human: ~2min / CC: ~30s). Completeness: 9/10.
- B) Publish after the PR merges — `/document-release` won't push this automatically; you'll run `gstack-publish` manually once the branch is on main. Completeness: 7/10.
- C) Skip — don't publish this release. Completeness: 4/10.
If A: run `$GSTACK_ROOT/bin/gstack-publish` (no --dry-run). Report success/failure per marketplace. If any marketplace auth is missing, the dry-run above surfaced it; the real publish will skip that marketplace with an isolated error rather than aborting the batch.
If B or C: continue to Step 20.
---