Plan, order and deliver a batch of backlog items (e.g. every High item) in a Conventional Docs repo, one decision, branch, worktree, draft PR, review and merge per item. Use when asked to work through the backlog, implement all items of a priority, or sequence several backlog items end to end.
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
For a repo that follows Conventional Docs (docs/backlog/, docs/decisions/, PLAN.md, TODO.md, docs/events.md). Read the conventional-docs skill (~/.agents/skills/conventional-docs/SKILL.md) and the repo's AGENTS.md and docs/events.md first; they win over anything here. Written from one project's workflow (Bazel, uv, a staging stack, releases and deploys). The pipeline is general, but the tool names, gate commands and traps below come from that project and are examples: substitute your repo's equivalents, found in its CI workflow and AGENTS.md.
Two phases: investigate and plan (no code, ends with an approved plan), then deliver (one item at a time, same pipeline each).
Run Phase 1 in plan mode when the harness has one, so the approval in step 8 is the harness's own plan-review screen, not a chat question. In omp, start the batch with /plan /skill:backlog-batch-delivery <scope>; the /backlog-batch <scope> command from ~/.omp/agent/extensions/backlog-batch-delivery.ts types that line for you. omp plan mode limits task subagents to read, grep, glob and web_search, so run the read-only probes of step 3 (gh api, read-only service requests) from the main agent's shell.
Before touching a branch or worktree, check that nobody else is driving it: git ls-remote --heads origin '*<slug>', git log -3 and gh pr list --head <branch>. A duplicated or forked session (for example one opened to write a skill) shares the worktree with the original. If commits, a PR or a TODO.md you did not write appear, stop editing, report, and leave uncommitted files alone. Never run the same item's pipeline twice.
ls docs/backlog). Read each item whole, plus every decision it links. Put each in the todo list, plus any release or deploy step the user asked for.gh api, or a read-only request against the real service). Do not infer from docs.if X >= 1.0 then A else B), so no question is needed mid-run;ask question or a request in prose. In omp, write local://<slug>-plan.md, then submit <slug> via xd://propose, which opens the Plan Review screen. Re-submit after every change. xd://propose works only in plan mode. If plan mode is off, write the plan file, end the turn, and tell the user to press Alt+Shift+P (or run /plan) and then run /plan-review, which opens the same screen on the newest local://*plan.md. In omp, "Approve and execute" starts Phase 2 in a fresh context that sees only the plan file. So the plan's first line is "Load skill://backlog-batch-delivery and run Phase 2 on the items below, in order.", and for each item the plan carries:
git pull --rebase, then git ls-remote --heads origin '*<slug>'. A hit means someone else is on it: stop and ask. Then create the worktree (wt switch <branch> or git worktree add) and push the branch immediately. Run every later command with the worktree as its working directory (the shell tool's cwd parameter where it has one); never cd. In a fresh worktree run the repo's setup (for example uv sync, npm ci --ignore-scripts when a link checker needs node_modules, git lfs pull when the item needs fixture data).decision: propose <id> with Status awaiting review, then change only that line to accepted and commit decision: accept <id>. Later fixes go in ## Errata only. Decision records never link to backlog items. An extension decision opens its Issue with the standard "extends" sentence, and the extended record gets an erratum (or an in-place line if still proposed). lint-docs requires ## Errata to come after ## References, so a frozen record that has no References section needs one added (a link to the new record) in the same commit as its first erratum.PLAN.md committed alone as plan: start <id>. TODO.md committed alone as todo: sync. To edit PLAN.md later without a work commit, use git commit --fixup=<plan commit> and GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash origin/main, before the first push of that history or with --force-with-lease.task) with a self-contained brief: absolute worktree path, files, exact API, tests, acceptance commands, and "do not commit, do not touch docs, do not edit the other checkout". Afterwards check git status in the main checkout is clean (a subagent once edited the wrong checkout), read the diff yourself, and fix or re-dispatch. You write the decision, design, CHANGELOG entry (if the repo keeps one), erratum and backlog deletion.
docs/design.md, add a CHANGELOG.md [Unreleased] line citing the decision if the repo keeps a CHANGELOG, delete the backlog file, and rewrite inbound links.just lint, just lint-docs, just lint-links, just lint-markdown, just lint-commits origin/main HEAD and just test (Bazel); do not stop at the fast test runner. Traps seen there, which may not apply to your repo:
BUILD.bazel; pytest passes and Bazel fails with ModuleNotFoundError;lint-markdown; put long log formats in a fenced block;just recipes take positional arguments, not name=value;.env via mise) can make unit tests fail that pass in CI, such as feed or threshold overrides; confirm by running the test on the unmodified branch before blaming the change;ruff format on test files subagents wrote.
Run slow suites in the background and carry on; do not poll.pr-create and pr-style: <type>(<scope>): <desc> of at most 70 characters, a Summary, a Changes list, and an Evidence section that says what was and was not exercised.blob/<sha>/<path>#L<a>-L<b> URL. If the reviewer model is unavailable, retry with a general agent told it is a reviewer. Validate every finding against the code and drop wrong ones with a one-line reason. In practice most findings are real (a stale reference, a timing flaw in a multi-order path) and some are half wrong. Post only the valid text.pr-post-review-findings (it skips the daily-note step if the note is absent), then fix, commit, push, reply in the thread (never edit the original comment) and resolve it. Look the thread id up by the first comment's databaseId in reviewThreads; going through node_id failed.gh pr checks <n> --watch --fail-fast=false, in the background. On failure, run ci-fix.git rm PLAN.md, commit plan: done <id>; git rm TODO.md, commit todo: clear; push; wait for CI again. Then gh pr ready, then pr-merge with the repo's method (merge commit where history uses them; an empty reviewDecision is not a blocker without branch protection). Then git pull --prune --rebase in the main checkout and remove the worktree (wt remove may say it is not registered when the PR flow already removed it; confirm with git worktree list).main. Update the todo list when each item merges.Only when the user asked for a release or a deploy; otherwise the batch ends at the last merge.
release: vX.Y.Z commit that renames [Unreleased], bumps every version file (and regenerates lockfiles), then PR, review, merge, tag, push the tag, watch the release run.deploy: <env> vX.Y.Z commit in the format of the previous deploy commit, via its own PR.docs/backlog/<slug>.md (with Priority:), not in the roadmap and not in decision bodies.git pull --rebase and git push.phatblat/dotfiles
4d65cab
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.