# AI usage

> [!NOTE]
> The modern (as of 2026-06) AI is a misnomer,
> - it is not conscious / not a consciousness,
> - it is not sentient,
> - it is not intelligent,
> - it does not think,
> - it does not understand the code,
> - it is merely a next-token guesser,
>
> ... therefore it is merely an (hyper-) advanced IDE.

> [!NOTE]
> A contribution is any externally-observable interaction with a project.

> [!CAUTION]
> Failure to follow the following rules *may* result in repercussions,
> possibly without a prior warning.

Rules:
1. It is acceptable to use AI when producing contributions.
> [!WARNING]
> Any and all AI usage **MUST** be fully and explicitly disclosed
> in **every** contribution.
2. All contributions shall be done by conscious, sentient beings.
   Fully autonomous contributions by bots are prohibited[^1].
> [!WARNING]
> Dear contributor, the AI is *your* *tool*, and its output is for *your*
> *consumption*. It is **your** responsibility to consume said output,
> interpret it, and then produce the contribution itself.
> **DO NOT** just query it and post the output,
> *especially* so for all non-code contributions!
3. The contributor (conscious, sentient being) solely bears
   the whole responsibility for the contribution,
   they must understand the problem, and the solution,
   and be able to constructively argue about it.
   "well, AI said so, therefore it is" is not an acceptable approach.

[^1]: Unless explicitly allowed by maintainers on case-by-case basis
      *before* the contribution is submitted,
      in which case the bot owner (conscious, sentient being)
      is recognized as the de facto contributor.
      E.g. https://github.com/apps/dependabot is allowed.
