@checkmarkdevtools/commitlint-plugin-rai 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/LICENSE +30 -0
- package/README.md +48 -14
- package/package.json +5 -3
- package/{bom.json → sbom.json} +5 -5
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@checkmarkdevtools/commitlint-plugin-rai` are documented here so I don’t have to rely on vibes, memory, or aggressively scrolling Git history later, because I promise you I will not remember why I did this six months from now.
|
|
4
|
+
|
|
5
|
+
> [!TIP]
|
|
6
|
+
> I did write about it some in ["Did AI Erase Attribution?"](https://dev.to/anchildress1/did-ai-erase-attribution-your-git-history-is-missing-a-co-author-1m2l). Though... it probably deserves a follow-up after this—I might think about that.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## [0.1.2](https://github.com/ChecKMarKDevTools/rai-lint/compare/commitlint-plugin-rai-v0.1.1...commitlint-plugin-rai-v0.1.2) (2025-12-29) 📡 📡
|
|
11
|
+
|
|
12
|
+
> _Ok, I lied._ No pottery. This turned into cleanup, config alignment, and wrestling CI until it stopped freelancing.
|
|
13
|
+
|
|
14
|
+
No user-facing behavior changes, but under the hood this is a realignment release. Core workflows were restructured, release logic was consolidated, and the surrounding machinery now matches how the plugin actually works instead of how it used to pretend to.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## [0.1.1](https://github.com/ChecKMarKDevTools/rai-lint/compare/commitlint-plugin-rai-v0.1.0...commitlint-plugin-rai-v0.1.1) (2025-12-29) 📡
|
|
19
|
+
|
|
20
|
+
> _Because the releases technically worked on GitHub, then immediately fell apart when asked to do literally anything else, prompting a debugging session I would describe as "character-building."_
|
|
21
|
+
|
|
22
|
+
The plugin is stable. It does its job. It has been doing its job since I initially wrote it, unbothered and consistent.
|
|
23
|
+
|
|
24
|
+
The CI workflows responsible for publishing it to npm, however, decided that "working" was negotiable and that sometimes lockfiles should refresh themselves mid-release for reasons they declined to explain.
|
|
25
|
+
|
|
26
|
+
This release corrects the automated publishing setup that was theoretically correct last time but demonstrably wasn't even close. It also bumps `@types/node` because Dependabot has opinions and I'm inclined to agree.
|
|
27
|
+
|
|
28
|
+
If this doesn't work, I'm learning pottery.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### What This Is 📦
|
|
33
|
+
|
|
34
|
+
This is a commitlint plugin that will not let you commit until you say who actually helped write the code, which feels like a low bar and yet here we are.
|
|
35
|
+
|
|
36
|
+
It’s not a lecture, it’s not a manifesto, and it’s definitely not trying to solve the entire “AI ethics” discourse in a footer. It just wants you to be honest and move on with your day.
|
|
37
|
+
|
|
38
|
+
It understands five Git trailers:
|
|
39
|
+
|
|
40
|
+
- `Authored-by` — all you, no AI involved, pure human effort and probably caffeine
|
|
41
|
+
- `Commit-generated-by` — AI wrote the commit message, you wrote the code, a perfectly reasonable division of labor
|
|
42
|
+
- `Assisted-by` — AI helped a bit, but you were still driving and making the calls
|
|
43
|
+
- `Co-authored-by` — you and the AI paired, roughly fifty-fifty, everyone gets credit
|
|
44
|
+
- `Generated-by` — AI did most of the work, you supervised, still valid, just say so
|
|
45
|
+
|
|
46
|
+
Pick one and you’re done. Skip it and the commit fails immediately, calmly, and without entering into negotiations about how busy you are.
|
|
47
|
+
|
|
48
|
+
There’s no telemetry, no tracking, no network calls, and no opinions about formatting or workflow. It doesn’t care how you work, it just wants the attribution written down so future humans aren’t guessing.
|
|
49
|
+
|
|
50
|
+
Status: **Shipped.** Hopefully. 😄
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### Why This Exists 🔧
|
|
55
|
+
|
|
56
|
+
If two humans pair program, both names go on the commit. If an AI helps and we pretend it didn’t happen, that’s a choice, but it’s a weird one.
|
|
57
|
+
|
|
58
|
+
Git already supports trailers. Commits already support attribution. This plugin just closes the gap between “we could do this” and “we actually do this,” because enforcement turns philosophy into muscle memory.
|
|
59
|
+
|
|
60
|
+
I got tired of debating it and built the boring solution instead.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### The Extremely Short Version of Events 🗓️
|
|
65
|
+
|
|
66
|
+
I built this, plus the Python version, in a burst of enthusiasm and questionable time awareness, then spent the following weeks fixing things, cleaning things up, and making the tooling stop yelling at me long enough to ship something usable.
|
|
67
|
+
|
|
68
|
+
If you want the gritty details, Git is right there and very thorough. This is just the overview.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### December 28, 2025: v0.1.0 🚀
|
|
73
|
+
|
|
74
|
+
It enforces attribution without overthinking it, it stays out of your way once you comply, and it does exactly one job on purpose.
|
|
75
|
+
|
|
76
|
+
Everything else will evolve from here, along with the inevitable future mistakes and fixing the mistakes I missed this round.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Polyform Shield License 1.0.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 ChecKMarK DevTools / Ashley Childress
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to use,
|
|
7
|
+
copy, modify, and/or distribute the Software for any purpose—including personal, professional, or commercial use—subject to the following conditions:
|
|
8
|
+
|
|
9
|
+
1. **No Profit or Monetization.**
|
|
10
|
+
The Software may not be sold, rebranded, licensed, hosted as a paid SaaS, or used as the basis of any product or service from which you or your organization earns revenue or profit, without explicit written permission from Ashley Childress.
|
|
11
|
+
|
|
12
|
+
- **You CAN** use, copy, fork, or adapt this for your own workflows, inside your company, for client projects, demos, education, or anything else—as long as you’re not selling the code, charging for it, or making money from the project itself.
|
|
13
|
+
- **You CANNOT** resell, offer as a paid service, or monetize this project or its derivatives without prior written approval.
|
|
14
|
+
|
|
15
|
+
2. **Endorsement.**
|
|
16
|
+
Neither the name of ChecKMarK DevTools / Ashley Childress nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
17
|
+
|
|
18
|
+
3. **Attribution.**
|
|
19
|
+
Any public fork, copy, or substantial reuse must include this LICENSE and a clear statement in your documentation or README:
|
|
20
|
+
“Based on original work by ChecKMarK DevTools / Ashley Childress – see \[original repo link\].”
|
|
21
|
+
|
|
22
|
+
4. **No Warranty.**
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
24
|
+
|
|
25
|
+
Full license text: https://polyformproject.org/licenses/shield/1.0.0/
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
This project is licensed under Polyform Shield License 1.0.0.
|
|
30
|
+
For exceptions or monetization/commercialization questions, contact Ashley Childress at [human@checkmarkdevtools.dev](mailto:human@checkmarkdevtools.dev).
|
package/README.md
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
# @checkmarkdevtools/commitlint-plugin-rai
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img
|
|
5
|
+
src="https://raw.githubusercontent.com/ChecKMarKDevTools/admin-things/main/assets/logos/checkmark-rai-lint-logo.png"
|
|
6
|
+
alt="ChecKMarK RAI"
|
|
7
|
+
width="160"
|
|
8
|
+
/>
|
|
9
|
+
</p>
|
|
4
10
|
|
|
5
|
-
|
|
11
|
+
<p align="center">
|
|
12
|
+
A commitlint plugin that enforces exactly one thing:<br />
|
|
13
|
+
if AI touched the code, say so in the commit. ⚖️
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
That’s it. No philosophy, no negotiations. Pick a trailer and move on.
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
## Installation 🔧
|
|
6
21
|
|
|
7
22
|
```bash
|
|
8
23
|
npm install --save-dev @checkmarkdevtools/commitlint-plugin-rai
|
|
9
24
|
```
|
|
10
25
|
|
|
11
|
-
## Usage
|
|
26
|
+
## Usage 🚦
|
|
12
27
|
|
|
13
|
-
Add to your `commitlint.config.js`:
|
|
28
|
+
Add the plugin to your `commitlint.config.js`:
|
|
14
29
|
|
|
15
|
-
```
|
|
30
|
+
```js
|
|
16
31
|
export default {
|
|
17
32
|
extends: ['@commitlint/config-conventional'],
|
|
18
33
|
plugins: ['@checkmarkdevtools/commitlint-plugin-rai'],
|
|
@@ -22,21 +37,40 @@ export default {
|
|
|
22
37
|
};
|
|
23
38
|
```
|
|
24
39
|
|
|
25
|
-
|
|
40
|
+
Once this is in place, commitlint will refuse to proceed until a valid RAI trailer is present.
|
|
41
|
+
|
|
42
|
+
## Valid Trailers 📌
|
|
43
|
+
|
|
44
|
+
Pick **exactly one**.
|
|
45
|
+
Skip it and the commit fails.
|
|
46
|
+
Use more than one and the commit also fails.
|
|
47
|
+
|
|
48
|
+
No negotiations.
|
|
49
|
+
|
|
50
|
+
1. `Authored-by: [Human] <email>` — all you, no AI involved
|
|
51
|
+
2. `Commit-generated-by: [AI Tool] <email>` — AI wrote the commit message, you wrote the code
|
|
52
|
+
3. `Assisted-by: [AI Tool] <email>` — AI helped some, you were still driving
|
|
53
|
+
4. `Co-authored-by: [AI Tool] <email>` — roughly 50/50, like actual pair programming
|
|
54
|
+
5. `Generated-by: [AI Tool] <email>` — AI did most of it, you supervised
|
|
55
|
+
|
|
56
|
+
All patterns are case-insensitive, because enforcing honesty does not require enforcing capitalization.
|
|
57
|
+
|
|
58
|
+
## Why This Exists ⚖️
|
|
59
|
+
|
|
60
|
+
If two humans pair program, both names go on the commit.
|
|
61
|
+
If an AI helps and we pretend it didn’t happen, that’s a choice, but it’s a strange one.
|
|
62
|
+
|
|
63
|
+
Git already supports trailers. This plugin just closes the gap between “we could do this” and “we actually do this,” by making attribution a default instead of a discussion.
|
|
26
64
|
|
|
27
|
-
|
|
28
|
-
2. **`Commit-generated-by: [AI Tool] <email>`** - Trivial AI (docs, commit msg, advice, reviews)
|
|
29
|
-
3. **`Assisted-by: [AI Tool] <email>`** - AI helped, but primarily human code
|
|
30
|
-
4. **`Co-authored-by: [AI Tool] <email>`** - Roughly 50/50 AI and human (40-60 leeway)
|
|
31
|
-
5. **`Generated-by: [AI Tool] <email>`** - Majority of code was AI generated
|
|
65
|
+
If you want the longer version of that reasoning, it’s written up at [Did AI Erase Attribution?](https://dev.to/anchildress1/did-ai-erase-attribution-your-git-history-is-missing-a-co-author-1m2l).
|
|
32
66
|
|
|
33
|
-
|
|
67
|
+
This plugin is the boring enforcement layer that follows.
|
|
34
68
|
|
|
35
|
-
## Requirements
|
|
69
|
+
## Requirements ⚙️
|
|
36
70
|
|
|
37
71
|
- Node.js >= 20.0.0
|
|
38
72
|
- @commitlint/cli >= 19.0.0
|
|
39
73
|
|
|
40
|
-
## License
|
|
74
|
+
## License 📄
|
|
41
75
|
|
|
42
76
|
PolyForm Shield License 1.0.0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@checkmarkdevtools/commitlint-plugin-rai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Commitlint plugin for RAI footer validation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"dist",
|
|
17
|
-
"
|
|
18
|
-
"README.md"
|
|
17
|
+
"sbom.json",
|
|
18
|
+
"README.md",
|
|
19
|
+
"CHANGELOG.md",
|
|
20
|
+
"LICENSE"
|
|
19
21
|
],
|
|
20
22
|
"engines": {
|
|
21
23
|
"node": ">=20 <25"
|
package/{bom.json → sbom.json}
RENAMED
|
@@ -113,15 +113,15 @@
|
|
|
113
113
|
"type": "library",
|
|
114
114
|
"name": "commitlint-plugin-rai",
|
|
115
115
|
"group": "@checkmarkdevtools",
|
|
116
|
-
"version": "0.1.
|
|
117
|
-
"bom-ref": "rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.
|
|
116
|
+
"version": "0.1.2",
|
|
117
|
+
"bom-ref": "rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.2",
|
|
118
118
|
"licenses": [
|
|
119
119
|
{
|
|
120
120
|
"expression": "LicenseRef-PolyForm-Shield-1.0.0",
|
|
121
121
|
"acknowledgement": "declared"
|
|
122
122
|
}
|
|
123
123
|
],
|
|
124
|
-
"purl": "pkg:npm/%40checkmarkdevtools/commitlint-plugin-rai@0.1.
|
|
124
|
+
"purl": "pkg:npm/%40checkmarkdevtools/commitlint-plugin-rai@0.1.2",
|
|
125
125
|
"properties": [
|
|
126
126
|
{
|
|
127
127
|
"name": "cdx:npm:package:path",
|
|
@@ -134,11 +134,11 @@
|
|
|
134
134
|
{
|
|
135
135
|
"ref": "rai-lint",
|
|
136
136
|
"dependsOn": [
|
|
137
|
-
"rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.
|
|
137
|
+
"rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.2"
|
|
138
138
|
]
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
|
-
"ref": "rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.
|
|
141
|
+
"ref": "rai-lint|@checkmarkdevtools/commitlint-plugin-rai@0.1.2"
|
|
142
142
|
}
|
|
143
143
|
]
|
|
144
144
|
}
|