ship
Ship — close the development branch
Ship is the last gate of the rsc SDD chain: constitution → specify → clarify → plan → tasks → analyze → implement → verify → review → **ship**. Everything upstream proved the work is correct and green; ship is the act of landing it — turning an approved branch into merged history, a pull request, or a clean parked branch — without breaking the trunk and without ever forging the author.
This skill owns one decision and its safe execution: how does this work integrate? It does not write code, run test gates, or read the diff for defects — those phases already happened. It is the close, not the open: creating the isolated branch or worktree is ../worktrees/SKILL.md, taking the gates green is ../verify/SKILL.md, reading the diff adversarially is ../review/SKILL.md, and putting merged code onto a server is ../deployment/SKILL.md.
The hard rule: git authorship is Eric, never Claude
Every commit and every PR ships under Eric's name. No
Co-Authored-By: Claude. NoCo-Authored-Byfor any AI. No "🤖 Generated with Claude Code" footer. No "made by an agent" line in the PR body. Nothing that attributes the work to a tool.
This is absolute — not a preference to weigh against convenience — because a commit is a permanent, published claim about who wrote something. The work is Eric's; the agent is a tool he used, like an editor or a compiler, and you do not credit the compiler in the commit message. Once a forged trailer is pushed it is in everyone's history and only a rewrite removes it.
Concretely, before any commit or PR:
- Never pass
--authorto set a non-Eric author. The repo's configureduser.name/user.email(Eric's) is the author and committer. - If
git config user.emailis unset or clearly not Eric's, stop and ask which identity to commit under — do not guess, and do not substitute an agent identity. - If you find a Claude/AI trailer in a commit you are about to push (e.g. left over from an upstream tool), strip it before the branch lands.
Verify it after writing the commit. A non-empty match is a blocker: amend and re-check before the branch goes anywhere.