# Checks and Ship

Source: https://cohalen.com/docs/ship



**Checks** gathers every signal that decides whether the workspace can merge, then
boils them down to one verdict. The verdict picks the single action you can take
right now, so you never get a menu of half-usable buttons.

<Mermaid
  chart="`flowchart LR
accTitle: How the verdict is worked out
accDescr {
  Git status, check runs, deployments, notes, and todos all feed one verdict.
  The verdict then offers exactly one action. Commit and push, create the pull
  request, or merge.
}
GS[&#x22;Git status&#x22;] --> V
CR[&#x22;Check runs&#x22;] --> V
DP[&#x22;Deployments&#x22;] --> V
NT[&#x22;Notes&#x22;] --> V
TD[&#x22;Todos&#x22;] --> V
V[&#x22;Verdict&#x22;] --> ACT[&#x22;One action:<br/>Commit &amp; push · Create PR · Merge&#x22;]`"
/>

## What blocks a merge [#what-blocks-a-merge]

A blocker is anything still open that should stop a merge. You clear one on
purpose: nothing gets waved through quietly, and the verdict counts what's left
while any are open.

* **Todos** are work items that block the merge, added by you or by the agent. The
  workspace stays blocked until they're checked off, so known unfinished work can't
  ship by accident.
* **Check runs** are the branch's automated signals: CI, lint, build, test. Each
  one shows its state and links to where it came from.
* **Git status** is where the branch stands against the base branch. Uncommitted
  changes, commits ahead or behind, each one you can act on separately.

Point the base branch somewhere else here if the change should merge into something
other than the repository's default branch.

## Ship [#ship]

Ship runs for real, through git and your
[GitHub connection](/docs/getting-started#connect-github). The verdict gives you
one step at a time.

<Steps>
  <Step>
    **Commit and push** sweeps up anything left uncommitted and pushes the branch. A
    mechanical step, no agent involved.
  </Step>

  <Step>
    **Create PR** opens the pull request. The workspace's agent drafts the body as a
    turn you can watch in the chat, so you can see and steer what it writes.
  </Step>

  <Step>
    **Merge** finishes it, squash by default. You can override that per repository,
    and if the repository forbids a strategy, Cohalen falls back to one it allows.
  </Step>
</Steps>

Everything runs as your connected GitHub account. The pushes, the pull request, and
the merge are authored as you, and branch protection still applies. A rejected push
or a merge conflict shows up in **Checks** instead of passing quietly.

After a merge goes through, the workspace shows **Merged**. If you set the
repository to, it archives itself.
