ship-a-change

Ships repository changes through worktree, rebase, PR, CI, merge queue, and cleanup.

1|Updated Aug 14, 2026
One-click install
npx skills add https://github.com/zhiyuan-zhang0206/Ava --skill ship-a-change-zhiyuan-zhang0206
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: ship-a-change
Source: https://github.com/zhiyuan-zhang0206/Ava/tree/main/.agents/skills/ship-a-change
Command: npx skills add https://github.com/zhiyuan-zhang0206/Ava --skill ship-a-change-zhiyuan-zhang0206

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? It enforces a consistent, safe end-to-end workflow for landing code changes in the Ava repository, preventing direct pushes to main, non-linear history, unverified merges, and broken shared virtual environments. ## Core Features & Use Cases - Mandatory worktree + PR flow: Every change is developed in an isolated git worktree on an ava-<id>-<task> branch, rebased onto main, and merged only via pull request with squash merge through the Trunk merge queue. - CI gating and watching: Changes are validated locally, then CI is polled via scripts/ci_utils.py or a reference watcher (reference/ci_watcher.py) that wakes the agent with an explicit verdict (green, failed, conflict, or no-workflow-run) instead of silent timeouts. - Edge-case handling: Covers pre-commit hook skips via named SKIP= (never --no-verify), merge-conflict rebasing, GitHub-limbo queued runs, QA qa-approved label gating, and safe worktree removal checks. - Use Case: After making a bug fix, an agent creates a worktree, commits, rebases on main, runs local tests, opens a PR, launches the CI watcher, submits to the Trunk merge queue, and cleans up the worktree once the PR lands. ## Quick Start Ask the agent to ship the current change by creating a worktree, opening a PR, waiting for green CI, and submitting it to the merge queue.

Frequently Asked Questions about ship-a-change

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I merge a pull request through a Trunk merge queue?▼

Submit with `scripts/ci_utils.py <PR#> --wait --merge`, which polls CI to green, submits to the Trunk queue, and waits for it to land. The queue requires the `qa-approved` label and squash-merges each PR; conflicting or red PRs must be rebased and resubmitted.

How do I watch GitHub CI for a pull request without polling manually?▼

Launch the reference watcher in `reference/ci_watcher.py` via `ava.watcher.launch` after configuring REPO_ROOT, PR_NUMBER, and CI_UTILS. It wraps the repo's `check_ci()` and sends exactly one wake-up message when CI settles, including failed and conflict verdicts.

Why should I avoid git commit --no-verify when pre-commit hooks fail?▼

`--no-verify` disables every hook at once, silently skipping lints that have no other local gate. Instead skip only the hooks the machine cannot run by name, e.g. `SKIP=frontend-tsc,frontend-eslint git commit`, and note the skipped hooks in the commit message.

Can I push directly to main or merge main into my feature branch?▼

No. Direct pushes to main are forbidden and history must stay linear: always rebase your feature branch onto origin/main, never merge main into it. The only exception is when the user explicitly says to push directly.

Why does a fresh git worktree break the shared Python virtual environment?▼

Symlinking a shared `.venv` into a worktree makes a later `uv sync` write through the symlink and re-point the shared venv's editable path at the worktree, breaking other checkouts. Each worktree needs its own real venv created with `guard_editable_venv.py` and `uv sync`.

What should I do when a PR has merge conflicts in the queue?▼

The merge queue cannot rebase a conflicting PR, so resolve it locally: run `git fetch origin main && git rebase origin/main`, resolve conflicts, force-push with `--force-with-lease`, and resubmit. A failed queue attempt on the same head SHA also requires a rebase before resubmitting.