Lane: work (issue-execution loop, up to 2 concurrent per-issue subagents)
Category: operational (throughput friction)
Triggering example
Each plugin follows a per-change convention: every PR bumps that plugin's .claude-plugin/plugin.json version AND prepends a CHANGELOG.md entry. Two independent issues on the SAME plugin therefore both edit the version line (same line) and both insert at the top of the CHANGELOG — a guaranteed textual conflict. In this session:
Net effect: the "up to 2 concurrent subagents" model collapses to serialized-per-plugin whenever the ready queue clusters on one plugin, and the second PR to merge always needs a rebase on the version/CHANGELOG lines.
Observed vs expected
- Observed: Per-change version bump + top-insert CHANGELOG makes concurrent same-plugin PRs conflict by construction. Orchestrator must track plugin "occupancy" and avoid parallel same-plugin picks, reducing effective concurrency.
- Expected: Concurrent PRs on the same plugin should not conflict on bookkeeping-only lines.
Suggested fix (options)
- Move version bumping to merge time (release step / CI) instead of per-PR, so PR branches never touch
plugin.json.
- Use a CHANGELOG fragment directory (e.g.
changelog.d/<pr>.md, towncrier-style) assembled at release, so entries never collide.
- Keep per-PR bumps but document the occupancy rule so pickers serialize same-plugin work deliberately.
Recommend (2) as the modern low-friction fix; (1) if a release step already exists.
Lane: work (issue-execution loop, up to 2 concurrent per-issue subagents)
Category: operational (throughput friction)
Triggering example
Each plugin follows a per-change convention: every PR bumps that plugin's
.claude-plugin/plugin.jsonversion AND prepends aCHANGELOG.mdentry. Two independent issues on the SAME plugin therefore both edit the version line (same line) and both insert at the top of the CHANGELOG — a guaranteed textual conflict. In this session:clean -fdxeven whenreset --hardfailed (partial destructive op) #394/PR#460 occupies the version file; siblings fix(repo-hygiene): git-tree-reset aborts withfatal: ambiguous argument '@{u}'on branches with deleted upstream #393/fix(repo-hygiene): git-tree-reset prints Applied* success lines even when git commands failed #395/fix(repo-hygiene): git-tree-reset dry-run doesn't validate@{u}, so dry-run success != apply success #396/feat(repo-hygiene): multi-repo clean/tree mode with skip-list + dirty guard #397 (which edit the samegit-tree-reset.sh) must queue behind its merge rather than run in parallel.Net effect: the "up to 2 concurrent subagents" model collapses to serialized-per-plugin whenever the ready queue clusters on one plugin, and the second PR to merge always needs a rebase on the version/CHANGELOG lines.
Observed vs expected
Suggested fix (options)
plugin.json.changelog.d/<pr>.md, towncrier-style) assembled at release, so entries never collide.Recommend (2) as the modern low-friction fix; (1) if a release step already exists.