[CALCITE-7752] AGENTS.md should require an Assisted-by: commit trailer for AI-assisted work, rather than Co-Authored-By: - #5230
Open
vlsi wants to merge 1 commit into
Conversation
vlsi
force-pushed
the
claude/git-trailers-generated-code-856868
branch
from
August 29, 2026 20:13
d3ae88e to
35b31d0
Compare
vlsi
force-pushed
the
claude/git-trailers-generated-code-856868
branch
from
August 29, 2026 20:19
35b31d0 to
caecfd3
Compare
…ler for AI-assisted work, rather than `Co-Authored-By:` Six commits on main since June 2026 name a tool in a trailer, in four different spellings, five of them `Co-Authored-By:`. Git and GitHub read every name in that trailer as an author of the commit, so a tool listed there makes a claim about authorship rather than a note about tooling. 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. The heading is broad enough to hold the commit message rules that follow it. Assisted-by: Claude Code (claude-opus-5)
vlsi
force-pushed
the
claude/git-trailers-generated-code-856868
branch
from
August 29, 2026 20:24
caecfd3 to
156f6cb
Compare
Assisted-by: commit trailer for AI-assisted work, rather than Co-Authored-By:
|
Contributor
|
See my comments in the Jira case. |
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.



Fixes CALCITE-7752.
Calcite has no rule for disclosing AI tooling in a commit, and the gap already shows in
main. Six commits since June 2026 name a tool in a trailer, in four different spellings:Why
Git and GitHub read every name in
Co-authored-by:as an author of the commit, so a tool listed there makes a claim about authorship rather than a note about tooling. 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 line reaches our history 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.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. The kernel's first RFC proposedCo-developed-byand changed toAssisted-bybefore merging; Apache Impala's dev@ thread opened onGenerated-byand settled onAssisted-byfor the same reason, 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.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 8 in particular guards a defect this convention could otherwise introduce: a rule phrased as "never
Co-Authored-By:" can be read as licence to delete a human co-author, and no run here would have caught it.Scope
Documentation only; no code, no build change.
This brings Calcite 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 Calcite to decide is the exact wording, which is what this diff is.Assisted-by: Claude Code (claude-opus-5)