Skip to content

Ask rtibblesbot to validate a contributor-opened issue - #126

Open
akolson wants to merge 8 commits into
mainfrom
issue-validation
Open

akolson wants to merge 8 commits into
mainfrom
issue-validation

Conversation

@akolson

@akolson akolson commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

Summary

A contributor opens an issue and nothing checks the claim in it. A maintainer has to read
the report and check it against the code before the issue can be labelled or worked.
learningequality/coding-agent#1229 is merged, so rtibblesbot can now validate an issue it
did not open.

The change

  • issue-validation runs on issues: [opened]. It posts one comment that mentions
    @rtibblesbot and adds community-issue-review, when the repo is in
    ISSUE_VALIDATION_REPOS, the opener is a contributor, and the label is not already on.
    That list is the community repos plus test-actions, so the automation can be exercised in
    the sandbox like every other one. The mention is load-bearing: the agent polls its
    notifications and holds no inbound endpoint, so nothing else reaches it.
  • issue-validation-done runs on issue_comment: [created]. It removes the label on a
    comment that carries <!-- ISSUE_VALIDATION --> and comes from rtibblesbot. Both are
    needed, because the marker is plain text that anyone can paste, and the bot comments on
    issues for other reasons. The leaf tests both conditions in its job if: as well,
    following resolve-bot-pr-threads, so an ordinary comment starts no runner.
  • A sweep in the weekly run clears a label older than ISSUE_REVIEW_MAX_DAYS. It sits in
    its own module, because unassign-inactive-issues skips every issue with no assignees, and
    an issue under review normally has none.
  • morango joins PR_STATS_REPOS. It takes contributions from time to time, and the gate
    reads that list through COMMUNITY_REPOS. It therefore also joins the weekly statistics
    report and the cross-repo assignment count.
  • addLabel and removeLabel in utils.js, shared by all three paths. A failed label
    call warns and the run still passes.
  • Tests for the shared contributor gate, which decides who reaches this automation and
    had none. They cover six leaves, not just this one.
  • Neither automation closes the issue, and neither acts on what the check finds.

References

Closes #114.

learningequality/coding-agent#1229 added the validation and owns the marker. rtibbles ran
it by hand on learningequality/kolibri#15639, which returned a verdict carrying the marker.

automation-template.yml did not change, because both events were already in the on:
union, so consumers need no sync for the triggers. automation-group-issue-comment.yml is
new: the generator groups automations that share triggers, and issue_comment had one member
until now.

Reviewer guidance

  1. yarn test. Expect 154 passing, 32 of them new.
  2. Read scripts/issue-validation-done.js. Check that the label comes off only on the marker
    plus the author.
  3. After merging, open an issue in test-actions from an account outside the organization.
    Expect one comment that mentions @rtibblesbot, and the label.
  4. Open an issue in test-actions as a core team member. Expect no comment and no label.
  5. Comment as rtibblesbot with the marker. Expect the label to come off. Comment without
    it. Expect the label to stay on.
  6. Lower ISSUE_REVIEW_MAX_DAYS, then dispatch unassign-inactive-issues. Expect the label
    to come off.

Steps 3 to 6 can only run after this merges, because the leaf is called at @main.

AI usage

I used Claude Code to write the two automations, the sweep and their tests, and to run the
suite, eslint and prek. I decided the label, the marker contract, the comment text, and
that the contributor gate stays in the shared is-contributor job. I reviewed the diff.

A contributor opens an issue and nothing checks the claim in it. rtibblesbot
can now validate an issue it did not open, so ask it on every contributor
issue and mark the issue while the check runs.

The comment mentions the bot outside backticks. The agent polls its
notifications and holds no inbound endpoint, so the mention is the only way
to reach it.

The label comes off on a comment that carries the marker and comes from
rtibblesbot. The marker alone is not enough, because it is plain text that
anyone can paste.
If the agent never answers, the label stays on and tells a maintainer
nothing. The weekly run now clears a label older than
ISSUE_REVIEW_MAX_DAYS.

