-
-
Notifications
You must be signed in to change notification settings - Fork 115
Add contributor guidelines & code of conduct update #679
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
da72380
91ce2da
c2750dd
c6a66c9
e3c355c
d3499eb
39bffd5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| {% | ||
| author: ${foundation} | ||
| date: "2026-07-25" | ||
| tags: [governance] | ||
| %} | ||
|
|
||
| # AI Tools, Contributing and Code of Conduct Updates | ||
|
|
||
| ## New Contributing Guide | ||
|
|
||
| We have published a new [contributing guide](/projects/contributing-guide.md) for Typelevel organization projects and a [start contributing guide](/community/start-contributing.md) for new contributors! | ||
|
|
||
| These guidelines cover similar ground to [the ones](/gsoc/ai.md) we have provided to Google Summer of Code applicants in the past. The new guide is an evergreen document to point any new contributor to for guidance. It covers where to start on an issue, copyright, and how to structure pull requests. | ||
|
|
||
| ## Code of Conduct Update | ||
|
|
||
| We have also made a small addition to the [code of conduct](../code-of-conduct/README.md), adding a new behavior to the "Our Community" section: | ||
|
|
||
| > - **Using your own words.** We take the time to communicate with our own thoughts and writing. | ||
|
|
||
| This is Typelevel's current restriction on AI-generated content: Community members should not be using these tools to generate content for others to read. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. English is not my first language, but by my reading this sentence forbids LLM-generated source code contributions. Since the next section explicitly allows these, I think this is not intentional. (Note: source code in a PR is "content for others to read". Namely, for the reviewers. At least, I don't know of a way to review a PR without reading the diff...) |
||
|
|
||
| ## AI-related Policies | ||
|
|
||
| With agentic coding tools coming into wide use, it has become very easy for potential contributors to write code without thinking, resulting in contributions that are not actually helpful. To mitigate this, the contributing guide has two guidelines regarding AI-assisted contributions specifically. Individual projects may have additional restrictions in their own contribution policies, but the below is our default expectation: | ||
|
|
||
| * We **are** allowing AI-assisted coding contributions. We expect contributors to disclose when they have used such tools and be responsible for their contributions regardless of how they are coded. | ||
| * We are **not** allowing AI-generated pull requests, issues descriptions, or other prose. We expect that contributors understand their work well enough to explain it themselves. | ||
|
|
||
| Pull request descriptions, pull request comments, discussions, Markdown documents, Discord messages, and such are all examples of something very important: human beings communicating with other human beings. Generating a long and wordy description of something which can be more concisely and organically expressed serves no one's best interests. Rubber stamping something done even more autonomously by an AI in your name is even less useful. | ||
|
|
||
| Maintainers have very, very limited time that they are able to devote to their projects. As a contributor, please respect the time they are giving you by giving them your attention when you interact with Typelevel projects, rather than allowing an agentic system to step in the way. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like the 2nd sentence, but not the 1st one. Is the "very limited time" really the thing to point out here? It is certainly true. But I think the "respect the time of your fellow human beings" (paraphrased) from the 2nd sentence is more important. |
||
|
|
||
| ### Use of Translation Tools | ||
|
|
||
| We do understand that LLMs are excellent tools for bridging language barriers, and as always, we strive for the most inclusive environment possible on our projects and in our community spaces. To that end, we allow the use of AI tooling as a linguistic aid when English is not your primary language. Specifically, when you are authoring your own words in your own language and then leveraging a model to translate those words to English prior to posting in a Typelevel forum, this is considered acceptable and even encouraged behavior. | ||
|
|
||
| This is very different from fully autonomous authorship of long-form prose. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,7 +20,7 @@ Behaviors that reinforce these values contribute to a positive environment, and | |
| - **Being respectful.** We're respectful of others, their positions, their skills, their commitments, and their efforts. | ||
| - **Gracefully accepting constructive criticism.** When we disagree, we are courteous in raising our issues. | ||
| - **Using welcoming and inclusive language.** We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate and everyone can make a difference. | ||
|
|
||
| - **Using your own words.** We take the time to communicate with our own thoughts and writing. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sounds right to me -- please make sure to get a thumbs-up from the CoC committee. (Attn @valencik and @samspills) |
||
|
|
||
| ## Our Standards | ||
|
|
||
|
|
@@ -77,6 +77,11 @@ For questions related to our code of conduct, or to report possible violations, | |
| * [Arman Bilge](mailto:arman@typelevel.org) | ||
| * [Lucas Satabin](mailto:lucas.satabin@gnieh.org) | ||
|
|
||
| ## Changelog | ||
|
|
||
| * March 8, 2024: Initial version. | ||
| * August 3, 2026: "Using your own words" behavior added. | ||
|
|
||
| ## Attribution | ||
|
|
||
| This code of conduct is a modified version of the [Python Software Foundation Code of Conduct](https://www.python.org/psf/conduct), licensed under the [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/). | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -25,7 +25,8 @@ In general, the content on this website is licensed under the [Creative Commons | |
|
|
||
| Blog posts written before 2026 are licensed under the [Creative Commons Attribution 3.0 Unported License][CC BY 3.0]. | ||
|
|
||
| The Typelevel logo is adapted from the ["Progress" Pride Flag][progress] by [Daniel Quasar] and licensed under the [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License][CC BY-NC-SA 4.0]. | ||
| The Contributing to Typelevel Projects guide is adapted from the [Godot Pull request rules and guidelines](https://github.com/godotengine/godot-contributing-docs/blob/f46474c855c36883b61d0438414365c771ea78dd/pull_requests/pull_request_guidelines.rst) by the Godot Engine Contributors and licensed under the [Creative Commons Attribution 3.0 Unported License][CC BY 3.0]. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think we need to repeat this here. It's noted on the page itself which should be sufficient. |
||
|
|
||
|
|
||
| [contributors]: https://github.com/typelevel/typelevel.github.com/graphs/contributors | ||
| [CC BY 4.0]: https://creativecommons.org/licenses/by/4.0/ | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,4 @@ | ||
| {% | ||
| laika.title: Typelevel Projects | ||
| laika.html.template = projects.template.html | ||
| %} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| # Contributing to Typelevel Projects | ||
|
|
||
| These guidelines apply when contributing to any Typelevel organization project. Please also refer to individual project guidelines for additional guidelines. | ||
|
|
||
| Typelevel affiliate projects are also welcome to integrate these guidelines into their contributing guidelines. | ||
|
|
||
| > This document focuses on policy. See also the [Start Contributing](../community/start-contributing.md) guide if you want step-by-step guidance on contributing to Typelevel projects. | ||
|
|
||
| Welcome to the Contributing to Typelevel Projects guide. This document provides an overview of Typelevel's expectations when contributing to organization projects. At a very high level: | ||
|
|
||
| We **want** contributors who are interested in gaining a deeper understanding of the projects they're working on, learning how and why they were built, and working with the community to improve our projects. | ||
|
|
||
| We do **not** want contributors that increase the workload for maintainers without any gain for the project or any learning for the contributor. | ||
|
|
||
| The following sections provide guidance on how to make contributions that fall into the first category. | ||
|
|
||
|
|
||
| ## Respect our Code of Conduct | ||
|
|
||
| When you contribute to Typelevel, we expect that you respect our [Code of Conduct](/code-of-conduct/README.md). | ||
|
|
||
| ## Use Your Own Words | ||
|
|
||
| Write prose, including issue and pull request descriptions, documentation and code comments in your own words. Do not use automated tools to generate these for you. These artifacts are created to be read by humans, so we believe they should also be written by humans. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd like to point out again, that source code is also created to be read by humans. ("Programs must be written for people to read, and only incidentally for machines to execute" from SICP.) |
||
|
|
||
| While Typelevel communications are primarily conducted in English, our contributors and users are worldwide and may not be proficient in written English. Using machine translation tools (including LLM translation tools) to translate your writing to English is always acceptable. You may also include the original text in your message. | ||
|
|
||
| ## Start With an Issue | ||
|
|
||
| To contribute to a Typelevel project, start a conversation before creating a pull request. This can be in a new issue, continuing the conversation in an existing issue, or any other communication channel being used by the project. This gives maintainers and other contributors a chance to work with you on your idea at an earlier stage to make sure it is an acceptable contribution. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does plugging the typelevel discord make sense here? or link to a resource listing communication channels
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't really want to have another discord link that might have to be hunted down to update if the link needs to be changed. Also, the right communication channel is usually the project's issues page, which is separate for every project. In the diataxis taxonomy, this in intended to be a reference for the appropriate way to contribute, not a how-to guide (which the start contributing page more functions as).
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm. Not sure I 100% agree -- I mean, this paragraph is providing how-to information. And given that most projects have individual channels in the Discord (and some specifically have dev channels), I suspect that it would sometimes be appropriate to start with an "is this even a good idea?" conversation in the Discord. So a "linked at the bottom of this page" reference might be appropriate here.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This is something we should fix/address with Laika. We can set the Discord invite url once as a global config variable and reference it in all the places. |
||
|
|
||
| When you are reporting a bug, your issue should clearly state the expected versus actual behavior you are observing. An ideal bug report includes a minimal reproducer that can easily be run (e.g. a scala-cli script, a small repository, or a saved Scastie) to demonstrate the issue. When you are unable to do so, please provide what other information you can, for example: specific steps that caused the issue, stack traces, or error messages. | ||
|
|
||
| When you are reporting a security issue, *do not* open a Github issue. See the project security policy or the [Typelevel security policy](/security.md). | ||
|
|
||
| ## Pull Requests | ||
|
|
||
| The following guidelines are particularly relevant for pull requests: | ||
|
|
||
| ### Respect Copyright | ||
|
|
||
| You must be mindful of the copyright and patent rights of anything you submit. | ||
|
|
||
| If you authored every part of your contribution and own the rights, this is not a problem. You can submit your contribution without reading further. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since we are stating all of this, we should probably mention the case where a contributor's employer owns the rights and that they should do whatever Corporate Due Diligence™️ is needed to ensure they can legally contribute it. |
||
|
|
||
| However, any code or assets you took from somewhere else, including code generated by AI, may be subject to copyright or patent rights, which you must respect. In such cases, you need to check the license of the material. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I would bet that we're going to get arguments about this, given that current Copyright Office policy says otherwise, and that there's basically no practical way to know about copyright or patent rights over AI contributions. This is a deeply messy topic, nowhere near settled in terms of legislation or litigation, and I have mixed feelings about whether it's worth saying this outright, or just leave the point implicit.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I left this part verbatim from the Godot guidelines. I have no strong feelings about keeping or removing it. Though I'd be surprised if AI generated code get a free pass on patents (are software patents still a thing in the US? I forget.)
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
They are, sadly. I'm not aware of any settled case law around the intersection of software patents and AI yet, but IANAL, so I dunno how that factors in.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Decided to have Kagi Research (my general-research tool of choice) do some quick summarization, which resulted in a fairly interesting thread: https://assistant.kagi.com/share/d21a11b0-19a9-4abd-9f11-e59ac3b18da9 tl;dr -- software patents are still a thing, yes, and "generated by AI" is probably irrelevant when it come to violation: patented is patented. AIs probably can't create patents, but when they violate them, it's probably exactly the same as when a human does so. (Note: I hate software patents with a burning passion and wish that whole notion in law could be just plain expunged. I'm still vaguely embarrassed that my father's boss apparently invented the idea, many decades ago, and moreso that I have my name on several. But yes, it's something we have to live with.) How does that affect contributions? IMO it's a minefield. Violations tend to be accidental (unlike copyright), and the average developer has no way to know if they're violated patents. It's a whole field of law that is heavily governed by security-through-obscurity: you're only in trouble if somebody notices that you've violated a patent, and AIUI you're generally better off not trying very hard to figure out if you did so. (Since if you do the research and find that you have arguably trod on an existing patent, now you have evidence subject to discovery of intentional violation.) So while I care a lot that contributors not intentionally violate patent, it isn't even remotely obvious how far we should go beyond that, beyond the statement of "don't do that". The whole framework of software patents is pretty hostile to open source. (And indeed, to software development generally.) And all of this is still somewhat hypothetical: there isn't a lot of settled case law around it yet. If any members of the @typelevel/board have thoughts here, they might be useful. |
||
|
|
||
| "Source-available" is **not** "open-source", and not all open-source licenses are compatible with each other. We strongly recommend against reading any "source-available" or incompatibly-licensed code before contributing to Typelevel projects. | ||
|
|
||
| ### Contribute One Change at a Time | ||
|
|
||
| Each pull request should contain a single self-contained change. Avoid pushing multiple unrelated changes in the same pull request. | ||
|
|
||
| As a rule of thumb, if your pull request could be split into two pull requests without breaking anything, it should probably be two separate pull requests. | ||
|
reardonj marked this conversation as resolved.
|
||
|
|
||
| The exception to this rule is "batching changes", where you make the same kind of change to multiple places in the codebase. In this case, it is preferable to make one larger pull request instead of many small ones. | ||
|
|
||
| > **Note:** Imagine yourself in the shoes of the reviewer: how can you make the PR easy to review and approve? | ||
| > | ||
| > This is best achieved if your pull request is simple, coherent, and uncontroversial. | ||
| > | ||
| > Limiting pull requests to one change at a time also simplifies the Git history, makes it possible to revert or cherry-pick specific changes, and reduces the potential of accidentally introducing bugs. | ||
|
reardonj marked this conversation as resolved.
|
||
|
|
||
| ### Explain Your Contributions | ||
|
|
||
| When submitting a pull request, please make use of the pull request description. | ||
|
|
||
| Your pull request description should, as clearly and succinctly as possible, in your own words, explain all the necessary information to understand the changes you made. | ||
|
|
||
| For example, if you're just fixing a typo, a single sentence description is appropriate. However, if your change is large, we expect you to be more thorough with your explanation. | ||
|
|
||
| Here are the components of a thorough pull request description: | ||
|
|
||
| - **Summary of changes:** A short overview of what is changed. | ||
| - **Motivation:** Why you opened the pull request. Ideally, this is a link to an issue. | ||
| - **Related work:** Link to similar pull requests or ongoing discussions that provide additional context. | ||
| - **Technical overview:** Briefly explain each of the changes in this pull request, and why they are necessary. | ||
| - **Testing:** How you tested the pull request, and the results of your testing. | ||
| - **Discussion:** How you see the pull request in context. For example, list risks and caveats and how they could be mitigated. If existing projects may be negatively affected, you should disclose this here, with particular attention to possible compatibility breakages and regressions. | ||
| - **Additional work:** If applicable, highlight anything you need help with or feedback on, and describe any necessary or potential follow-up work. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd encourage the specific usage of Github comments to help localize and contextualize the thing that needs extra review power/feedback/teaching
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd rather not go too deep into the mechanics of how Github PRs work. This document is talking about what you should do, not how exactly to do it. |
||
|
|
||
| > **Note:** You may not need *every* one of these components, and you do not need to copy this exact structure. Always ask yourself what would be most helpful for reviewers, and try to balance brevity and thoroughness appropriately. | ||
|
|
||
| ### Contribute Only What You Stand Behind | ||
|
|
||
| Only submit code that you understand, are prepared to explain to a maintainer, and be responsible for. | ||
|
|
||
| This especially applies if you implement the idea of another person, copy code from elsewhere, or if you use AI to assist you with your contribution. In all of these cases, you must disclose which part of your submission wasn't fully authored by you. Regardless of the code's origin, by opening a pull request, you are putting your reputation as a contributor behind the code. | ||
|
|
||
| --- | ||
|
|
||
| This document is based on the [Godot Pull request rules and guidelines](https://github.com/godotengine/godot-contributing-docs/blob/f46474c855c36883b61d0438414365c771ea78dd/pull_requests/pull_request_guidelines.rst) by the Godot Engine Contributors and is licensed under the [CC BY 3.0 license](https://creativecommons.org/licenses/by/3.0/deed.en). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,7 @@ | ||
| <nav class="bulma-navbar" role="navigation" aria-label="main navigation"> | ||
| <div class="bulma-navbar-brand"> | ||
| <a class="bulma-navbar-item" href="@:target(/README.md)"> | ||
| <img src="@:target(/img/logo.svg)" /> | ||
| <img width="159px" src="@:target(/img/logo.svg)" /> | ||
| </a> | ||
|
|
||
| <a role="button" class="bulma-navbar-burger" aria-label="menu" aria-expanded="false" data-target="navMenu" | ||
|
|
@@ -14,11 +14,11 @@ | |
| </div> | ||
| <div class="bulma-navbar-menu" id="navMenu"> | ||
| <div class="bulma-navbar-start"> | ||
|
|
||
| <div class="bulma-navbar-item"><a href="@:target(/community/start-contributing.md)" class="bulma-button bulma-is-primary bulma-is-rounded bulma-has-text-light">Get Started</a></div> | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For the record, my original vision for the Get Started button was that it takes you to a page that helps you get started using Typelevel. Since that is probably what most people are looking for, I would guess. I'm not completely fixed to that idea. But I think this content would be bettered linked to from a "Contribute" navbar.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I had thought about changing the name of the link, but I was a bit concerned as "contribute" can also be read as "donate". Maybe it's best to leave these off still. |
||
| <div class="bulma-navbar-item"><a href="@:target(/community/learning-resources.md)" class="bulma-button bulma-is-text bulma-is-rounded">Learn</a></div> | ||
| </div> | ||
| <hr class="bulma-is-hidden-desktop" /> | ||
| <div class="bulma-navbar-end"> | ||
| <!-- <div class="bulma-navbar-item"><a class="bulma-button bulma-is-rounded bulma-is-primary bulma-has-text-light">Get Started</a></div> --> | ||
| <!-- <div class="bulma-navbar-item"><a class="bulma-button bulma-is-text">Learn</a></div> --> | ||
| <div class="bulma-navbar-item"><a class="bulma-button bulma-is-text" href="@:target(/projects/README.md)">Projects</a></div> | ||
| <div class="bulma-navbar-item"><a class="bulma-button bulma-is-text" href="@:target(/community/README.md)">Community</a></div> | ||
| <div class="bulma-navbar-item"><a class="bulma-button bulma-is-text" href="@:target(/foundation/README.md)">Foundation</a></div> | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could add a TSC author and make it a co-authored post. I would like to somehow give credit to the TSC for your work. (Alternative to co-authoring, could give credit in the post.)