Skip to main content

Gitlint plugin for RAI footer validation

Project description

gitlint-rai

RAI Lint

A gitlint plugin that enforces exactly one thing:
if AI touched the code, say so in the commit. ⚖️

That’s it. No philosophy, no negotiations. Pick a trailer and move on.

Installation 🔧

pip install gitlint-rai

Or with uv, which is objectively the better choice:

uv add gitlint-rai

Usage 🚦

Run the bundled wrapper — it loads the RAI rules automatically and accepts all gitlint arguments:

gitlint-rai
gitlint-rai --msg-filename .git/COMMIT_EDITMSG

Prefer plain gitlint? Point your .gitlint config at the installed package:

[general]
extra-path=/path/to/site-packages/gitlint_rai

Get that path with:

python -c "import gitlint_rai, pathlib; print(pathlib.Path(gitlint_rai.__file__).parent)"

To verify the rule loaded:

gitlint-rai --debug

Look for rai-footer-exists and rai-signed-off-by in the loaded-rules output. If you see them, the plugin is active and doing its job.

Both rules are enforced by default: rai-footer-exists (UC1) requires an AI attribution trailer, and rai-signed-off-by (UC2) requires the Signed-off-by: Your Name <email> footer that git commit -s adds. To skip sign-off enforcement, add ignore=rai-signed-off-by under [general] in your .gitlint.

Valid Trailers 📌

Pick the one that matches the majority AI contribution. Skip it entirely and the commit fails. Extra footers are fine — the rule only checks that at least one valid footer exists.

This is not a debate.

  1. Authored-by: [Human] <email> — all you, no AI involved
  2. Commit-generated-by: [AI Tool] <email> — AI wrote the commit message, you wrote the code
  3. Assisted-by: [AI Tool] <email> — AI helped some, you were driving
  4. Co-authored-by: [AI Tool] <email> — roughly 50/50, like actual pair programming
  5. Generated-by: [AI Tool] <email> — AI did most of it, you supervised

All patterns are case-insensitive, because life is too short for that kind of pedantry.

Why This Exists ⚖️

Git already supports trailers. Commits already support attribution. What they don’t do is require you to be honest when AI is involved.

This plugin exists to make that honesty boring, consistent, and automatic, so nobody has to reconstruct intent later by reading commit history like tea leaves.

If you want the longer reasoning behind this, it lives at Did AI Erase Attribution?.

This plugin is the practical follow-through.

Requirements ⚙️

  • Python >= 3.11, < 3.15
  • gitlint >= 0.19.1

License 📄

PolyForm Shield License 1.0.0 — free to use anywhere, including inside commercial products. What's off the table: providing anything that competes with this tool — selling it, rebranding it, hosting it, or shipping a practical substitute, paid or free. This is a plain-language summary; the LICENSE is what actually controls. Commercial licensing questions: anchildress1@gmail.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gitlint_rai-1.0.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gitlint_rai-1.0.0-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file gitlint_rai-1.0.0.tar.gz.

File metadata

  • Download URL: gitlint_rai-1.0.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for gitlint_rai-1.0.0.tar.gz
Algorithm Hash digest
SHA256 cc332227eed498c8a5f7fade513bb412f9300319eeeebb84c1f732da11e4a1a3
MD5 b8d7acd8f0038358a57890f5c35a73c1
BLAKE2b-256 06ceed3515828c234ac6e2556725efb82da6011b94be2ad8f918755f97c9fdc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitlint_rai-1.0.0.tar.gz:

Publisher: release-please.yml on anchildress1/rai-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gitlint_rai-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: gitlint_rai-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for gitlint_rai-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aeca1abd5f045651638081e3733bec1151a96dedb603577beb62d84ae0a3800d
MD5 084334764e1a1b4f3df3a9e593f98af6
BLAKE2b-256 49fd046a49fa98d9be0dce527846c517ec1c523eb4450f8e36589bcf6d784ea1

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitlint_rai-1.0.0-py3-none-any.whl:

Publisher: release-please.yml on anchildress1/rai-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page