[WIP] Block self-assignment for a cooldown after an inactivity removal
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 58/100
- Issue 類型
- 功能
- 描述清晰度
- 描述清楚
- 活躍度
- 活躍
- 技術堆疊
- github, javascript
研究方向
Start with scripts/contributor-issue-comment.js and scripts/utils.js to trace how /assign checks recent unassignments, then read scripts/constants.js and scripts/unassign-inactive-issues.js for the cooldown window and bot message. Test the contributor cases in test-actions using the linked automation testing guide. Done means bot inactivity removals block self-assignment across community repos for seven days, while maintainer removals and self-drops keep their specified behavior.
由索引模型根據 Issue 內容生成。
描述
Overview
The weekly sweep unassigns a contributor for inactivity. The contributor comments /assign and
the bot assigns them again within hours. The removal carries no weight, and a contributor who was
waiting loses the issue.
Block self-assignment for a cooldown period after the bot removes a contributor for inactivity.
During the cooldown, only a maintainer can assign them. The block covers every issue in the
community repos, not only the issue they left.
Context
On learningequality/kolibri#14261, a maintainer unassigned a contributor on 2026-10-23 at 13:07
UTC. Someone else asked for the issue the next morning. At 05:04 UTC the removed contributor
asked to be assigned again, the bot replied "Comment /assign to assign yourself", and at 05:07
the bot assigned them. The maintainer removed them a second time on 2026-10-26.
scripts/contributor-issue-comment.js reads recent unassignments and adds them to the
assignment count instead of blocking:
const totalSlots = assignedIssues.length + filteredUnassignments.length;
if (totalSlots >= MAX_ASSIGNED_ISSUES) { ... }
MAX_ASSIGNED_ISSUES is 2, so one removal leaves a free slot and /assign passes.
getRecentUnassignments in scripts/utils.js reads event.assignee.login and ignores
event.actor.login, so it cannot tell who removed the contributor.
Two bot messages send the contributor back. BOT_MESSAGE_KEYWORD_GOOD_FIRST_ISSUE tells any
contributor to comment /assign, and the unassignment comment in
scripts/unassign-inactive-issues.js says "please message us here, and we'll assign you again".
The Change
Classify each unassignment by actor. Return unassignedBy from event.actor.login:
| Actor | Meaning | Effect |
|---|---|---|
| The contributor | Self-drop | Consumes a slot, as it does today |
learning-equality-bot[bot] |
Inactivity removal | Starts the cooldown |
| Anyone else | Not an inactivity removal | No cooldown |
Unassignment for inactivity belongs to the sweep, so the bot is the actor and no marker is
needed. A maintainer using the assignee menu starts no cooldown, because that removal was not
for inactivity.
Block /assign during the cooldown. Check it in handleAssignCommand before the limit
check. A block is not a slot, and the issue the contributor left is no exception. Only a
maintainer can assign them during the cooldown, by hand.
Add REMOVAL_COOLDOWN_DAYS to scripts/constants.js, set to 7.
getRecentUnassignments takes the longer of the two windows, and each rule reads its own.
Add a block message that names the days remaining and says that a maintainer can assign them
by hand. Send BOT_MESSAGE_KEYWORD_GOOD_FIRST_ISSUE only to a contributor who is not under
cooldown, and reword the unassignment comment to name the cooldown instead of promising
re-assignment.
Out of Scope
- Changing
MAX_ASSIGNED_ISSUES,ASSIGN_COOLDOWN_DAYS, or the 30-day inactivity threshold. - Blocking an assignment that a maintainer makes by hand.
- What counts as inactivity. That is #128.
Acceptance Criteria
- A contributor whom the bot removed for inactivity within the cooldown cannot self-assign
the issue they left, or any other issue in a community repo. - A maintainer can assign a contributor under cooldown by hand.
- A removal by a maintainer through the assignee menu starts no cooldown.
- A self-drop keeps the current behaviour, that is it consumes a slot and does not block.
- Once the cooldown expires,
/assignworks again. - The block message names the days remaining and does not tell the contributor to comment
/assign. - The bot does not post
BOT_MESSAGE_KEYWORD_GOOD_FIRST_ISSUEto a contributor under
cooldown. - The unassignment comment names the cooldown and promises no re-assignment.
Testing
Test in test-actions. See
testing the automations.
The contributor cases need an account outside the organization.
- Label an issue
help wantedandgood first issue, then comment/assignfrom the
contributor account. Expect an assignment. - Dispatch the sweep so that the bot unassigns the contributor, then comment
/assignagain.
Expect a refusal that names the days remaining. - Comment
/assignon a secondgood first issue. Expect the same refusal. - Assign the contributor by hand. Expect the assignment to hold.
- Unassign the contributor through the assignee menu, then comment
/assign. Expect an
assignment, because a maintainer removal starts no cooldown. - Unassign yourself from the contributor account, then comment
/assignon a second issue.
Expect an assignment, because one slot is free.
References
The real case is learningequality/kolibri#14261. #128 fixes what the sweep counts as inactivity,
and this issue depends on it, because the sweep is the actor that starts the cooldown.
AI usage
I used Claude Code to read the assignment gate, to trace the timeline of kolibri#14261, and to
confirm that getRecentUnassignments ignores the actor. I decided that the cooldown blocks
rather than consumes a slot, that it covers every issue, and that only an inactivity removal by
the bot starts it.
- 主要語言
- JavaScript
- 星號
- 1
- 分支
- 7
- 平均合併
- 2 天 1 小時
- 30 天內合併 PR
- 11
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
learningequality/.github 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 75/100
learningequality/.github#112 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 42/100
learningequality/.github#130 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 45/100
learningequality/.github#129 ·
維護者通常 1 天內回覆
-
難度 5/5 一週以上 新手友好度 24/100
learningequality/.github#128 ·
維護者通常 1 天內回覆
-
github_actions
難度 4/5 3-5 天 新手友好度 48/100
learningequality/.github#113 ·
維護者通常 1 天內回覆
查看 learningequality/.github 的全部 Issue
相似的 Issue
-
🐛 bug
難度 2/5 1-3 小時 新手友好度 78/100
LibreChat-AI/LibreChat#17887 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
liveshowy/webauthn_components#118 ·
-
難度 2/5 1-3 小時 新手友好度 86/100
showdownjs/showdown#1113 ·
-
難度 2/5 1-3 小時 新手友好度 82/100
dependents/node-precinct#167 ·
-
難度 2/5 1-3 小時 新手友好度 66/100
volumio/volumio-plugins-sources-bookworm#279 · 1 則留言 ·
維護者通常 1 天內回覆