# Ship

> Validate state and merge branch to main for production deployment. Use as final ZTE step after all checks pass. Use when this capability is needed.

- Skill: `tomevault-io/ship-15` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/ship-15`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/ship-15/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/ship-15

---


# Ship

Validate workflow state and merge to main for production deployment.

## Arguments

- `$1`: Branch name to merge

## Instructions

You are the ship command - the final step in Zero-Touch Engineering. Validate everything is ready, then merge to main.

### Step 1: Validate State Completeness

Before shipping, ALL these fields must be populated:

- [ ] `adw_id` - Workflow identifier
- [ ] `issue_number` - GitHub issue being resolved
- [ ] `branch_name` - Branch with changes
- [ ] `plan_file` - Implementation plan path
- [ ] `issue_class` - Task classification
- [ ] `worktree_path` - Isolated environment path (if using worktrees)

If any field is missing or empty, ABORT and report what's missing.

### Step 2: Validate Worktree (if applicable)

If using worktrees, perform three-way validation:

1. State has `worktree_path` field
2. Directory exists on filesystem
3. Git recognizes worktree (`git worktree list`)

If validation fails, ABORT and report the issue.

### Step 3: Validate Branch Exists

```bash
git branch --list $1
```

If branch doesn't exist, ABORT.

### Step 4: Fetch Latest Main

```bash
git fetch origin
```

### Step 5: Checkout Main

```bash
git checkout main
```

### Step 6: Pull Latest

```bash
git pull origin main
```

### Step 7: Merge Branch

Merge with no-fast-forward to preserve commit history:

```bash
git merge $1 --no-ff -m "Merge branch '$1' into main"
```

If merge conflicts occur, ABORT and report conflicts.

### Step 8: Push to Origin

```bash
git push origin main
```

### Step 9: Post Completion

Report successful ship:

```text
Shipped: Branch $1 merged to main and pushed to origin
```

## Output

Return structured result:

```json
{
  "success": true,
  "branch": "$1",
  "merged_to": "main",
  "commit": "{merge_commit_hash}",
  "pushed": true
}
```

Or on failure:

```json
{
  "success": false,
  "reason": "{failure_reason}",
  "step_failed": "{step_name}",
  "remediation": "{suggested_fix}"
}
```

## Safety Gates

This command has multiple abort points:

1. **State validation** - Missing fields block merge
2. **Worktree validation** - Invalid environment blocks merge
3. **Branch validation** - Non-existent branch blocks merge
4. **Merge conflicts** - Conflicts block push

## Notes

- Ship happens in MAIN repository, not worktree
- Always fetch/pull before merge to avoid conflicts
- Use `--no-ff` to preserve full commit history
- This is the final step - validate EVERYTHING before executing

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/melodic-software) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

