feat(kanban): teach workers to flag collision hotspots instead of piling on
Adds the comment-based hotspot convention (no new primitives) across three guidance surfaces: - KANBAN_GUIDANCE worker lifecycle: new step 7 — when a file keeps colliding with siblings or appears in other cards' recent comments, leave a 'hotspot: <path> — <reason>' kanban_comment and repeat it in completion metadata so the orchestrator can decompose the file first. - kanban.md (en + zh-Hans): 'Collision hotspots in parallel campaigns' subsection — the convention, the orchestrator response (2+ flags on one path => dedicated decomposition card before queuing more work touching it), and the cross-link to merge-reconciler for conflicts that already happened. - merge-reconciler SKILL.md Pitfalls: repeated conflicts on the same file across rounds are a hotspot signal — flag for decomposition rather than serially reconciling. Live-verified: guidance renders once via real import (6152 chars); hotspot comment round-trips through add_comment -> list_comments -> worker context on an isolated HERMES_KANBAN_DB; kanban tools, review-surfaces, and merge-reconciler skill tests green (45 passed).
This commit is contained in:
parent
11b0271243
commit
b614f70361
|
|
@ -258,6 +258,12 @@ KANBAN_GUIDANCE = (
|
|||
"`kanban_create(title=..., assignee=<right-profile>, parents=[your-task-id])` "
|
||||
"to spawn a child task for the appropriate specialist profile instead of "
|
||||
"scope-creeping into the next thing.\n"
|
||||
"7. **Flag collision hotspots; don't pile on.** If your change keeps "
|
||||
"colliding with sibling branches in one file, or a file your diff touches "
|
||||
"shows up in other cards' recent comments, do not silently add more to it: "
|
||||
"leave a `kanban_comment` starting with `hotspot: <path> — <one-line reason>` "
|
||||
"on your card and repeat the flag in your completion metadata, so the "
|
||||
"orchestrator can decompose that file before more work lands on it.\n"
|
||||
"\n"
|
||||
"## Orchestrator mode\n"
|
||||
"\n"
|
||||
|
|
|
|||
|
|
@ -144,6 +144,10 @@ explicitly in the hand-back summary.
|
|||
- **Missing intents**: commit messages alone can be thin; prefer kanban
|
||||
completion summaries or PR bodies. If neither side's intent is recoverable,
|
||||
escalate instead of guessing.
|
||||
- **Repeat offenders**: repeated conflicts on the SAME file across rounds are
|
||||
a hotspot signal, not routine reconciliation work — flag it (e.g. a
|
||||
`hotspot: <path> — <reason>` kanban comment) so the orchestrator decomposes
|
||||
that file, rather than serially reconciling every new collision on it.
|
||||
|
||||
## Verification
|
||||
|
||||
|
|
|
|||
|
|
@ -958,6 +958,29 @@ it receives both diffs *and* both intents. The bundled
|
|||
gives that worker the full procedure: classify each conflicted hunk, resolve
|
||||
impartially, verify, and hand back a summary naming every decision.
|
||||
|
||||
### Collision hotspots in parallel campaigns
|
||||
|
||||
In wide campaigns some files become collision magnets: many workers each add a
|
||||
little to the same file, nobody owns keeping it small, and it turns into the
|
||||
site of constant merge conflicts. The mitigation is a comment convention, not a
|
||||
new primitive. A worker that notices its diff keeps colliding with siblings in
|
||||
one file — or that a file it touches keeps appearing in other cards' recent
|
||||
comments — should not silently pile on. Instead it leaves a comment on its own
|
||||
card with a recognizable prefix:
|
||||
|
||||
```
|
||||
hotspot: hermes_cli/kanban_db.py — third conflicting edit to the dispatch loop this wave
|
||||
```
|
||||
|
||||
and repeats the flag in its completion `metadata`. Orchestrators (or humans
|
||||
reviewing the board) who see **two or more `hotspot:` comments naming the same
|
||||
path** should create a dedicated refactor/decomposition card for that file
|
||||
**before** queuing more work that touches it — splitting the magnet file is
|
||||
cheaper than reconciling every future collision it would cause. For conflicts
|
||||
that have *already* happened, use the reconciliation-card pattern above with
|
||||
the `merge-reconciler` skill; hotspot flagging is the upstream fix that keeps
|
||||
the reconciler from becoming a standing lane.
|
||||
|
||||
## Multi-tenant usage
|
||||
|
||||
When one specialist fleet serves multiple businesses, tag each task with a tenant:
|
||||
|
|
|
|||
|
|
@ -703,6 +703,16 @@ EOF
|
|||
|
||||
在工程流水线(使用 worktree 的 P1/P2)中,两个 worker 的分支合并时可能发生冲突。不要让任一 worker 自行裁决 —— 发生冲突的 agent 缺乏对方的上下文,往往会覆盖对方的改动或放弃自己的改动。正确做法是:创建一张调解卡片,指派给**第三个中立配置文件**,并把**两张**冲突卡片都链接为其父任务:父任务链接会把双方的完成摘要带入调解者的上下文,使其同时获得双方的 diff *和*双方的意图。内置的 [`merge-reconciler` 技能](https://github.com/NousResearch/hermes-agent/blob/main/skills/autonomous-ai-agents/merge-reconciler/SKILL.md) 为该 worker 提供完整流程:对每个冲突块分类、公正地解决、验证,并在交回摘要中说明每一项决定。
|
||||
|
||||
### 并行战役中的碰撞热点(Collision hotspots)
|
||||
|
||||
在大规模并行战役中,某些文件会成为碰撞磁石:许多 worker 各自往同一个文件里添加一点内容,没有人负责保持它精简,它于是成为持续合并冲突的发生地。缓解方式是一种注释约定,而非新原语。当 worker 发现自己的 diff 在某个文件上不断与兄弟分支冲突,或它触碰的某个文件反复出现在其他卡片最近的评论中时,不应默默继续叠加改动,而应在自己的卡片上留下带有可识别前缀的评论:
|
||||
|
||||
```
|
||||
hotspot: hermes_cli/kanban_db.py — 本轮对 dispatch 循环的第三次冲突性编辑
|
||||
```
|
||||
|
||||
并在完成时的 `metadata` 中重复该标记。编排者(或查看看板的人类)如果看到**两条或更多 `hotspot:` 评论指向同一路径**,应在继续排入任何触碰该文件的工作**之前**,为该文件创建一张专门的重构/分解卡片 —— 拆分磁石文件比调解它未来引发的每一次冲突更便宜。对于*已经*发生的冲突,请使用上文的调解卡片模式配合 `merge-reconciler` 技能;hotspot 标记是上游修复,能避免调解者变成一条常设车道。
|
||||
|
||||
## 多租户使用
|
||||
|
||||
当一个专家团队为多个业务提供服务时,为每个任务添加租户标签:
|
||||
|
|
|
|||
Loading…
Reference in New Issue