CAA: accept recheck, the recovery path the bot already advertises#164
Merged
Conversation
The action tells contributors they can retrigger the check by commenting `recheck`. `suggest-recheck` defaults to true, so every "please sign" comment it posts ends with "You can retrigger this bot by commenting recheck in this Pull Request". The step gate never accepted that comment. A contributor who followed the instruction got nothing back: no job, no run, no log, no error, because a step whose `if` does not match is never scheduled at all. Accept `recheck` alongside the signature sentence, inside the same pull-request guard, so it cannot reintroduce the issue-thread failure. `recheck` records nothing by itself. It re-runs the action, which re-reads this PR's commit authors and the signature ledger and restates the verdict. That matters more here than in a stock CLA Assistant setup, because the ledger is org-wide and shared: signing on one pull request does not re-evaluate another pull request the same contributor already has open, and a signature appended to the ledger by hand -- which this file documents as the procedure for the signatures the automation cannot record -- does not re-evaluate anything anywhere. Short of pushing another commit, `recheck` was the only way to clear either, and it was not reachable. Compared with `==` rather than `contains`, deliberately: the action's own comment quotes the word `recheck`, and a substring test would let the workflow retrigger on the bot's output. The alternative fix was `suggest-recheck: false`, which would stop the action advertising the path. Rejected: the capability is worth having, and it is what this file's own "recording a signature by hand" procedure now ends in. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The CAA bot ends every "please sign" comment with:
Commenting
recheckdoes nothing. It has never done anything, in any repo inthis org.
Why
suggest-recheckis an input oncontributor-assistant/github-actionand itdefaults to
true(action.yml), so the sentence above is appended to thecomment unless we turn it off. We never set the input, so it is on.
But the action has no
recheckhandling of its own —src/main.tsjust callssetupClaCheck().recheckworks purely by starting the workflow again: theaction re-reads the PR's commit authors and re-scans the comments, and the
verdict comes out different because the ledger has changed since last time. So
whether
recheckworks is decided entirely by our step gate, and ours only everadmitted the signature sentence:
A
recheckcomment matches nothing, so the step is not scheduled. A skippedstep produces no log and no annotation, so the contributor sees no run at all —
they just get silence from a bot that told them what to type. Upstream's own
README carries the clause we are missing (
github-action/README.md:40).Why this is worth fixing rather than switching the suggestion off
recheckis the only thing that re-evaluates an already-open pull requestwithout pushing a commit to it, and this setup produces that situation on
purpose:
leaves the other red. Nothing re-runs it.
that: signatures posted on an issue, or carrying extra text, get appended to
signatures/caa.jsonmanually. Appending to the ledger fires no event in thelibrary repo, so the red check stays red.
recheckis the natural last stepof that procedure — and it was the one step that did not work.
Setting
suggest-recheck: falsewould make the docs honest, but it removes acapability we have a live use for. So: fix the gate.
The change
Two details:
rechecksits inside thegithub.event.issue.pull_request != nullguard,so it cannot reintroduce the issue-thread crash this branch's parent PR fixes.
==, notcontains. The bot's own comment contains the wordrecheck; a substring test would have the workflow retrigger on its ownoutput.
Also documents
recheckin the header, including one case it quietly recovers:the action compares
body.trim().toLowerCase()against the sign comment, whilethe gate is exact, so a signature differing only in capitalisation or
surrounding whitespace satisfies the action but never reaches it. Today that
signature is lost silently — it does not even trip the manual-recording warning,
whose
containscheck is case-sensitive. Withrecheckreachable, thecontributor can recover it themselves.
Behaviour
Simulated over the representative events;
issuefixis this PR's base branch.recheckon a PRrecheckon a plain issueExactly one row changes against the base branch. Everything else is untouched.
Verification
v2.6.1(the repo is archived;v2.6.1, 2024-09-26, isits final release). Confirmed
suggest-recheckdefaults totrueinaction.yml, that the suggestion is appended insrc/pullrequest/pullRequestCommentContent.ts:99, and that norecheckhandling exists anywhere in
src/— the string appears only in that commenttext and in the README's example gate.
recheckcomments have ever beenposted, so nothing regressed — the path was simply never exercised. (Control:
the same search finds 6 threads containing the signature sentence.)
cla.ymlrun history across all repos. No run has ever been triggeredby a
recheckcomment.Relationship to the issue-thread fix
This was opened stacked on
fix/caa-workflow-issue-comments, which rewrites thissame
if:expression and this same file header. That branch has since beensquash-merged, so this is now rebased directly onto
mainand contains a singlecommit. The
recheckclause sits inside the pull-request guard that branchintroduced, so the two changes compose rather than collide.
🤖 Generated with Claude Code
Supersedes #163, which was opened stacked on
fix/caa-workflow-issue-commentsandwas auto-closed when that branch merged and was deleted. Same commit, rebased onto
main; GitHub will not let a closed PR be retargeted or reopened once its basebranch is gone.