The sweep lives in its own module because unassign-inactive-issues skips
every issue with no assignees, and an issue under review normally has none.
The pre-commit hooks did not run when 30c7939 landed, so prettier wanted
these two files reformatted.
The contributor, core member and bot cases decide which issues reach the new
validation automation, and nothing tested them. The gate is shared by six
leaves, so these tests cover all of them.
@akolson
akolson requested review from a team and leq-bot October 26, 2026 08:49
morango takes contributions from time to time, so validation must reach it.
COMMUNITY_REPOS is an alias of PR_STATS_REPOS, so morango also joins the
weekly statistics report and the cross-repo assignment count.

The gate now reads ISSUE_VALIDATION_REPOS, which adds test-actions. The old
gate did not name it, so the automation could not be tested where every
other one is tested.

The label job now tests the author and the marker in its condition, as
resolve-bot-pr-threads does. Every comment in every consumer used to
generate a token, check out this repo and install dependencies before the
script returned.
@akolson
akolson requested a review from rtibblesbot October 26, 2026 10:32
@rtibblesbot

rtibblesbot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

🟡 Waiting for changes

Outcome: reviewed 625368c

Last updated: 2026-10-26 11:33 UTC

@rtibblesbot rtibblesbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #126: the validation, done and sweep automations meet #114. Their failure paths warn and carry on without failing the run. CI passing.

  • suggestion: adding morango changes two unrelated automations (inline).
  • suggestion: two gaps in the sweep's test fake (inline).
  • nitpick: two tests repeat cases already covered (inline).

Next step: Needs a full code review by a human engineer.

  • Workflow steps changed: .github/workflows/automation-group-issue-comment.yml, .github/workflows/automation-group-issues.yml, .github/workflows/automation.yml, .github/workflows/issue-validation-done.yml, .github/workflows/issue-validation.yml.
  • Decide whether adding morango to PR_STATS_REPOS should change the Slack stats and the assignment-limit counts.
  • Decide whether the 3-day ISSUE_REVIEW_MAX_DAYS timeout for the stale community-issue-review label is the right one.

Written by rtibblesbot, an LLM-based coding agent.

Comment thread scripts/constants.js
Comment thread scripts/issue-review-sweep.test.js Outdated
Comment thread scripts/issue-review-sweep.test.js
Comment thread scripts/issue-validation-done.test.js Outdated
Comment thread scripts/issue-validation.test.js
The sweep's fake listing ignored the label filter, so removing that filter
failed no test. Without it the sweep reads an old labeled event on an issue
whose label is already gone, gets a 404 from the removal, and reports
clearing a label the issue never had.

The fake removal always succeeded, so a failed removal was untested.

The bot-account case took the same branch as the contributor case, so it
guarded nothing.
@akolson
akolson requested a review from rtibblesbot October 26, 2026 11:27

@rtibblesbot rtibblesbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #126 has no new findings. All 5 prior findings are resolved or acknowledged. CI is passing.

Prior-finding status

ACKNOWLEDGED — scripts/constants.js:182 — morango also added to two other automations
RESOLVED — scripts/issue-review-sweep.test.js — label filter not covered
RESOLVED — scripts/issue-review-sweep.test.js:55 — failed label removal not covered
RESOLVED — scripts/issue-validation-done.test.js — duplicate other-author case
ACKNOWLEDGED — scripts/issue-validation.test.js:87 — repeats community-repo case

Next step: Needs a full code review by a human engineer.

  • Workflow steps changed: .github/workflows/automation-group-issue-comment.yml, .github/workflows/automation-group-issues.yml, .github/workflows/automation.yml, .github/workflows/issue-validation-done.yml, .github/workflows/issue-validation.yml.

Written by rtibblesbot, an LLM-based coding agent.

@akolson
akolson requested a review from rtibbles October 26, 2026 12:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ask rtibblesbot to validate a contributor-opened issue

2 participants