============================================
Kernel Guidelines for Tool-Generated Content
============================================

Purpose
=======

Kernel contributors have been using tooling to generate contributions
for a long time. These tools can increase the volume of contributions.
At the same time, reviewer and maintainer bandwidth is a scarce
resource. Understanding which portions of a contribution come from
humans versus tools is helpful to maintain those resources and keep
kernel development healthy.

The goal here is to clarify community expectations around tools. This
lets everyone become more productive while also maintaining high
degrees of trust between submitters and reviewers.

Out of Scope
============

These guidelines do not apply to tools that make trivial tweaks to
preexisting content. Nor do they pertain to tooling that helps with
menial tasks. Some examples:

 - Spelling and grammar fix ups, like rephrasing to imperative voice
 - Typing aids like identifier completion, common boilerplate or
   trivial pattern completion
 - Purely mechanical transformations like variable renaming
 - Reformatting, like running Lindent, ``clang-format`` or
   ``rust-fmt``

Even whenever your tool use is out of scope, you should still always
consider if it would help reviewing your contribution if the reviewer
knows about the tool that you used.

In Scope
========

These guidelines apply when a meaningful amount of content in a kernel
contribution was not written by a person in the Signed-off-by chain,
but was instead created by a tool.

Detection of a problem and testing the fix for it is also part of the
development process; if a tool was used to find a problem addressed by
a change, that should be noted in the changelog. This not only gives
credit where it is due, it also helps fellow developers find out about
these tools.

Some examples:
 - Any tool-suggested fix such as ``checkpatch.pl --fix``
 - Coccinelle scripts
 - A chatbot generated a new function in your patch to sort list entries.
 - A .c file in the patch was originally generated by a coding
   assistant but cleaned up by hand.
 - The changelog was generated by handing the patch to a generative AI
   tool and asking it to write the changelog.
 - The changelog was translated from another language.

If in doubt, choose transparency and assume these guidelines apply to
your contribution.

Guidelines
==========

First, read the Developer's Certificate of Origin:
Documentation/process/submitting-patches.rst. Its rules are simple
and have been in place for a long time. They have covered many
tool-generated contributions. Ensure that you understand your entire
submission and are prepared to respond to review comments.

Second, when making a contribution, be transparent about the origin of
content in cover letters and changelogs. You can be more transparent
by adding information like this:

 - What tools were used?
 - The input to the tools you used, like the Coccinelle source script.
 - If code was largely generated from a single or short set of
   prompts, include those prompts. For longer sessions, include a
   summary of the prompts and the nature of resulting assistance.
 - Which portions of the content were affected by that tool?
 - How is the submission tested and what tools were used to test the
   fix?

As with all contributions, individual maintainers have discretion to
choose how they handle the contribution. For example, they might:

 - Treat it just like any other contribution.
 - Reject it outright.
 - Treat the contribution specially, for example, asking for extra
   testing, reviewing with extra scrutiny, or reviewing at a lower
   priority than human-generated content.
 - Ask for some other special steps, like asking the contributor to
   elaborate on how the tool or model was trained.
 - Ask the submitter to explain in more detail about the contribution
   so that the maintainer can be assured that the submitter fully
   understands how the code works.
 - Suggest a better prompt instead of suggesting specific code changes.

If tools permit you to generate a contribution automatically, expect
additional scrutiny in proportion to how much of it was generated.

As with the output of any tooling, the result may be incorrect or
inappropriate. You are expected to understand and to be able to defend
everything you submit. If you are unable to do so, then do not submit
the resulting changes.

If you do so anyway, maintainers are entitled to reject your series
without detailed review.
