docs: require an Assisted-by: commit trailer for AI-assisted work - #6760
docs: require an Assisted-by: commit trailer for AI-assisted work#6760vlsi wants to merge 1 commit into
Assisted-by: commit trailer for AI-assisted work#6760Conversation
Sixteen commits on master since March 2026 name a tool in a trailer, in two capitalizations of the key and four spellings of the model. Fifteen of them use `Co-authored-by:`, which in this same history carries nine human names. Git and GitHub read every name in that trailer as an author of the commit, so the field now does two different jobs and a reader cannot tell them apart. Adopt `Assisted-by:` for the disclosure the ASF generative tooling guidance asks for, matching the Linux kernel, Fedora, Rocky Linux, Mesa, Zephyr, and OpenInfra, and keep the author fields for people. The section is one sentence because every sentence in this file steers an agent. The wording is the one that passed the test matrix in the pull request; prose added around it changed what agents wrote, so the rationale lives in the pull request instead. Assisted-by: Claude Code (claude-opus-5)
|
Thanks for this PR, sounds good. Before merge, the PR does not mention the ASF Responsible AI initiative (rai.apache.org). It's probably important, because RAI was created to converge on exactly this question, and it currently points a different way:
So there are now three spellings in play, and this PR would add Assisted-by: as the 4th (as Apache Impala). Perhaps that will become an issue: if JMeter use own variant, at the moment the ASF is trying to unify the ecosystem. I suggest theses points:
Note for reference: Impala Confluence page (writing before the official create of ASF RAI) : |
JMeter has no rule for disclosing AI tooling in a commit, and the gap shows in
master. Sixteen commits since March 2026 name a tool in a trailer, in two capitalizations of the key and four spellings of the model:Why
Fifteen of those use
Co-authored-by:, and in this same history that trailer also carries nine human names. One field is doing two different jobs, and nothing in the message distinguishes them: git and GitHub read every name there as an author of the commit, so a tool listed there makes a claim about authorship rather than a note about tooling.The line arrives without anyone choosing it. Claude Code adds
Co-Authored-By:unlessattribution.commitsays otherwise, and VS Code 1.118 shipped Copilot as a commit co-author by default before reversing it. That is also why the spelling drifts: the model name comes from whichever build wrote the commit.The ASF generative tooling guidance asks for a token in the commit message and names
Generated-by:. The wider ecosystem settled onAssisted-by:for the ordinary case: the Linux kernel, Zephyr, Fedora, Rocky Linux, OpenInfra, and Mesa. Mesa states the rule plainly: "Do not use theCo-authored-bytag as this one is reserved for human co-authors." attrs closes any pull request that lists an LLM as a co-author, without further discussion. The kernel's first RFC proposedCo-developed-byand changed toAssisted-bybefore merging; inside the ASF, Apache Impala's dev@ thread opened onGenerated-byand settled onAssisted-by, on the grounds that a tool assists and does not author.The alternative, and why not it
Not every project takes the trailer route. Kubernetes forbids AI trailers outright —
Co-authored-by:,Assisted-by:andCo-developed-by:alike — and asks for a sentence in the pull request description instead, on the grounds that an AI cannot sign a CLA.That objection lands on a claim
Assisted-by:does not make. The trailer records which tool was used; the CLA is signed by the human in the author field, who is the same person either way. What differs is durability. A pull request description lives on GitHub, while a trailer lives in the commit, survives a mirror or an export, and is whatgit log --grepfinds years later. Of 1000 popular GitHub repositories surveyed in 2026, 118 had published an AI policy; 78% of those allow AI assistance and 51% require disclosure, so the question is where the disclosure goes, not whether there is one (arXiv:2605.16706).A reviewer who weighs that trade the other way should say so: this is the part of the proposal with a real competing design behind it.
What
AGENTS.mdgains a## Commit messagessection holding one sentence:The heading is deliberately broader than the rule: further commit message conventions belong under it rather than in a section of their own.
That is the whole change, and the brevity is deliberate. Every sentence in this file is read by an agent and changes what it writes, so the file carries the wording the matrix below actually tested and nothing else. Drafts of this change that surrounded the rule with rationale measurably changed agent output: a paragraph offering
Generated-by:as a second tier moved agents ontoGenerated-by:for a one-word typo fix. The reasoning therefore lives in this pull request, where it informs reviewers without steering tools.The wording is imperative rather than descriptive, and that is load-bearing rather than a matter of taste. An agent arrives with its own harness instruction to sign commits
Co-Authored-By:, and a descriptive line loses to it.The human contributor remains the author and remains responsible for the change under the ICLA. That is why the rule forbids
Co-Authored-By:for a tool rather than merely preferringAssisted-by:, and it needs no restating inAGENTS.md, since the trailer the file mandates already carries it.Generated-by:is deliberately left out, beyond the steering problem above: making the narrow label reachable for routine work defeats the distinction it exists to draw. A second tier is worth having, but its trigger needs wording an agent does not read as covering ordinary edits, and that wording needs its own run through the matrix. That is a follow-up, not a blocker for this one.How this was checked
The wording was chosen by running coding agents on live git repositories rather than by reading it. Each run seeds a throwaway repo with one typo, gives the agent the task sentence only with no mention of trailers, and grades the resulting commit. Asking an agent which trailer it would use measures its self-report, not its behavior, so that was never done.
Final matrix, one column per agent, at least three runs for every cell that had ever failed:
No
Co-Authored-By:line appeared in any run of the final wording. Earlier rungs of the ladder failed in ways worth recording, because each failure is what a shorter wording costs:Commit trailer: X, not Y, lost outright: Opus keptCo-Authored-By:and Sonnet emitted no trailer at all. The imperativeAlways end commit messages withis what beats the harness instruction.<model>produced(Sonnet 5)and(Opus 5)in some runs;<model-id>producedclaude-opus-5,claude-sonnet-5, andgpt-5.6-terrain every run, at no extra length. That is the axis this repository's history drifts on today.Keep existing trailers, Sonnet replaced another tool'sAssisted-by:with its own in one run of three. That is attribution loss, not formatting drift.including drafts, Codex omitted the trailer from a drafted message in one run of three; with it, three of three carried it.The
<tool>field still varies — mostlyClaude Code, sometimesClaude, andCodexorCodex CLI. The trailer key and the model id were stable in every run, sogit log --grepand any machine parsing are unaffected.One caveat on method. Codex reads
AGENTS.mditself, so that column is a direct measurement. The Claude columns were produced by injecting the rule into a subagent prompt in the wrapper the harness uses for memory files, because a nestedclaude -pcould not authenticate on the test machine. Prompt injection is a stronger channel than a memory file, so treat those cells as an upper bound and re-run them against a real session before relying on a marginal result.Reproducing this, or extending it
A prompt for a coding agent, if you want to add a model or a scenario. It is written to be handed over as-is.
Reproduction prompt
Scenarios 7 and 8 in that prompt were not run for this change and are the first thing worth adding. Scenario 7 matters here in particular: this repository's history already carries fifteen
Co-Authored-By:tool lines for an agent to imitate, and the matrix above was measured on pristine repositories.Scope
Documentation only; no code, no build change.
This brings JMeter in line with guidance that already exists rather than inventing a policy for it. The ASF asks contributors to name the tooling in the commit message; the choice of
Assisted-by:overCo-authored-by:is where the projects listed above have landed, and the ASF page predates agentic tooling and names onlyGenerated-by:. What is left for JMeter to decide is the exact wording, which is what this diff is.The same change is open for Calcite as apache/calcite#5230, with the same sentence.
Assisted-by: Claude Code (claude-opus-5)