Skip to content

Commit f69127b

Browse files
committed
feat(agents): pm-dispatch scaling — repo sharding for multi-PM, multi-account claims, batch:5 operating point
- Multiple PM sessions shard by whole repo, never share one queue (batch independence is only checked within one PM's view; the merge queue is one lane regardless). Scaling order: bigger batch + mode:cloud first, repo shard second, same-queue multi-PM prohibited. - Multiple GitHub accounts (colleagues' Claude Code) simplify claiming: assignee alone disambiguates across accounts; the claim-comment ritual is for sessions within one account. Partition by repo/label with a recorded assignment table. - batch:5 recorded as the maintainer's operating point, riding on the container resource discipline. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
1 parent 04e02cc commit f69127b

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

.claude/skills/pm-dispatch/SKILL.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,23 @@ known case: accepting a `repo:objectui` PR ⇒ file a `pm:queue` issue in
102102
`objectstack` — "run `pnpm objectui:refresh` and land the console bump",
103103
referencing the merged PR, blocked-by it until it actually merges.
104104

105-
**4. One board, no second tracker.** The pm labels above are the state
105+
**4. Multiple PM sessions shard by repo — never share one queue.** The
106+
claim protocol makes concurrent PMs *safe*, not *useful*: batch
107+
independence (file-disjointness) is only checked within one PM's view, so
108+
two PMs on the same queue can claim different issues that collide on
109+
shared files, and the merge queue is one lane regardless. Scaling order:
110+
111+
1. One PM, bigger batch (`batch:5` is the maintainer's chosen operating
112+
point, riding on the resource discipline above), heavy tasks via
113+
`mode:cloud` — adds compute without adding schedulers.
114+
2. When one PM genuinely can't keep up: a second session takes a **whole
115+
repo** as its shard (`/pm-dispatch repo:objectstack-ai/objectui`) —
116+
file universes are disjoint by construction. A sharded PM states its
117+
shard in every claim comment and **never claims outside it**; cross-repo
118+
parent/sub-issue chains stay with the main-backlog PM.
119+
3. Multiple PMs on the SAME queue: prohibited — all cost, no throughput.
120+
121+
**5. One board, no second tracker.** The pm labels above are the state
106122
machine; an org-level GitHub Project pulling issues/PRs from all three repos
107123
gives the maintainer a single view (filter by `repo:*` and `pm:*`). The PM
108124
maintains no tracking state outside GitHub — that invariant is what keeps
@@ -201,6 +217,16 @@ execute atomically, in order:
201217
Dev agents push their branch early — a remote branch is the hardest evidence
202218
of work in flight, closing the gap between "claimed" and "PR exists".
203219

220+
**Multiple GitHub accounts (colleagues' Claude Code sessions) simplify
221+
this, not complicate it.** Across accounts the assignee alone already says
222+
*who*: `assignee isn't you → taken, never touch` is the entire cross-account
223+
protocol, and it's already the rule. The claim-comment ritual (branch name,
224+
round, race check) matters *within* one account's sessions. When several
225+
accounts work the backlog, partition it the same way as multi-PM sharding —
226+
by repo or by an agreed label per account — and record the assignment table
227+
once in a pinned issue or the round report so nobody triages another
228+
account's shard.
229+
204230
**Stale-claim reclaim**: a claim older than ~24 h whose promised branch does
205231
not exist on the remote and has no PR is presumed dead — comment asking, and
206232
after another window of silence, remove the assignee (note why) and return

0 commit comments

Comments
 (0)