Signoff
Local CI. Instead of a PR fanning out cloud jobs that re-verify work the authoring machine already verified, the checks run here and basecamp/gh-signoff writes commit statuses (POST /repos/:owner/:repo/statuses/<sha>, context signoff or signoff/<check>) that branch protection requires.
The gate is only as honest as the run behind it. gh signoff writes a green status without running anything, so the whole value of this skill is the procedure around the command: verify the tree, run the checks the diff actually needs, write statuses only for checks that passed, and say in writing who ran them and what was skipped.
Modes
Pick the mode from the request, then follow that reference in full. Do not paraphrase it and do not skip steps.
Setup mode when the request carries a setup word: "setup", "set up", "install", "configure", "initialise", "add signoff to this repo", "which checks should be required", or when the invocation argument is setup. Also switch to setup mode if a run reveals the repo has no signoff context in branch protection or the extension is not installed, then return to run mode afterwards.
Run mode for everything else, including a bare invocation with no arguments.
If the request is ambiguous ("sort out signoff on this repo"), check whether signoff is already a required context and say which mode you picked before starting:
gh api "repos/{owner}/{repo}/branches/$(gh repo view --json defaultBranchRef --jq .defaultBranchRef.name)/protection" --jq '.required_status_checks.contexts'
When to Use
Run mode:
- User says "sign off", "sign off the PR", "signoff", "run signoff", or "gh signoff"
- A PR is blocked on a missing or red
signoff / signoff/<check> status
- User asks to make a PR mergeable, or asks why the checks panel is empty
- After finishing work on a branch that already has an open PR, when the user asks for the PR to be ready to merge
Setup mode:
- User asks to set up, install or configure gh-signoff on a repo
- User asks which contexts should be required, or wants to migrate cloud CI to local signoff
gh extension list has no gh-signoff, or branch protection has no signoff context
Do not use this skill to skip verification. If the user wants a green status without running the checks, see the break-glass section in references/signoff.md, which requires explicit authorization.
Rules / Steps
These hold in both modes:
- A status binds to a SHA, not a branch. Push another commit and the signoff drops, and the run has to happen again.
- Never sign off a check that did not run. Not run is skipped, never passed.
- Never weaken a check to make it green. No
--no-verify, no skipped tests, no loosened types, no ignore comments added to silence a real finding.
- A failing check is work to do, not a result to hand back. Fix it, commit, push, start the run over on the new SHA.
- Name the runner. GitHub stamps the token owner's login, so say explicitly in the PR comment when an agent ran the checks.
- Only always-on checks become required contexts. A required context that never arrives leaves the PR unmergeable forever.
Examples
/dlc-signoff # run mode: check, verify, write statuses on the current PR
/dlc-signoff --dry-run # run mode: print the plan, run nothing, write nothing
/dlc-signoff --skip e2e --only test # run mode with filters
/dlc-signoff setup # setup mode: install the extension, pick and require contexts
Worked examples for each mode live in the reference files.
1---2name: dlc-signoff3description: Sign off the current PR or commit with basecamp/gh-signoff by running the repo's CI checks locally and writing the `signoff` commit statuses branch protection requires, or set gh-signoff up in a repo. Routes to one of two references, run mode by default, setup mode when the request is about configuring the repo. Enforces the honesty rules (clean tree, pushed HEAD, only sign off what actually ran, report who ran it). Use when asked to "sign off", "sign off the PR", "signoff", "run signoff", "make the PR mergeable", "green the checks", or when a PR is blocked on a missing `signoff` status. Use setup mode for "signoff setup", "set up signoff", "install gh-signoff", "configure signoff for this repo", "add signoff to this repo", "which checks should be required".4license: UNLICENSED5allowed-tools: Read, Bash(*), Glob, Grep6metadata:7 source: https://skillmd.com/skills/delacournz/dlc-signoff8 author: chris@delacour.co.nz9 version: "0.2.0"10 category: workflow11 tags: [signoff, gh-signoff, ci, pull-request, github, local-ci, branch-protection, setup]12 argument-hint: "[setup] [--dry-run] [--only ctx,ctx] [--skip ctx,ctx]"13---1415# Signoff1617Local CI. Instead of a PR fanning out cloud jobs that re-verify work the authoring machine already verified, the checks run here and [`basecamp/gh-signoff`](https://github.com/basecamp/gh-signoff) writes commit statuses (`POST /repos/:owner/:repo/statuses/<sha>`, context `signoff` or `signoff/<check>`) that branch protection requires.1819The gate is only as honest as the run behind it. `gh signoff` writes a green status without running anything, so the whole value of this skill is the procedure around the command: verify the tree, run the checks the diff actually needs, write statuses only for checks that passed, and say in writing who ran them and what was skipped.2021## Modes2223Pick the mode from the request, then follow that reference in full. Do not paraphrase it and do not skip steps.2425| Mode | Follow | Use when |26| --- | --- | --- |27| **Run** (default) | [references/signoff.md](./references/signoff.md) | Signing off the current branch, PR or commit |28| **Setup** | [references/setup.md](./references/setup.md) | Configuring gh-signoff for the repo |2930**Setup mode** when the request carries a setup word: "setup", "set up", "install", "configure", "initialise", "add signoff to this repo", "which checks should be required", or when the invocation argument is `setup`. Also switch to setup mode if a run reveals the repo has no `signoff` context in branch protection or the extension is not installed, then return to run mode afterwards.3132**Run mode** for everything else, including a bare invocation with no arguments.3334If the request is ambiguous ("sort out signoff on this repo"), check whether `signoff` is already a required context and say which mode you picked before starting:3536```bash37gh api "repos/{owner}/{repo}/branches/$(gh repo view --json defaultBranchRef --jq .defaultBranchRef.name)/protection" --jq '.required_status_checks.contexts'38```3940## When to Use4142Run mode:4344- User says "sign off", "sign off the PR", "signoff", "run signoff", or "gh signoff"45- A PR is blocked on a missing or red `signoff` / `signoff/<check>` status46- User asks to make a PR mergeable, or asks why the checks panel is empty47- After finishing work on a branch that already has an open PR, when the user asks for the PR to be ready to merge4849Setup mode:5051- User asks to set up, install or configure gh-signoff on a repo52- User asks which contexts should be required, or wants to migrate cloud CI to local signoff53- `gh extension list` has no gh-signoff, or branch protection has no `signoff` context5455Do **not** use this skill to skip verification. If the user wants a green status without running the checks, see the break-glass section in [references/signoff.md](./references/signoff.md#break-glass), which requires explicit authorization.5657## Rules / Steps5859These hold in both modes:60611. **A status binds to a SHA, not a branch.** Push another commit and the signoff drops, and the run has to happen again.622. **Never sign off a check that did not run.** Not run is skipped, never passed.633. **Never weaken a check to make it green.** No `--no-verify`, no skipped tests, no loosened types, no ignore comments added to silence a real finding.644. **A failing check is work to do, not a result to hand back.** Fix it, commit, push, start the run over on the new SHA.655. **Name the runner.** GitHub stamps the token owner's login, so say explicitly in the PR comment when an agent ran the checks.666. **Only always-on checks become required contexts.** A required context that never arrives leaves the PR unmergeable forever.6768## Examples6970```bash71/dlc-signoff # run mode: check, verify, write statuses on the current PR72/dlc-signoff --dry-run # run mode: print the plan, run nothing, write nothing73/dlc-signoff --skip e2e --only test # run mode with filters74/dlc-signoff setup # setup mode: install the extension, pick and require contexts75```7677Worked examples for each mode live in the reference files.