From: Harry Wentland <harry.wentland@amd.com>
To: Joe Perches <joe@perches.com>,
apw@canonical.com, linux-kernel@vger.kernel.org
Cc: dwaipayanray1@gmail.com, lukas.bulwahn@gmail.com,
Jonathan Corbet <corbet@lwn.net>,
Jani Nikula <jani.nikula@linux.intel.com>,
Alex Hung <alex.hung@amd.com>
Subject: Re: [PATCH] scripts/checkpatch: add Assisted-by: tag validation
Date: Fri, 27 Mar 2026 09:30:11 -0400 [thread overview]
Message-ID: <e423d1fd-d5bd-4ac0-81a9-4386acb41345@amd.com> (raw)
In-Reply-To: <76b7238d447fd4ef91936f2b49d2d3d27ef76525.camel@perches.com>
On 2026-03-26 19:59, Joe Perches wrote:
> On Thu, 2026-03-26 at 17:05 -0400, Harry Wentland wrote:
>> ```
>> The coding-assistants.rst documentation defines the Assisted-by: tag
>> format for AI-assisted contributions as:
>>
>> Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]
>>
>> This format does not use an email address, so checkpatch currently
>> reports a false positive about an invalid email when encountering this
>> tag.
>>
>> Add Assisted-by: to the recognized signature tags and standard signature
>> list. When an Assisted-by: tag is found, validate it instead of checking
>> for an email address. The validation accepts AGENT_NAME with an optional
>> :MODEL_VERSION,
>
> If the documented form is as shown above, the MODEL_VERSION should
> not be optional and should at least emit a warning.
>
Ack
>> followed by optional tool names which may themselves
>> carry a colon-separated version. MODEL_VERSION containing dots triggers
>> a warning suggesting hyphens per convention.
>
> Why?
>
> Assisted-by: FOO:BAR.baz
>
> seems reasonable to me. What's already in the logs can be ignored.
>
Ack. Tbh, I was being overly cautious and trying to align what
what's in the logs already.
>> Assisted-by: Claude:claude-opus-4-6
>
> Why was anything assisting this?
>
Because I don't know perl and each time I looked at checkpatch.pl
in the past I shied away. Because this change is still needed,
three months after the doc change (no one's fault, just wanted
to fix it). And because my employer provides access to these tools.
I'll talk to Alex and we'll send a v2.
Harry
>> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> []
>> @@ -3105,88 +3106,99 @@ sub process {
>> }
>> }
>>
>> - my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
>> - my $suggested_email = format_email(($email_name, $name_comment, $email_address, $comment));
>> - if ($suggested_email eq "") {
>> - ERROR("BAD_SIGN_OFF",
>> - "Unrecognized email address: '$email'\n" . $herecurr);
>> +# Assisted-by: uses format AGENT_NAME[:MODEL_VERSION] [TOOL1[:VER]] [TOOL2[:VER]] instead of email
>> + if ($sign_off =~ /^assisted-by:$/i) {
>> + if ($email !~ /^\S+(\s+\S+)*$/) {
>> + WARN("BAD_ASSISTED_BY",
>> + "Assisted-by: should use format: 'Assisted-by: AGENT_NAME[:MODEL_VERSION] [TOOL1[:VER]] [TOOL2[:VER]]'\n" . $herecurr);
>> + } elsif ($email =~ /^[^:\s]+:(\S+)/ && $1 =~ /\./) {
>> + WARN("BAD_ASSISTED_BY",
>> + "Assisted-by: MODEL_VERSION should use hyphens instead of dots: '$email'\n" . $herecurr);
>> + }
>> } else {
>
> Perhaps all of the changes below should be removed and next used above
>
>> - my $dequoted = $suggested_email;
>> - $dequoted =~ s/^"//;
>> - $dequoted =~ s/" </ </;
>> - # Don't force email to have quotes
>> - # Allow just an angle bracketed address
>> - if (!same_email_addresses($email, $suggested_email)) {
>> - if (WARN("BAD_SIGN_OFF",
>> - "email address '$email' might be better as '$suggested_email'\n" . $herecurr) &&
>> - $fix) {
>> - $fixed[$fixlinenr] =~ s/\Q$email\E/$suggested_email/;
>> + my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
>> + my $suggested_email = format_email(($email_name, $name_comment, $email_address, $comment));
>> + if ($suggested_email eq "") {
>> + ERROR("BAD_SIGN_OFF",
>> + "Unrecognized email address: '$email'\n" . $herecurr);
>> + } else {
>> + my $dequoted = $suggested_email;
>> + $dequoted =~ s/^"//;
>> + $dequoted =~ s/" </ </;
>> + # Don't force email to have quotes
>> + # Allow just an angle bracketed address
>> + if (!same_email_addresses($email, $suggested_email)) {
>> + if (WARN("BAD_SIGN_OFF",
>> + "email address '$email' might be better as '$suggested_email'\n" . $herecurr) &&
>> + $fix) {
>> + $fixed[$fixlinenr] =~ s/\Q$email\E/$suggested_email/;
>> + }
>> }
>> - }
>>
>> - # Address part shouldn't have comments
>> - my $stripped_address = $email_address;
>> - $stripped_address =~ s/\([^\(\)]*\)//g;
>> - if ($email_address ne $stripped_address) {
>> - if (WARN("BAD_SIGN_OFF",
>> - "address part of email should not have comments: '$email_address'\n" . $herecurr) &&
>> - $fix) {
>> - $fixed[$fixlinenr] =~ s/\Q$email_address\E/$stripped_address/;
>> + # Address part shouldn't have comments
>> + my $stripped_address = $email_address;
>> + $stripped_address =~ s/\([^\(\)]*\)//g;
>> + if ($email_address ne $stripped_address) {
>> + if (WARN("BAD_SIGN_OFF",
>> + "address part of email should not have comments: '$email_address'\n" . $herecurr) &&
>> + $fix) {
>> + $fixed[$fixlinenr] =~ s/\Q$email_address\E/$stripped_address/;
>> + }
>> }
>> - }
>>
>> - # Only one name comment should be allowed
>> - my $comment_count = () = $name_comment =~ /\([^\)]+\)/g;
>> - if ($comment_count > 1) {
>> - WARN("BAD_SIGN_OFF",
>> - "Use a single name comment in email: '$email'\n" . $herecurr);
>> - }
>> + # Only one name comment should be allowed
>> + my $comment_count = () = $name_comment =~ /\([^\)]+\)/g;
>> + if ($comment_count > 1) {
>> + WARN("BAD_SIGN_OFF",
>> + "Use a single name comment in email: '$email'\n" . $herecurr);
>> + }
>>
>>
>> - # [stable@vger.kernel.org](mailto:stable@vger.kernel.org) or [stable@kernel.org](mailto:stable@kernel.org) shouldn't
>> - # have an email name. In addition comments should strictly
>> - # begin with a #
>> - if ($email =~ /^.*stable\@(?:vger\.)?kernel\.org/i) {
>> - if (($comment ne "" && $comment !~ /^#.+/) ||
>> - ($email_name ne "")) {
>> - my $cur_name = $email_name;
>> + # [stable@vger.kernel.org](mailto:stable@vger.kernel.org) or [stable@kernel.org](mailto:stable@kernel.org) shouldn't
>> + # have an email name. In addition comments should strictly
>> + # begin with a #
>> + if ($email =~ /^.*stable\@(?:vger\.)?kernel\.org/i) {
>> + if (($comment ne "" && $comment !~ /^#.+/) ||
>> + ($email_name ne "")) {
>> + my $cur_name = $email_name;
>> + my $new_comment = $comment;
>> + $cur_name =~ s/[a-zA-Z\s\-\"]+//g;
>> +
>> + # Remove brackets enclosing comment text
>> + # and # from start of comments to get comment text
>> + $new_comment =~ s/^\((.*)\)$/$1/;
>> + $new_comment =~ s/^\[(.*)\]$/$1/;
>> + $new_comment =~ s/^[\s\#]+|\s+$//g;
>> +
>> + $new_comment = trim("$new_comment $cur_name") if ($cur_name ne $new_comment);
>> + $new_comment = " # $new_comment" if ($new_comment ne "");
>> + my $new_email = "$email_address$new_comment";
>> +
>> + if (WARN("BAD_STABLE_ADDRESS_STYLE",
>> + "Invalid email format for stable: '$email', prefer '$new_email'\n" . $herecurr) &&
>> + $fix) {
>> + $fixed[$fixlinenr] =~ s/\Q$email\E/$new_email/;
>> + }
>> + }
>> + } elsif ($comment ne "" && $comment !~ /^(?:#.+|\(.+\))$/) {
>> my $new_comment = $comment;
>> - $cur_name =~ s/[a-zA-Z\s\-\"]+//g;
>>
>> - # Remove brackets enclosing comment text
>> - # and # from start of comments to get comment text
>> - $new_comment =~ s/^\((.*)\)$/$1/;
>> + # Extract comment text from within brackets or
>> + # c89 style /*...*/ comments
>> $new_comment =~ s/^\[(.*)\]$/$1/;
>> - $new_comment =~ s/^[\s\#]+|\s+$//g;
>> + $new_comment =~ s/^\/\*(.*)\*\/$/$1/;
>>
>> - $new_comment = trim("$new_comment $cur_name") if ($cur_name ne $new_comment);
>> - $new_comment = " # $new_comment" if ($new_comment ne "");
>> - my $new_email = "$email_address$new_comment";
>> + $new_comment = trim($new_comment);
>> + $new_comment =~ s/^[^\w]$//; # Single lettered comment with non word character is usually a typo
>> + $new_comment = "($new_comment)" if ($new_comment ne "");
>> + my $new_email = format_email($email_name, $name_comment, $email_address, $new_comment);
>>
>> - if (WARN("BAD_STABLE_ADDRESS_STYLE",
>> - "Invalid email format for stable: '$email', prefer '$new_email'\n" . $herecurr) &&
>> + if (WARN("BAD_SIGN_OFF",
>> + "Unexpected content after email: '$email', should be: '$new_email'\n" . $herecurr) &&
>> $fix) {
>> $fixed[$fixlinenr] =~ s/\Q$email\E/$new_email/;
>> }
>> }
>> - } elsif ($comment ne "" && $comment !~ /^(?:#.+|\(.+\))$/) {
>> - my $new_comment = $comment;
>> -
>> - # Extract comment text from within brackets or
>> - # c89 style /*...*/ comments
>> - $new_comment =~ s/^\[(.*)\]$/$1/;
>> - $new_comment =~ s/^\/\*(.*)\*\/$/$1/;
>> -
>> - $new_comment = trim($new_comment);
>> - $new_comment =~ s/^[^\w]$//; # Single lettered comment with non word character is usually a typo
>> - $new_comment = "($new_comment)" if ($new_comment ne "");
>> - my $new_email = format_email($email_name, $name_comment, $email_address, $new_comment);
>> -
>> - if (WARN("BAD_SIGN_OFF",
>> - "Unexpected content after email: '$email', should be: '$new_email'\n" . $herecurr) &&
>> - $fix) {
>> - $fixed[$fixlinenr] =~ s/\Q$email\E/$new_email/;
>> - }
>> }
>> }
>>
>>
>> ```
prev parent reply other threads:[~2026-03-27 13:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 21:05 Harry Wentland
2026-03-26 23:59 ` Joe Perches
2026-03-27 13:30 ` Harry Wentland [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e423d1fd-d5bd-4ac0-81a9-4386acb41345@amd.com \
--to=harry.wentland@amd.com \
--cc=alex.hung@amd.com \
--cc=apw@canonical.com \
--cc=corbet@lwn.net \
--cc=dwaipayanray1@gmail.com \
--cc=jani.nikula@linux.intel.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox