- DCO sign-off. The Developer Certificate of Origin (DCO) is a short statement a contributor agrees to: “I wrote this, or have the right to submit it”. You agree by adding a
Signed-off-by: Your Name <you@example.com>line to each commit, whichgit commit -sdoes for you. smartcloud checks every commit has one that matches its author. - AI attribution. When an AI tool helped write a commit, the commit credits it with a
Co-authored-bytrailer naming the tool and model, and the tool never signs off, because only a person can agree to the DCO. A repository can also require the Linux kernel’sAssisted-by: TOOL:MODELtrailer next to it.
Key: value line at the end of a commit message, such as Signed-off-by: ....
Turn it on
1
Add the workflow events
The feature runs on pull request events. Include
synchronize, so new commits are checked:2
Grant the permissions
pull-requests: write (to list the pull request’s commits and write the report comment) and checks: write. The workflow token is enough.3
Add the section
An empty section turns on both checks with their defaults:
4
List your maintainers and bots (recommended)
Maintainers get warnings instead of errors on their own pull requests, and trusted bots are skipped:
Options
The feature also reads
roles.maintainers, roles.trustedBots and links.policyBase; see Roles and Links. commits.aiIdentities is shared with the disclosure feature.
Recognising your own AI tool
Patterns are bare regular expressions, or/source/flags:
Complete example
.github/smartcloud.yml
How it works
For each pull request event, smartcloud loads the pull request’s commits and checks each one.
Merge commits (commits with more than one parent) are written by Git or GitHub, so they are not checked for
DCO or AI-03.
A correctly attributed AI-assisted commit ends like this:
assistedBy: true, an Assisted-by: example-tool:example-model-1 line sits next to it: the Linux kernel form TOOL:MODEL, optionally followed by more tools, where the first word must have text on both sides of a colon.
Findings link to CONTRIBUTING.md#dco, AI_POLICY.md#ai-02 and AI_POLICY.md#ai-03 under links.policyBase (by default https://github.com/Resnovas/.github/blob/main).
AI identities
An identity in a trailer is an AI tool when:- its email ends in
@anthropic.com,@openai.com,@cursor.com,@cursor.sh,copilotor.invalid(the reserved domain for a tool with no address of its own), or - its name contains, as a whole word, one of Claude, Codex, ChatGPT, GPT followed by a number (such as GPT-4), Copilot, Cursor, Gemini, Devin, Aider, Windsurf, Jules, Codeium or Tabnine, ignoring case.
commits.aiIdentities adds to this list; it never replaces it.
Roles
- Pull requests opened by a trusted bot are skipped entirely.
- On a pull request opened by a maintainer, or by the repository owner, findings are reported at
maintainerLevel(warningby default).AI-03is never downgraded. - Everyone else gets errors.
@ is optional.
What you will see on GitHub
- Check run.
smartcloud / commits: failure on any error, neutral when there are only warnings (such as a maintainer’s missing sign-off), success otherwise. Each finding names the commit it is about. - Report comment. The smartcloud comment on the pull request lists each problem with a link to the policy.
- Job summary and annotations. Every finding, including the commit SHA.
git rebase --signoff <base> and force-push; the next run checks the new commits.
Forks and restricted runs
The check needs only read access to the pull request’s commits, so it runs on forks and Dependabot pull requests too. On a read-only token the check run and report comment cannot be written; they are skipped and listed under Restricted access in the job summary, and the findings still appear in the summary and as annotations. Dependabot is usually a trusted bot, so its pull requests are skipped anyway.In the house preset
The Resnovas house preset setsdco: true, aiAttribution: true and maintainerLevel: warning. An AI sign-off is an error for everyone; anything else on a maintainer’s own pull request is a warning. A repository may add aiIdentities or assistedBy: true (the preset leaves both unset), but cannot turn either check off.
Troubleshooting
Signed-off-by ... is an AI tool. Only a human can sign off.
Signed-off-by ... is an AI tool. Only a human can sign off.
Remove the AI’s sign-off and sign off yourself. This is an error even on a maintainer’s pull request.
the commits feature needs the pull request's commits, but they were not loaded
the commits feature needs the pull request's commits, but they were not loaded
smartcloud could not read the pull request’s commits, so the feature failed rather than pass unchecked. Check the token can read pull requests, then re-run.
A person's name is treated as an AI tool
A person's name is treated as an AI tool
The name contains one of the built-in words (for example “Cursor” or “Devin”) as a whole word. Use a different trailer name, such as the person’s full name, in the sign-off.