Name the lead, and have it take over a finished issue
mesh/merge-gate head 071fc1c29dce merged into trunk 21b79a04a283 — pass: the change touches no module of the mesh's graph
mesh/repo-check head 071fc1c29dce merged into trunk 21b79a04a283 — pass: its merge-check.sh passed
mesh/delivery delivered

A finished issue's agent is gone, so left in fixing it goes stale; the lead
takes it over until the feature is delivered. One repository is one
delivery, not a group; readiness comes from depends-on links (review
comment 12466).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 19:53:20 +00:00
co-authored by Claude Opus 5.5
parent c2d5323dea
commit 071fc1c29d
+14 -7
View File
@@ -26,6 +26,7 @@ One feature is **one branch name**, **one worktree per repo**, **one MR per repo
1. **Name the feature once.** `feat/<slug>`. The *same* branch name in every repo the feature
touches — never a different name per repo, never a fresh branch per increment within the
feature.
The feature branch is never protected and takes no pull request until step 4: a protected
branch forces a merge check on every merge into it, which is the waiting this playbook avoids.
@@ -47,15 +48,18 @@ One feature is **one branch name**, **one worktree per repo**, **one MR per repo
```
3. **Commit as you go — locally.** Increments land on the one branch. Nothing is pushed and no
MR is opened mid-feature.
The unit of work is an **issue**. Each commit message names the issue it fixes, such as
"Keep the assignments on the bus (issue 652)". No pull request, merge check, review or delivery
per issue.
4. **Finish, then publish.** When the whole feature is done — every repo, tests green — push
every branch and open **one MR per touched repo**, together.
Each repository's change gets one independent review before its MR opens; the checks run once,
on those MRs, and the feature is delivered as one delivery plan (the MRs share the branch name,
so they are one delivery group, ADR 0239).
on those MRs, and the feature is delivered as one delivery plan. MRs in two or more repositories
that share the branch name are one delivery group (ADR 0239 §2); a feature in one repository is
one delivery.
5. **Merge promptly, once approved.** Every merge into `main` is notified and approved
(ADR 0023); once it is, merge —
@@ -65,8 +69,9 @@ One feature is **one branch name**, **one worktree per repo**, **one MR per repo
## Working one feature with several agents
A large feature (a design's whole work) is fixed by several agents at once. The lead holds the
feature branch; the agents never push.
A large feature (a design's whole work) is fixed by several agents at once. The **lead** is the
session that runs the feature: it holds the feature branch, sends an agent per issue, and pushes,
reviews and delivers at the end. The agents never push.
- **One feature worktree per repository, held by the lead.** Each agent works on a local branch of
its own, in a worktree of its own, branched from the feature branch's current head.
@@ -75,11 +80,13 @@ feature branch; the agents never push.
feature branch under a lock (`flock <feature worktree>.lock git -C <feature worktree> merge
--ff-only <its branch>`). If another agent landed first, it merges again and repeats.
- **At most five issues are being fixed at once.** When one lands, the next ready issue starts at
once; the design's table of what waits for what says which are ready.
once; an issue is ready when every issue its `depends-on` links name has landed on the feature
branch.
- **An issue partly done goes back to `open`** with a note naming the commits that landed and what
is left, linked `depends-on` to what it waits for. An issue is never left in `fixing` while
nobody works on it. A finished issue stays in `fixing` until the feature's delivery, then is
resolved.
nobody works on it. A finished issue's agent is gone, so the lead takes it over in `fixing` (its
`by` names the lead) and keeps working it: it is resolved, with `fixed-by` naming the feature's
MRs, once the feature's delivery is done.
- **Two issues in one file:** keep both sides' behaviour; where both added tests or list lines in
one place, keep all of them. Never resolve code with a blind `git merge-file --union`: it can
interleave two functions' braces. Build and test after every resolution.