Skip to content

[WIP] Assign a validated contributor issue to the contributor who opened it #130

Open

Description

@akolson

❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Overview

A contributor opens an issue, rtibblesbot checks it, and the verdict says the claim holds. The
contributor who found the problem then has to ask to work on it, and anyone else can take it
first.

Assign the issue to the contributor who opened it when the verdict confirms the claim.

Context

scripts/issue-validation-done.js already runs on the right event. It fires on
issue_comment created, checks that the author is rtibblesbot and that the body carries the
<!-- ISSUE_VALIDATION --> marker, then removes the community-issue-review label. It reads no
verdict today.

The verdict is already in the comment. learningequality/coding-agent#1229 fixes a closed
vocabulary of six values:

Verdict Meaning
claim holds the reported behavior is in the code or the history
claim does not hold the code does something other than the report states
duplicate of #N an open issue, or one closed in the last 30 days, covers it
already fixed the default branch carries the fix
not enough information the report lacks what a check needs
out of scope not this repository, or a support question

The comment states it on the first content line after the marker, as
**Verdict:** claim holds.

The Change

Read the verdict in scripts/issue-validation-done.js. Match the verdict line exactly.
claim holds is the only value that leads to an assignment. An unrecognized verdict assigns
nobody, and the label still comes off.

Assign the issue author. Use github.event.issue.user.login. Skip the assignment when the
author is an organization member, a site admin or a bot, and when the issue already carries an
assignee.

Apply the same gates as /assign. The MAX_ASSIGNED_ISSUES limit and the cooldown from
#127 both hold. A contributor at the limit, or under cooldown, is not assigned. Extract the gate
from handleAssignCommand in scripts/contributor-issue-comment.js into a shared helper, so one
piece of code answers "can this contributor take an issue right now" for both paths.

Tell the contributor either way. On a successful assignment, post
BOT_MESSAGE_ASSIGN_SUCCESS, which already tells them to link a pull request and to unassign
themselves if they cannot continue. When a gate blocks the assignment, post the existing at-limit
message, so the reporter is not left guessing.

Run in ISSUE_VALIDATION_REPOS. The same list the validation request uses.

Open question for the maintainers

Self-assignment through /assign works only on an issue labeled help wanted and
good first issue. A freshly opened issue carries neither, because a maintainer adds them during
triage. So this change assigns a contributor to an issue that nobody has yet judged suitable for
contribution, and the claim holding says only that the bug is real, not that it is a reasonable
first task.

Two ways to read the intent:

  1. Assign on the verdict alone. The person who found the problem gets first refusal, and a
    maintainer who disagrees unassigns them during triage.
  2. Assign once a maintainer marks the issue open for contribution. The trigger becomes the
    help wanted label on an issue that already carries a claim holds verdict, rather than the
    verdict itself.

This issue is written for option 1, which is the literal request. Option 2 needs a second
trigger on the labeled event.

Out of Scope

  • Changing the verdict vocabulary, which belongs to learningequality/coding-agent.
  • Changing MAX_ASSIGNED_ISSUES or the cooldown.
  • Assigning anyone other than the issue author.
  • Closing an issue on a duplicate of #N, already fixed or out of scope verdict. The
    comment recommends a close and a maintainer decides.

Acceptance Criteria

  • A claim holds verdict on a contributor's issue assigns that contributor.
  • Each of the other five verdicts assigns nobody.
  • An unrecognized or absent verdict assigns nobody, and the review label still comes off.
  • A comment from anyone other than rtibblesbot assigns nobody.
  • A comment with no marker assigns nobody.
  • An issue opened by an organization member, a site admin or a bot assigns nobody.
  • An issue that already carries an assignee is left alone.
  • A contributor at MAX_ASSIGNED_ISSUES is not assigned, and receives the at-limit message.
  • A contributor under the [WIP] Block self-assignment for a cooldown after an inactivity removal #127 cooldown is not assigned.
  • A successful assignment posts BOT_MESSAGE_ASSIGN_SUCCESS.
  • The repository gate is ISSUE_VALIDATION_REPOS.
  • /assign and this path share one gate helper.

Testing

Test in test-actions. See
testing the automations.
The contributor cases need an account outside the organization.

  1. Open an issue from the contributor account and let the validation run. On a claim holds
    verdict, expect the contributor to be assigned and the review label to come off.
  2. Post a comment carrying the marker and a claim does not hold verdict from a maintainer
    account. Expect no assignment, because the author is not rtibblesbot.
  3. Assign the contributor to two other issues first, then repeat step 1. Expect no assignment and
    the at-limit message.
  4. Open an issue from a maintainer account and repeat step 1. Expect no assignment.

References

The marker and the verdict vocabulary come from learningequality/coding-agent#1229. #126 added
the validation request and the label that this path clears. The cooldown is #127.

AI usage

I used Claude Code to read scripts/issue-validation-done.js, to pull the six verdicts from the
agent-side contract, and to confirm the verdict line format against the live comment on
learningequality/kolibri#15639. I decided that the existing assignment gates apply unchanged, and
I raised the triage question above rather than settling it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions