chore: add PR validation workflow and update contributing guidelines (#2777)
This commit is contained in:
101
CONTRIBUTING.md
101
CONTRIBUTING.md
@@ -10,43 +10,104 @@ All help is welcome and greatly appreciated! If you would like to contribute to
|
||||
> This is an open-source project maintained by volunteers.
|
||||
> We do not have the resources to review pull requests that could have been avoided with proper human oversight.
|
||||
> While we have no issue with contributors using AI tools as an aid, it is your responsibility as a contributor to ensure that all submissions are carefully reviewed and meet our quality standards.
|
||||
> Submissions that appear to be unreviewed AI output will be considered low-effort and may result in a ban.
|
||||
>
|
||||
> If you are using **any kind of AI assistance** to contribute to Seerr,
|
||||
> it must be disclosed in the pull request.
|
||||
> **We expect AI-assisted development, not AI-driven development.**
|
||||
> Use AI as a tool to help you write code. Do not let an AI agent
|
||||
> autonomously generate an entire contribution and submit it on your behalf.
|
||||
> We have been increasingly receiving low-effort, fully AI-generated PRs
|
||||
> and will not tolerate them. Contributors who repeatedly submit unreviewed
|
||||
> AI output may result in a ban.
|
||||
>
|
||||
> **Submissions that appear to be unreviewed AI output will be considered low-effort and may result in a ban.** Signs of unreviewed AI output include but are not limited to:
|
||||
>
|
||||
> - Blank or template-default PR descriptions
|
||||
> - AI-generated PR descriptions that replace our template with their own structure (e.g., "Summary / What changed / Root cause / Test plan" instead of following the PR template; this is the default output format of tools like Claude Code and is an immediate indicator that the PR was not reviewed by a human)
|
||||
> - Unchecked checklists or missing checklist entirely
|
||||
> - Failing CI checks that would have been caught by running `pnpm build`
|
||||
> - Code that does not match the described changes
|
||||
> - Inability to answer questions about the submitted code
|
||||
>
|
||||
> **Read and follow the [Contributing Guide](CONTRIBUTING.md) before submitting.**
|
||||
> If your AI tool generates its own PR description format, it is your
|
||||
> responsibility to rewrite it to follow our template before submitting.
|
||||
> An incomplete PR template tells maintainers that insufficient review has
|
||||
> been performed on the submission, regardless of the actual code quality.
|
||||
> We may close such PRs without review.
|
||||
>
|
||||
> If you are using **any kind of AI assistance** to contribute to Seerr, it must be disclosed in the pull request.
|
||||
|
||||
### Disclosure Requirements
|
||||
|
||||
If you are using any kind of AI assistance while contributing to Seerr,
|
||||
**this must be disclosed in the pull request**, along with the extent to
|
||||
which AI assistance was used (e.g. docs only vs. code generation).
|
||||
If PR responses are being generated by an AI, disclose that as well.
|
||||
**this must be disclosed in the pull request description**, along with
|
||||
the extent to which AI assistance was used (e.g., docs only vs. code generation).
|
||||
If PR responses (comments, review replies) are being generated by AI,
|
||||
disclose that as well.
|
||||
|
||||
As a small exception, trivial tab-completion doesn't need to be disclosed,
|
||||
so long as it is limited to single keywords or short phrases.
|
||||
|
||||
An example disclosure:
|
||||
Example disclosures:
|
||||
|
||||
> This PR was written primarily by Claude Code.
|
||||
|
||||
Or a more detailed disclosure:
|
||||
|
||||
> I consulted ChatGPT to understand the codebase but the solution
|
||||
> **AI Disclosure:** This PR was written primarily by Claude Code.
|
||||
> **AI Disclosure:** I consulted ChatGPT to understand the codebase but the solution
|
||||
> was fully authored manually by myself.
|
||||
> **AI Disclosure:** None.
|
||||
|
||||
Failure to disclose this is first and foremost rude to the human operators
|
||||
on the other end of the pull request, but it also makes it difficult to
|
||||
determine how much scrutiny to apply to the contribution.
|
||||
When using AI assistance, we expect contributors to:
|
||||
|
||||
- **Understand the code** that is produced and be able to answer
|
||||
questions about it.
|
||||
- **Follow the contributing guide**. AI tools do not excuse you from
|
||||
filling out the PR template, testing section, and checklist.
|
||||
- **Run the build and tests** before submitting.
|
||||
|
||||
Failure to disclose AI assistance is first and foremost disrespectful to the
|
||||
human maintainers on the other end of the pull request, but it also makes it
|
||||
difficult to determine how much scrutiny to apply to the contribution.
|
||||
|
||||
In a perfect world, AI assistance would produce equal or higher quality
|
||||
work than any human. That isn't the world we live in today, and in most cases
|
||||
it's generating slop. I say this despite being a fan of and using them
|
||||
successfully myself (with heavy supervision)!
|
||||
work than any human. That is not the world we live in today, and in most cases
|
||||
it is generating slop.
|
||||
|
||||
When using AI assistance, we expect contributors to understand the code
|
||||
that is produced and be able to answer critical questions about it. It
|
||||
isn't a maintainers job to review a PR so broken that it requires
|
||||
is not a maintainer's job to review a PR so broken that it requires
|
||||
significant rework to be acceptable.
|
||||
|
||||
Please be respectful to maintainers and disclose AI assistance.
|
||||
|
||||
### Expectations for AI-Assisted Contributions
|
||||
|
||||
1. **PR descriptions and all comments must be your own words.** Do not paste
|
||||
LLM output as your PR description, review response, or issue comment.
|
||||
We want *your* understanding and explanation of the changes, not a
|
||||
machine-generated summary. An exception is made for LLM-assisted
|
||||
translation, however, note it explicitly if used.
|
||||
|
||||
2. **Contributions must be concise and focused.** A PR that claims to fix one thing
|
||||
but touches a bunch of unrelated code will be rejected. This is a
|
||||
common side effect of broad AI prompts and makes review unnecessarily
|
||||
difficult.
|
||||
|
||||
3. **You must be able to handle review feedback yourself.** If you cannot discuss or
|
||||
implement requested changes without round-tripping reviewer comments
|
||||
through an AI, that tells us you don't understand the code you
|
||||
submitted. We will close the PR.
|
||||
|
||||
4. **Don't commit non-project files.** Editor configs, AI tool
|
||||
directories, and other local tooling files do not belong in the
|
||||
repository. Keep your commits clean.
|
||||
|
||||
5. **Changes must be tested.** Build the project, run the tests, and
|
||||
manually verify the functionality you modified. Don't just assume
|
||||
CI will catch everything.
|
||||
|
||||
6. **Final discretion lies with the reviewers.** If a PR cannot be
|
||||
reasonably reviewed for any reason due to over-complexity, size, or poor
|
||||
structure, it will be rejected. This applies equally to AI-assisted
|
||||
and non-AI-assisted contributions.
|
||||
|
||||
## Development
|
||||
|
||||
### Tools Required
|
||||
@@ -202,4 +263,4 @@ DB_TYPE="postgres" DB_USER=postgres DB_PASS=postgres pnpm migration:generate ser
|
||||
|
||||
## Attribution
|
||||
|
||||
This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Ghostty](https://github.com/ghostty-org/ghostty) contribution guides.
|
||||
This contribution guide was inspired by the [Next.js](https://github.com/vercel/next.js), [Radarr](https://github.com/Radarr/Radarr), and [Ghostty](https://github.com/ghostty-org/ghostty) contribution guides. In addition, our AI policy was draws from [Jellyfin's LLM policies](https://jellyfin.org/docs/general/contributing/llm-policies/).
|
||||
|
||||
Reference in New Issue
Block a user