You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while shipping PR #350. Two related but distinct CLI gaps around the documented ship flow.
Context
CLAUDE.md and .agents/skills/ci/SKILL.md instruct agents to "run `pulp pr`" whenever the user says "ship this" / "push a PR" / etc. It's the documented single-orchestrator entry point.
Two things break that:
1. pulp pr is not in the installed binary
tools/cli/cmd_pr.cpp exists. tools/cli/pulp_cli.cpp:41 wires it into the dispatch table. But:
Pinned release v0.14.0 (latest) predates pulp pr's landing in PR Versioning & skill-sync gates + pulp pr + auto-release on merge #144 on 2026-04-13. Looking at the source history, cmd_pr.cpp was first wired in 9ee9fce on 2026-04-13; the v0.14.0 binary was cut on 2026-04-16 but the installed binary at ~/.pulp/bin/pulp dates from April 7 — before the PR.
pulp help on the installed binary does not list pr, so an agent reading CLAUDE.md and running pulp pr fails with "Unknown command: pr".
Meanwhile, shipyard pr already exists and does the exact same thing. Its help text even says: "Mirrors pulp's `pulp pr` for parity with the ci skill's natural-language triggers." Same four steps: skill_sync_check → version_bump_check → commit → shipyard ship.
2. pulp upgrade 404s on release assets
Separately, pulp upgrade on the April 7 binary tries to download:
pulp-0.14.0-darwin-arm64.tar.gz
…which returns 404. The actual asset on gh release view v0.14.0 is:
pulp-darwin-arm64.tar.gz (no version in the filename)
So even if an agent correctly runs pulp upgrade first, it silently fails and the user stays on a stale binary forever.
User impact
Any agent following the documented "push a PR" flow hits "Unknown command: pr" unless their ~/.pulp/bin/pulp is newer than 2026-04-13.
pulp upgrade doesn't unbreak them because the filename template is wrong.
Net effect: agents silently fall through to running gh pr create + shipyard ship separately (exactly what CLAUDE.md forbids), or file-locally.
Proposed plan
Pick one for pulp pr:
(A) Delete pulp pr, point docs at shipyard pr.shipyard pr is already the real implementation and its "mirrors pulp's" framing would be flipped. Remove tools/cli/cmd_pr.cpp and the dispatch entry. Update CLAUDE.md + .agents/skills/ci/SKILL.md + pr skill to call out shipyard pr as the entry point. Cleaner, one source of truth.
(B) Make pulp pr a thin shim that execs shipyard pr. Preserves the natural-language trigger "pulp pr" but avoids code duplication. Requires fewer doc edits.
I recommend (A) — Shipyard is the primary CI tool per the ci skill, and the shim adds a second failure mode (shim-present-but-shipyard-missing).
pulp upgrade fix:
Align the upgrade downloader's filename template with tools/install-shipyard.sh's style (<name>-<platform>-<arch>.tar.gz), or look up the asset list via the GitHub API rather than composing a URL.
Add a CLI test that mocks the GitHub API response and asserts the resolved URL matches a real asset name.
Acceptance criteria
One documented path (shipyard prorpulp pr), no "Unknown command" surprise.
pulp upgrade on v0.14.0 successfully resolves and downloads the latest release, verified with a mocked-http test.
CLAUDE.md + ci skill + pr skill all agree on the entry command.
No silent fall-through to separate gh pr create + shipyard ship calls (the ci skill's hard rule).
Related
.agents/skills/ci/SKILL.md § "Shipping a PR: route through pulp pr"
Found while shipping PR #350. Two related but distinct CLI gaps around the documented ship flow.
Context
CLAUDE.md and
.agents/skills/ci/SKILL.mdinstruct agents to "run `pulp pr`" whenever the user says "ship this" / "push a PR" / etc. It's the documented single-orchestrator entry point.Two things break that:
1.
pulp pris not in the installed binarytools/cli/cmd_pr.cppexists.tools/cli/pulp_cli.cpp:41wires it into the dispatch table. But:v0.14.0(latest) predatespulp pr's landing in PR Versioning & skill-sync gates + pulp pr + auto-release on merge #144 on 2026-04-13. Looking at the source history, cmd_pr.cpp was first wired in 9ee9fce on 2026-04-13; the v0.14.0 binary was cut on 2026-04-16 but the installed binary at~/.pulp/bin/pulpdates from April 7 — before the PR.pulp helpon the installed binary does not listpr, so an agent reading CLAUDE.md and runningpulp prfails with "Unknown command: pr".shipyard pralready exists and does the exact same thing. Its help text even says: "Mirrors pulp's `pulp pr` for parity with the ci skill's natural-language triggers." Same four steps: skill_sync_check → version_bump_check → commit → shipyard ship.2.
pulp upgrade404s on release assetsSeparately,
pulp upgradeon the April 7 binary tries to download:…which returns 404. The actual asset on
gh release view v0.14.0is:So even if an agent correctly runs
pulp upgradefirst, it silently fails and the user stays on a stale binary forever.User impact
~/.pulp/bin/pulpis newer than 2026-04-13.pulp upgradedoesn't unbreak them because the filename template is wrong.gh pr create+shipyard shipseparately (exactly what CLAUDE.md forbids), or file-locally.Proposed plan
Pick one for
pulp pr:pulp pr, point docs atshipyard pr.shipyard pris already the real implementation and its "mirrors pulp's" framing would be flipped. Removetools/cli/cmd_pr.cppand the dispatch entry. Update CLAUDE.md +.agents/skills/ci/SKILL.md+prskill to call outshipyard pras the entry point. Cleaner, one source of truth.pulp pra thin shim that execsshipyard pr. Preserves the natural-language trigger "pulp pr" but avoids code duplication. Requires fewer doc edits.I recommend (A) — Shipyard is the primary CI tool per the ci skill, and the shim adds a second failure mode (shim-present-but-shipyard-missing).
pulp upgradefix:tools/install-shipyard.sh's style (<name>-<platform>-<arch>.tar.gz), or look up the asset list via the GitHub API rather than composing a URL.Acceptance criteria
shipyard prorpulp pr), no "Unknown command" surprise.pulp upgradeon v0.14.0 successfully resolves and downloads the latest release, verified with a mocked-http test.gh pr create+shipyard shipcalls (the ci skill's hard rule).Related
.agents/skills/ci/SKILL.md§ "Shipping a PR: route throughpulp pr".agents/skills/pr/*(pulp plugin pr skill)pulp prlanding)pulp pr)tools/install-shipyard.sh(reference filename template)