Files
gstack/ship/sections/handoff.md
T
garrytanandcapy-ai[bot] cd62fb662c fix(ship): link issues by intent at publish and handoff; Fixes: trailer at commit (Lane D: D1, D2, D-a)
- Step 15: a commit fixing a user-named issue carries a `Fixes: #<n>` trailer
  (offset by tightening Step 15 so the skeleton stays at 80,998 <= 81,000).
- pr-body: an explicit "Issue links" step runs gstack-issue-links before the
  body is composed (previously only a placeholder inside the body template);
  interactive runs ask once about `(promote: fix #N)` references and add
  `--supersedes`/`--credit` only on the owner's confirmation; unattended runs
  keep Refs and list unpromoted candidates, Related lines and lookup failures
  in the completion message; `ISSUE_LINKS_MISSING` from the receipt write.
- handoff (no-PR lanes): runs gstack-issue-links and passes --issues to the
  receipt; the completion message gains an `issues:` line.
- Regenerated ship/SKILL.md and sections; refreshed the four ship goldens.
- Parity: union 309,431 / 187,706 = 1.6485 (> 1.6450 by 655 bytes); maxSizeRatio
  raised to the measured 1.6485 with its justification, as previous waves did.

Files: ship/SKILL.md.tmpl, ship/SKILL.md, ship/sections/pr-body.md.tmpl,
ship/sections/pr-body.md, ship/sections/handoff.md.tmpl, ship/sections/handoff.md,
test/fixtures/golden/{claude,codex,factory,agy}-ship-SKILL.md,
test/helpers/carve-guards.ts (ship maxSizeRatio).

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-15 00:11:32 +00:00

1.6 KiB

Step 18-H: Handoff without a PR (automation lanes)

Replaces the pr-body section when the run must not open a PR (--no-pr, an automation lane, an unattended parent said so). Nothing here publishes.

  1. Verify-only checks: write Step 16's per-lane pass/fail/skip counts, naming the lanes that need a remote (requires-remote), to .gstack/tmp/ship-gate.json as the pr-body section does, then (with its Issue links flags; ask nothing):
    ~/.claude/skills/gstack/bin/gstack-issue-links --base <base> --out .gstack/tmp/issues.json
    ~/.claude/skills/gstack/bin/gstack-ship-receipt write --base <base> --gate @.gstack/tmp/ship-gate.json --issues @.gstack/tmp/issues.json
    
  2. Send the completion message, identifiers first, in this order: the SHIP_RECEIPT: line and receipt block (pr: none); branch: and sha: (git rev-parse HEAD), pushed or not pushed; inputs: the plan or issue, the base SHA and the spend cap; before/after: one row per claimed metric, measured on base and on this SHA with the command used; escalation: the one condition that stops the merge (a requires-remote lane, an open gate finding, an unverified claim) or none. issues: its lines, unpromoted candidates and lookup failures. Full thread ids (jam_…) in any cross-thread reference, never a short code. Prose may follow the identifiers; nothing may precede them.
  3. Skip Steps 19 and 21. Run Step 20 with "version":null when NO_VERSION applied.