You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit cfe210d
Browse filesBrowse the repository at this point in the historyBrowse files
🐛 [v6] contributor-first: a relay busy for another hive does not cover this hive's lane
A relay subscribed to several hives works one task at a time. While that
task belonged to hive B, hive A still saw a connected relay holding its
"Acting as" role with a fresh heartbeat and no refusal, so RoleCoverage
counted it as contributor-first cover and A's resident agent stayed
withheld while nobody worked A's lane.
The relay now tells every other hub that advertises the new
busy_elsewhere_v1 capability when it starts and finishes another hive's
task (state busy/clear plus the task's start time; no hive, repo or issue).
It restates on auth_ok and clears on complete, fail and revoke, since all
of those end in writeRelayStatus. The hub records the flag per connection,
clears it on the relay's next ready, and RoleCoverage skips a busy-elsewhere
connection that holds no task or fix-pr task from this hub. No wall-clock
expiry: the flag dies with the connection, and a stale flag can only fall
back to the resident agent working the lane. Old relays and old hubs keep
today's behaviour.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BQYnPGFJx81c8JXR3o1sg1
Signed-off-by: Danathar <Danathar@users.noreply.github.com>
- Contributor-first lanes are no longer left unworked by a relay that is busy on another hive. A relay subscribed to several hives works one task at a time, and while that task belonged to another hive it still looked to this one like a connected relay holding its role, so the governor kept the resident agent's kicks withheld while nobody worked the lane (seen on 2026-11-09: a relay set "Acting as: scanner" on one hive worked another hive's tasks for seven minutes and sent the first hive no request for work). Relays now tell every other hive that advertises the new `busy_elsewhere_v1` capability when they start and finish another hive's task, and the hub leaves such a relay out of coverage until the task ends or the relay asks it for work again. The frame names no hive, repository or issue. Older relays and older hubs behave as before.
| 27 | Completed-task ledger + per-task cooldowns + PR URLs |`completedTasks` / `completedTaskCooldown` / `completedTaskPRURL` (`contribute_ws.go:975`), persisted to `/data/contributors/completed-tasks.json`| Survives; was moved to the PVC ledger through the #3792 → #3989 lineage after re-offer loops |**fixed**|
183
+
| 27 | Completed-task ledger + per-task cooldowns + PR URLs |`completedTasks` / `completedTaskCooldown` / `completedTaskPRURL` (`contribute_ws.go:985`), persisted to `/data/contributors/completed-tasks.json`| Survives; was moved to the PVC ledger through the #3792 → #3989 lineage after re-offer loops |**fixed**|
184
184
| 28 | Failure cooldowns + quarantine counters |`failedTasks` / `consecutiveFailures` (`:373`, `:381`), persisted to `/data/contributors/failed-tasks.json`| Survives (#2435 livelock fix, made durable with the ledger) |**fixed**|
185
185
| 29 | No-PR completion streaks |`noPRStreaks` (`:394`), `/data/contributors/no-pr-streaks.json`| Survives (#3980; geometric backoff must outlive the completion entry it escalates) |**fixed**|
186
186
| 30 |`no_work_needed` verdicts |`noWorkVerdicts` (`:416`), `/data/contributors/no-work-verdicts.json`| Survives (#3987/#3997) — "persisted in the same PVC-backed ledger dir as the cooldowns so a pod restart does not forget the verdict" |**fixed**|
0 commit comments