Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .agents/skills/ship-pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
name: ship-pr
description: Ship a finished openboot.dev change through the canonical pull-request flow. Use when the user asks to open, submit, or ship a PR/MR for the current branch, including phrases such as "open a PR", "ship this", "提 PR", or "提个 MR". Push, open the PR, wait for CI, review the full diff, fix small findings, escalate product decisions, squash-merge a clean PR, and clean up locally. Do not use for status checks on an existing PR or for draft/WIP work.
---

# Ship a PR for openboot.dev

Treat the PR review as the last reversible gate before `main` deploys.

Do not use auto-merge. Complete CI and review before merging from the current
session.

## Check the branch

Run:

```bash
git status -sb
git rev-parse --abbrev-ref HEAD
git log --oneline main..HEAD
```

Stop if the branch is `main` or has no commits ahead of `main`. Account for all
working-tree changes before shipping.

For draft/WIP work, use a draft PR and stop. For a backwards-incompatible D1
migration, verify it locally and ask for the rollout decision before proceeding.

## Push and open the PR

Push the current branch:

```bash
git push -u origin "$(git rev-parse --abbrev-ref HEAD)"
```

The installed pre-push hook runs `npm run validate`; CI remains the gate when
the hook is not installed.

Create a PR with a Conventional Commits title under 70 characters. Summarize
the change and list the actual local verification in the body.

## Wait for CI

Run:

```bash
gh pr checks --watch
```

Require the checks listed in `.github/required-checks.txt`. If a required check
fails, inspect it with `gh run view --log-failed`, fix failures that have an
unambiguous solution, push, and wait again. Escalate failures that require a
product or rollout decision. Treat harness drift sensors as informational unless
repository policy changes.

## Review the full diff

After CI passes, review `git diff main...HEAD` for behavior, design, tests,
risk, and rollback. In particular, check:

- D1 access boundaries and parameter binding.
- API contract alignment with `openboot-contract`.
- Forward-only D1 migrations.
- Round trips for fields that flow CLI -> server -> CLI.
- New warnings, missing tests, and unexpected generated files.

Fix small, clear issues in the current session, commit them, push, and wait for
CI again. Escalate choices that depend on product intent or team convention.
Merge without asking for another confirmation when the PR is clean.

## Merge and clean up

Run:

```bash
gh pr merge --squash --delete-branch
git checkout main
git pull --ff-only
```

Delete the local feature branch if it still exists. Do not roll back a failed
deployment, change the separate `openboot-contract` repository, or alter
production secrets without explicit direction.
66 changes: 0 additions & 66 deletions .claude/hooks/post-tool-use.sh

This file was deleted.

25 changes: 0 additions & 25 deletions .claude/hooks/session-start.sh

This file was deleted.

41 changes: 0 additions & 41 deletions .claude/hooks/stop.sh

This file was deleted.

20 changes: 0 additions & 20 deletions .claude/settings.json

This file was deleted.

1 change: 1 addition & 0 deletions .claude/skills/ship-pr/SKILL.md
7 changes: 2 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,9 @@ coverage/
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
# .claude/ contains both committed project assets (settings.json,
# hooks/, skills/) and per-user noise (transcripts, local overrides).
# Ignore everything by default, allow the committed pieces explicitly.
# .claude/ contains the committed skill aliases plus per-user noise
# (transcripts, local overrides). Ignore everything except shared skills.
.claude/*
!.claude/hooks/
!.claude/settings.json
!.claude/skills/
.claude/settings.local.json
.dev.vars
Expand Down
Loading
Loading