Pickup Ticket
Create the child ticket branch and worktree from the epic branch. This skill is the implementation pickup gate; it must refuse tickets missing readiness labels.
Under Florist this skill does not run — it holds no seat. The kernel creates the unit worktree on unit/<FLORIST_UNIT> from FLORIST_EPIC_BRANCH at the implementing dispatch, and readiness is the unit's lane, not a label (epic-orchestrator/florist-worker-contract.md § 9).
Contract
| Trigger |
Inputs |
Outputs |
Durable writes |
Allowed delegation |
Failure states |
child has ready-to-implement |
ticket id, epic branch/worktree, repo path, clean spec, clean plan |
child branch and child worktree based on epic branch |
ticket comment with child branch/worktree |
none by default |
stale epic branch, branch conflict, dirty worktree, missing readiness labels |
Inputs
- ticket id
- repo path
- epic branch and worktree
- clean spec artifact
- clean plan artifact
spec-ready and ready-to-implement labels
Process
- Verify spec-ready and ready-to-implement are present.
- Refresh the epic branch before branching.
- Default the child worktree to a sibling directory of the repo —
../<repo-name>-<ticket-id> — matching the plain pickup skill's convention, unless a child worktree path was given as input. Never nest the worktree inside the repo tree itself (e.g. not <repo>/worktrees/...): a worktree nested inside the repo shows up as untracked repo content and can get walked by the repo's own tooling.
- Create the child branch and child worktree from the epic branch.
- Name the child branch
<user>/<ticket-id>-<slug> with the ticket id lowercase (the PM system's branch-name format, e.g. mike/dodi-123-instantly-webhook) — this is what lets the PM system's GitHub integration attach PR state to the ticket automatically.
- Record the created branch and the child worktree path as an absolute path before implementation starts — the lane's dispatch manifest anchors to this absolute path (agent cwd resets between Bash calls, so a relative path is fiction for the lane). The lane's first
.dodi/ manifest write self-creates <child-worktree-abs>/.dodi/.gitignore containing * (same self-ignoring behavior as the driver's — the first manifest write in any worktree owns the ignore-file creation), so the lane worktree never leaks .dodi/ into git.
- Do not branch from main or master for child ticket work.
- Do not create PRs or merge branches from this step; the deliver-ticket lane owns the PR stage and the orchestrator owns merges.
Evidence
- Record ticket id, epic branch, child branch, child worktree (absolute path), spec artifact, and plan artifact.
- Record readiness labels and latest epic branch sync evidence.
Stop Conditions
- Stop on missing readiness labels, stale epic branch, branch conflict, or dirty worktree.
- Stop if spec or plan artifacts are missing or not clean.
- Stop if branch creation would overwrite local work.
- Stop at
ready-for-child-pr only after local implementation, review, tests, and verification (incl. repo-local checks) complete.
1---2name: pickup-ticket3description: Use when a child ticket is ready to implement and needs a child branch and worktree created from the epic branch4---56# Pickup Ticket78Create the child ticket branch and worktree from the epic branch. This skill is the implementation pickup gate; it must refuse tickets missing readiness labels.910Under Florist this skill does not run — it holds no seat. The kernel creates the unit worktree on `unit/<FLORIST_UNIT>` from `FLORIST_EPIC_BRANCH` at the `implementing` dispatch, and readiness is the unit's lane, not a label (`epic-orchestrator/florist-worker-contract.md` § 9).1112## Contract1314| Trigger | Inputs | Outputs | Durable writes | Allowed delegation | Failure states |15| --- | --- | --- | --- | --- | --- |16| child has `ready-to-implement` | ticket id, epic branch/worktree, repo path, clean spec, clean plan | child branch and child worktree based on epic branch | ticket comment with child branch/worktree | none by default | stale epic branch, branch conflict, dirty worktree, missing readiness labels |1718## Inputs1920- ticket id21- repo path22- epic branch and worktree23- clean spec artifact24- clean plan artifact25- `spec-ready` and `ready-to-implement` labels2627## Process2829- Verify spec-ready and ready-to-implement are present.30- Refresh the epic branch before branching.31- Default the child worktree to a sibling directory of the repo — `../<repo-name>-<ticket-id>` — matching the plain pickup skill's convention, unless a child worktree path was given as input. Never nest the worktree inside the repo tree itself (e.g. not `<repo>/worktrees/...`): a worktree nested inside the repo shows up as untracked repo content and can get walked by the repo's own tooling.32- Create the child branch and child worktree from the epic branch.33- Name the child branch `<user>/<ticket-id>-<slug>` with the ticket id lowercase (the PM system's branch-name format, e.g. `mike/dodi-123-instantly-webhook`) — this is what lets the PM system's GitHub integration attach PR state to the ticket automatically.34- Record the created branch and the child worktree path **as an absolute path** before implementation starts — the lane's dispatch manifest anchors to this absolute path (agent cwd resets between Bash calls, so a relative path is fiction for the lane). The lane's first `.dodi/` manifest write self-creates `<child-worktree-abs>/.dodi/.gitignore` containing `*` (same self-ignoring behavior as the driver's — the first manifest write in _any_ worktree owns the ignore-file creation), so the lane worktree never leaks `.dodi/` into git.35- Do not branch from main or master for child ticket work.36- Do not create PRs or merge branches from this step; the deliver-ticket lane owns the PR stage and the orchestrator owns merges.3738## Evidence3940- Record ticket id, epic branch, child branch, child worktree (absolute path), spec artifact, and plan artifact.41- Record readiness labels and latest epic branch sync evidence.4243## Stop Conditions4445- Stop on missing readiness labels, stale epic branch, branch conflict, or dirty worktree.46- Stop if spec or plan artifacts are missing or not clean.47- Stop if branch creation would overwrite local work.48- Stop at `ready-for-child-pr` only after local implementation, review, tests, and verification (incl. repo-local checks) complete.