diff --git a/.github/ISSUE_TEMPLATE/task.yml b/.github/ISSUE_TEMPLATE/task.yml index 6b4bd4eda3..87b673ba84 100644 --- a/.github/ISSUE_TEMPLATE/task.yml +++ b/.github/ISSUE_TEMPLATE/task.yml @@ -6,7 +6,7 @@ body: attributes: value: | Use this template for tasks that aren't bug fixes or new features. - Small tasks (typos, broken links) can go straight to a PR without an issue — see [CONTRIBUTING.md](../../CONTRIBUTING.md). + Small tasks (typos, broken links) can go straight to a PR without an issue. - type: textarea id: description diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9958838dd..73f6bedc08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,90 +1,34 @@ # Contributing to Baserow -We appreciate your interest in contributing to Baserow. To make the process smooth for everyone, please read these guidelines before opening a pull request. +Thank you for your interest in Baserow. This document explains how you can get involved. -We're a small team. Creating a PR with some changes is easy — reviewing it thoroughly and ensuring it meets our standards takes significantly more time. These guidelines exist to make sure that effort is well spent on both sides. +## We are not accepting unsolicited pull requests -## Types of contributions +We've decided to stop accepting unsolicited external pull requests for now. Reviewing external code contributions thoroughly takes significant time, and a growing volume of low-quality, AI-generated PRs has made the process difficult to manage for our small team. -### Bug fixes +This wasn't an easy decision, and we know it affects well-intentioned contributors. See the [announcement](https://github.com/baserow/baserow/issues/5598) for the full reasoning. -1. **Open a bug issue first** with steps to reproduce and expected behavior -2. If the fix is obvious, open a PR right away. If you're unsure about the expected behavior or the right approach, wait for confirmation on the issue first. +**We will only review pull requests that were coordinated with the team in advance.** PRs opened without prior coordination will be closed without review. -PRs without a corresponding issue will be closed. +## How you can still contribute -### Features and behavior changes +There's a lot you can do that we genuinely value: -Any PR that adds new functionality or changes existing behavior — no matter how small — requires prior approval. +- **Report bugs** — open a [bug report](https://github.com/baserow/baserow/issues/new?template=bug.yml) with steps to reproduce and the expected behavior. +- **Request features** — open a [feature request](https://github.com/baserow/baserow/issues/new?template=feature_request.yml) describing what you need and why. +- **Join the discussion** — share ideas, feedback, and use cases in our [community forum](https://community.baserow.io/). -1. Check [existing issues](https://github.com/baserow/baserow/issues) first — if an approved issue for the feature already exists, reference it in your PR instead of opening a new one. Only open a new feature request if no matching issue exists. -2. **Open a feature request issue** using the [feature request template](https://github.com/baserow/baserow/issues/new?template=feature_request.yml) -3. Describe what you want to build, why and your proposed approach -4. **Wait for explicit approval** from a maintainer before writing code -5. Open your PR referencing the approved issue +Well-described issues and feedback help us shape the product and are always welcome. -PRs for features without an approved issue will be closed. This isn't about gatekeeping — it's about making sure you don't invest time in something that won't be merged. +## Want to contribute code? -### Tasks +If you have something specific in mind, contact us first through the [community forum](https://community.baserow.io/) or the contact form at https://baserow.io/contact. If we agree the change makes sense, we'll coordinate the approach with you before any code is written — only then should you open a PR. -Tasks cover everything that isn't a feature or bug fix: typo corrections, broken links, documentation updates, refactoring, dependency bumps, etc. - -- **Small tasks** where the correctness is obvious on sight (typos, broken links, minor doc edits) can be submitted directly as a PR without an issue. -- **Larger tasks** that touch multiple files or require design decisions need an issue and likely approval, same as features. - -If you're unsure, check whether a related issue already exists — if not, open one. - -## Before you start - -- Make sure your contribution either doesn't require an issue (small task) or has an approved issue (bug fix, feature, or large task). Don't write code before that. -- Check [existing issues](https://github.com/baserow/baserow/issues) to avoid duplicate work -- Fork the repository and create your branch from `develop` -- Read the quality standards below - -## Pull request requirements - -Your PR title must follow [Conventional Commits](https://www.conventionalcommits.org/) format — it becomes the commit message in our git history. Keep it short and focused on the **intent** of the change, not what files were touched. - -Allowed prefixes: `fix:`, `feat:`, `chore:`, `docs:`. An optional scope in parentheses is encouraged: `fix(grid):`, `feat(formulas):`, `chore(deps):`. - -Examples: -- `fix(forms): prevent submission with invalid rating value` -- `feat: add Cloudflare Turnstile captcha to auth` -- `chore(deps): bump requests to 2.33.0` -- `docs: update contribution guidelines` - -Your PR must also include: - -- **A clear description** of what was changed and why -- **How to test it** — steps a reviewer can follow to verify your changes -- **A link to the issue** in the description (e.g., `Closes #123`), when applicable -- **Tests** — backend changes need tests -- **A changelog entry** generated using the script in `changelog/` - -### What will get your PR closed - -- **Modifying premium or enterprise code.** The `premium/` and `enterprise/` directories contain licensed code that is not open to external contributions. PRs that touch these directories — including moving code from them into core — will be closed immediately. -- **No linked issue** for bug fixes or features (see above) -- **No description or test instructions** -- **Not following these guidelines** after being asked to - -### Size guideline - -Aim for focused, well-scoped PRs. As a rough guideline, we look at **lines of useful code (LOUC)** — excluding tests, boilerplate, translations, docs. A PR touching ~10 files with ~10 LOUC each is a reasonable upper bound, but complexity matters more than line count — a few lines in a critical path can be harder to review than hundreds of boilerplate. Tests and docs are excluded from LOUC but still need to be reviewed, so keep them concise and follow existing patterns. We may ask you to split a PR, reduce scope, or remove scope creep at our discretion. - -## What happens after you submit - -We review PRs as capacity allows. - -Possible outcomes: - -- **Approved and merged** — your PR meets our standards -- **Changes requested** — we'll list what needs to change. Please respond within 2 weeks; PRs with no activity after that will be closed. You can always reopen later. -- **Closed** — with an explanation of why. This is not personal — it's about priorities, alignment, and capacity. You can reopen if you resolve the issues, or open a fresh PR after incorporating our feedback. +Note that the `premium/` and `enterprise/` directories contain licensed code that is not open to external contributions. ## Quality standards -See [Code quality](docs/development/code-quality.md) for the full list of standards, linters, and testing expectations. The CI pipeline must pass and security impact must be considered. +For coordinated contributions, see [Code quality](docs/development/code-quality.md) for our standards, linters, and testing expectations. The CI pipeline must pass and the security impact of every change must be considered. ## License diff --git a/README.md b/README.md index c30b3f7024..1df8b0099b 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ going forward at: https://github.com/baserow/baserow. ## Get Involved Join our forum at https://community.baserow.io/. See -[CONTRIBUTING.md](./CONTRIBUTING.md) on how to become a contributor. +[CONTRIBUTING.md](./CONTRIBUTING.md) for how to get involved. ## Installation diff --git a/backend/uv.lock b/backend/uv.lock index 1e658ef8c5..e54e7023ad 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -3935,26 +3935,30 @@ wheels = [ [[package]] name = "ujson" -version = "5.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bc/78/937198ea8708182dd1edbf0237bf255a96feab3f511691ad08b84da98e5d/ujson-5.12.1.tar.gz", hash = "sha256:5b7e96406c301a1366534479a7352ec40ec68bb327c0c119091635acd5925e35", size = 7164538, upload-time = "2026-05-05T22:05:01.354Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ca/d88d86f90f8f237985f3e347b9a4f9fa24e8d30d19ec7d477ed18aa58393/ujson-5.12.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6f19e9a407a24230df0cc1ec1c0f5999872ba526b14a780f80ad6479f5eed9bc", size = 58099, upload-time = "2026-05-05T22:04:06.688Z" }, - { url = "https://files.pythonhosted.org/packages/ae/2d/a0a88407cee3550f7ed1e49b41157ee2d410f51905ed51fb134844255280/ujson-5.12.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8b657e870c77aaacdeea86cfad3e6d2ef9b52517e45988c9c367f7ee764fe4dd", size = 55631, upload-time = "2026-05-05T22:04:07.925Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6d/12a3b8e72132db244ae048075e71a0079b3c5f61ff45b7ca81d5193ab3e7/ujson-5.12.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:984b5a99d1e0a037c2046c3c4b34cec832565d62d5017be0a035bf3cbfab72dc", size = 59469, upload-time = "2026-05-05T22:04:09.208Z" }, - { url = "https://files.pythonhosted.org/packages/a2/72/310f8c21737554f2d2b4f1883e1a71e8a6ab0d8f92f0feb8aaa85e0f4b66/ujson-5.12.1-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:f48ef8a16f1d85bd7982beac7adfd3fb704058631db84c1c61c8a1b7072b1508", size = 61611, upload-time = "2026-05-05T22:04:10.836Z" }, - { url = "https://files.pythonhosted.org/packages/50/50/ab4b2f7bab6c7a67298c8f2aca80e2082eaf6f332cf2d099762647b5301e/ujson-5.12.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f39ba3b65cc637b59731532f7e7c807786bff1d0332ab2d5b96a04d2584d78f", size = 59122, upload-time = "2026-05-05T22:04:12.137Z" }, - { url = "https://files.pythonhosted.org/packages/21/48/5d81cbe76fc2aa9e071aa489a3041cf0712f5e0663d60d501641f92b7bb4/ujson-5.12.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:07f307780f85b49cba93f291718421b6f5f3b627a323b431fad937a18f6587cb", size = 1038938, upload-time = "2026-05-05T22:04:13.548Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a7/abe1acb0e5d8b8d724b35533a44c89684c88100a5fd9f2fee7f7155528d5/ujson-5.12.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:1c335caea51c31494e514b82d50763b9792d3960d2c7d9fdb6b6fb8ed50ebdd0", size = 1198416, upload-time = "2026-05-05T22:04:15.609Z" }, - { url = "https://files.pythonhosted.org/packages/ed/6e/087067d6ee22bd01bfba9fb1f32ce98c24ae2bcbab53bd2fbf8f7a80fe9e/ujson-5.12.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:19ea07e29a45d199f926aadf93a9974128438c01b83141fba32477c0ee604b33", size = 1091425, upload-time = "2026-05-05T22:04:17.909Z" }, - { url = "https://files.pythonhosted.org/packages/3f/3d/7547835cd0b7fa22eb1122702f81b2403c38a0027a2cc0d75acc449a4a66/ujson-5.12.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:49dd9c378e1c8e676785ff2b62cb490074229f15ab54abf45b623713cb2c36b5", size = 58565, upload-time = "2026-05-05T22:04:23.75Z" }, - { url = "https://files.pythonhosted.org/packages/ed/6a/1784e0b24aab50623eb47b2f7a8dc22c9d809d798854d2568a9cb7c3560f/ujson-5.12.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6d8827904358d7da59ccf2e1fd8de59e78248036d17fecc0462e62c6721f1102", size = 56157, upload-time = "2026-05-05T22:04:25.028Z" }, - { url = "https://files.pythonhosted.org/packages/91/2d/2c1b24df24eee309047d81460c3a1acf0d047207327edc6f3cab8a614985/ujson-5.12.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc26caebea90425662ef0b979f945f6ac832651881107d6ec9a3c4d4a4ba929c", size = 60288, upload-time = "2026-05-05T22:04:26.273Z" }, - { url = "https://files.pythonhosted.org/packages/c5/14/c0c603e3dff2ef98f7deee2df7795e6055abbc5825c6ef530024b3b06a15/ujson-5.12.1-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:45022aae09ac3d45bda6fbfc631088d1aff9a0465542d40bd6d295ced378c430", size = 62302, upload-time = "2026-05-05T22:04:27.516Z" }, - { url = "https://files.pythonhosted.org/packages/5c/0d/889bbc044561d9adc9bf413620fbd9878f352c9fd36da829d319bca2f5ad/ujson-5.12.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b22aa0f644516d3d5b29464949e4b23fe784f84b4a1030ab9ac3cb42aaedabb1", size = 59784, upload-time = "2026-05-05T22:04:28.776Z" }, - { url = "https://files.pythonhosted.org/packages/18/35/3b1d8ff8cd6dc048f5c495af6ee6ded43055562610a7e9b78b438dc6421e/ujson-5.12.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7dc5cf44ea42365cd1b66e6ed3fc6ca040c86587b024a6659b98e99d31cff2cd", size = 1039759, upload-time = "2026-05-05T22:04:30.291Z" }, - { url = "https://files.pythonhosted.org/packages/6a/d8/3c66cdf839420a6da2d6140a54a882c15efd135bcced103bd4473d577636/ujson-5.12.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8df5d984ff4ac1ef292d70f30da03417038a7e1e0bc272d28ca9d34f02f41682", size = 1199121, upload-time = "2026-05-05T22:04:31.961Z" }, - { url = "https://files.pythonhosted.org/packages/54/51/c3d1b94a4ad27dc7532e9f7d00b869463157cede2295ba6d57566afeb8cd/ujson-5.12.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:485f0182a0c0b54c304061cdc826d8343ce595c4055f7a24e72772a8520e5f7b", size = 1092085, upload-time = "2026-05-05T22:04:33.697Z" }, +version = "5.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/7a/c8bb37c8f6f3623d60c33d15d18cd6d6655d0f9c3eb31a9969f76361b199/ujson-5.13.0.tar.gz", hash = "sha256:d62e3d7625384c08082abad81a077af587fdef2761bb14c3822f4234b8d07d75", size = 7166784, upload-time = "2026-06-14T22:36:50.209Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/9a/b5139d696f5328f3cab70b9ec046f15e3f49497a4de6280974640602f539/ujson-5.13.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:cc9dfd41fed397ab03bb9d9fe1cbd83301211c772a17536033ce7d68877ac82b", size = 56897, upload-time = "2026-06-14T22:35:57.974Z" }, + { url = "https://files.pythonhosted.org/packages/53/55/477183aeddfdf0f88ae039ffee0ed866cfb993da0c0c9aa915807554aef8/ujson-5.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ca7ef2fa6c408a7c0f558e4d33d93b32ddc35ed6d3cfc505747931a64b7465d5", size = 54451, upload-time = "2026-06-14T22:35:58.932Z" }, + { url = "https://files.pythonhosted.org/packages/ea/63/55e5f23e156b4c8bca095d828b4cd3180c0b42aa3501ef88836d79606fea/ujson-5.13.0-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a554b2e5bee85030369514cef8b0b913cebe1a4c2c0c13541966d50bcba22b1a", size = 60053, upload-time = "2026-06-14T22:35:59.969Z" }, + { url = "https://files.pythonhosted.org/packages/26/b6/08c6cf5548bd6f4bb557c9fa7e8edf87324bb04c17249d1966028d61dde0/ujson-5.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ea939ff629ab03ae970d03eca6d1febd8ed55ba38ca44aec64ce997537cd3fa0", size = 53481, upload-time = "2026-06-14T22:36:01.007Z" }, + { url = "https://files.pythonhosted.org/packages/6e/b3/0ac9a03551467784067f505df1bb875c639ba32f1da79ce467ab15911ada/ujson-5.13.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b98bf2faa5e37ecfe752226ea08290031e375a0c43d425a0b955fb3e702a2a71", size = 55058, upload-time = "2026-06-14T22:36:02.297Z" }, + { url = "https://files.pythonhosted.org/packages/ba/be/ec91029aec067174473d022fa0f6c3c1431a173f888d7599739f05c668eb/ujson-5.13.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a4b92344b16e414aeb609e57f62c466500e53c94f1698f5b149dc0b7223ec3e", size = 58225, upload-time = "2026-06-14T22:36:03.321Z" }, + { url = "https://files.pythonhosted.org/packages/29/33/a948f329252ece3f9c93d177243de6e677927ebc6ac44256742dbbef3c39/ujson-5.13.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7df805aad707507a1fa165fb716218ca3a89f142125dc4b23c9fcc08fa402d97", size = 57930, upload-time = "2026-06-14T22:36:04.385Z" }, + { url = "https://files.pythonhosted.org/packages/f1/0c/c33655218b8e0a8adbf066de0b999cae5c324061f3eaa4dda17423145d9e/ujson-5.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7576bdbef327c3528f011002a2d74486f6fe4e33289bdb7a042b7f1a6e9d8285", size = 1037728, upload-time = "2026-06-14T22:36:05.467Z" }, + { url = "https://files.pythonhosted.org/packages/2c/bd/d286947525ea7ce3f2d8dc55c15b9ffbe425bc455c96af7b8f8a402599a9/ujson-5.13.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6eee5d7cce3f32a468905f9ff61807a60287a90258d849460f6fa826e810870d", size = 1197146, upload-time = "2026-06-14T22:36:06.839Z" }, + { url = "https://files.pythonhosted.org/packages/3c/3c/9eb916377050b0785f048a34588c1c390ddd41ae00b78db68ee1ad022356/ujson-5.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:144e9d8a454cfa727e0f755e1863738ed68068583bda5463052cb446835bd56c", size = 1090223, upload-time = "2026-06-14T22:36:08.329Z" }, + { url = "https://files.pythonhosted.org/packages/12/e9/1c543837c6a3c6672361882a0fa269bd02daf9cc4c0ca88a9dccd9df98d9/ujson-5.13.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:69b4e36bb7d5f413ba8c00c8006b2ec627cc5ace97301462f6aadb66ec9d2979", size = 57402, upload-time = "2026-06-14T22:36:13.238Z" }, + { url = "https://files.pythonhosted.org/packages/99/e4/39862f0f7174ff07cfd1e2d0c9065ded34aeebdb7db8daf2f0e5bf89b46f/ujson-5.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8b644d50f66de5490c1823c7176618cead5e8e8a88cba9f40a6308ca52e79267", size = 54973, upload-time = "2026-06-14T22:36:14.432Z" }, + { url = "https://files.pythonhosted.org/packages/02/66/f53d3b32c3f177f846ca6b624e832f29000d8a213a2d8768e254bd470ced/ujson-5.13.0-cp314-cp314t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:15107aaa4f559d55201165ec32abb35c283a861be1fa67229578cb7d93fcd93a", size = 60683, upload-time = "2026-06-14T22:36:15.806Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d4/dddc4646d2633c85c938c2ded7d5a9711cdad5be1e13b31b7dad76f61c83/ujson-5.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6e343c5f0c058523f1edbf6ae4eceb4e0d934205a53bbdd8d9a945c83324662a", size = 54167, upload-time = "2026-06-14T22:36:16.952Z" }, + { url = "https://files.pythonhosted.org/packages/5f/c0/d8608c3f4d3f05e6441364b63fde1d279700135c1a6577a773662c07fbcc/ujson-5.13.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:02200035bc80e830f076ffc1b329a94c295aee6d9de8c9043647cb9a7bd4f76f", size = 55568, upload-time = "2026-06-14T22:36:17.975Z" }, + { url = "https://files.pythonhosted.org/packages/22/8e/dd12b735aaba0806c3d70c18184d50e1f9712e0757c7c0a4f376450cfe28/ujson-5.13.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7f19b81b73ff28f5c5022ee794f94122bfcda07a76423078e349465d71223a1", size = 59086, upload-time = "2026-06-14T22:36:19.071Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/ad41e8752d5ec3a590a5e7b426a54e36b7aab911d9b5a4f7384dc62507ab/ujson-5.13.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:82e1393e6dbe3c95fdfc95c6c528890e191351a1f024ef51126cf1f22543af52", size = 58667, upload-time = "2026-06-14T22:36:20.171Z" }, + { url = "https://files.pythonhosted.org/packages/e1/8e/b44a6afb77b94118655c029081b7932d64bb4c5b1c8ba2b7f5808b5d0bc2/ujson-5.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38afcf994b28ed85ea2420e2a8d79a37d0a77348b3daf53850c16edda66f942d", size = 1038553, upload-time = "2026-06-14T22:36:21.245Z" }, + { url = "https://files.pythonhosted.org/packages/7e/93/fab1d786174c8780eb3e386c73f1925a435e97fbf77c957fea4fca83994d/ujson-5.13.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:1bdf2518971586f2b413156c49d9dd8b56cc990a8647081e1bd00af60564d469", size = 1197938, upload-time = "2026-06-14T22:36:22.585Z" }, + { url = "https://files.pythonhosted.org/packages/f3/bc/2f073bb708f9d128f5d1cb39063a5f6421b1ce94c61be8661c55a189f407/ujson-5.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:751ad01042472f1c7c02f5c597c7aee79834e82a6cc384ca302173bbc8e8deb8", size = 1090938, upload-time = "2026-06-14T22:36:23.947Z" }, ] [[package]] diff --git a/docs/development/external-contributions.md b/docs/development/external-contributions.md deleted file mode 100644 index 33642b1da6..0000000000 --- a/docs/development/external-contributions.md +++ /dev/null @@ -1,136 +0,0 @@ -# Handling External Contributions - -Internal guidelines for triaging and reviewing pull requests from external contributors. - -## Contribution categories - -Every external PR falls into one of three categories. The category determines what we require before reviewing. - -| Category | Requires issue? | Requires approval? | Can close immediately? | -|----------|----------------|--------------------|-----------------------| -| **Feature** | Yes | Yes (tech lead or product manager) | If no approved issue exists | -| **Bug fix** | Yes (with repro steps) | No, but approach must be sound | If no issue or approach is wrong | -| **Task** (small) | No | No | At our discretion | -| **Task** (large) | Yes | Likely yes | If no issue or approach is wrong | - -**Tasks** cover anything that isn't a feature or bug fix: typo corrections, documentation updates, refactoring, dependency bumps, CI improvements, etc. Small tasks (obvious correctness, trivial scope) can go straight to a PR. Larger tasks that touch multiple files or require design decisions need an issue and likely approval, same as features. - -## Evaluation criteria - -For each PR, assess these criteria. The combination drives the decision — not any single criterion in isolation. - -| Criterion | Assessment | -|-----------|-----------| -| **Type** | Bug fix / feature / task (small or large) | -| **Size** | Small (< 10 LOUC) / medium (10-100) / large (> 100). LOUC = lines of useful code, excluding tests, comments, translations, docs and boilerplate | -| **Complexity** | Trivial / moderate / touches high-risk area | -| **Utility** | Addresses known need / nice-to-have / not aligned with roadmap | -| **Approach** | Approved in issue / sound / needs rework / fundamentally wrong | -| **Code quality** | Matches our standards / needs polish / AI slop | -| **Scope** | Open-source only / touches premium or enterprise code | - -### Closure rules - -Close the PR right away (with the appropriate response template) if any of these apply: - -- Touches `premium/` or `enterprise/` code, or moves code from those directories to core -- Feature PR without a pre-approved issue -- Bug fix PR without an issue containing reproduction steps -- Not aligned with product direction -- AI-generated low-quality code with no meaningful effort from the contributor - -### Review signals - -Favor reviewing when: -- Contributor discussed the approach beforehand and got approval -- Addresses a known, prioritized issue -- Small, well-scoped, well-described -- Code quality is close to what we'd write ourselves - -Favor closing when: -- Large PR with no prior discussion -- Reviewing + guiding would cost more than reimplementing -- Contributor shows no willingness to iterate - -### Mixed signals - -When the assessment is mixed (e.g., good approach but large size, or useful but needs significant rework), discuss with the tech lead before responding. - -## Response templates - -Use differentiated messages depending on the situation. Do not use the same message for every closure. - -### Not aligned / closing - -Close the PR immediately. The contributor can still respond on the closed PR. - -``` -Hi, - -Thanks for your contribution. After reviewing this PR, we've decided not to move forward with it because [specific reason: not aligned with our roadmap / addresses a use case we don't plan to support / etc.]. - -If you'd like to contribute in the future, please check our [CONTRIBUTING.md](https://github.com/baserow/baserow/blob/develop/CONTRIBUTING.md) for guidelines on how we evaluate contributions. - -Thanks for your interest in Baserow. -``` - -### No prior issue (feature or bug) - -Close the PR immediately with a pointer to the process. - -``` -Hi, - -Thanks for taking the time to submit this. [Features require an approved issue / Bug fixes require an issue with reproduction steps] before opening a PR. This helps us align on the approach early and avoid wasted effort on both sides. - -Please open an issue first following our [contribution guidelines](https://github.com/baserow/baserow/blob/develop/CONTRIBUTING.md), and we'll take it from there. -``` - -### Touches premium/enterprise code - -Close immediately. - -``` -Hi, - -Thanks for your contribution. Unfortunately, this PR modifies code in the `premium/` or `enterprise/` directories, which are not open to external contributions. - -If the rest of your changes are valid for the open-source core, please resubmit a PR without those modifications. -``` - -### Promising but needs work - -Do **not** close. List what's needed and set a deadline. - -``` -Hi, - -Thanks for this PR. The direction looks [good / promising], but it needs some changes before we can merge it: - -- [Specific item 1] -- [Specific item 2] -- [...] - -Please address these within the next 2 weeks. If we don't hear back, we'll close the PR. You can always reopen it later if you want to pick it back up. - -If you'd prefer, you can also ask us to finish it — see the "Help us finish it" section in our [CONTRIBUTING.md](https://github.com/baserow/baserow/blob/develop/CONTRIBUTING.md). -``` - -## Stale PR policy - -- After a review with requested changes: wait **2 weeks** for a response -- If no response after 2 weeks: close with a brief message -- The contributor can reopen or submit a new PR later - -``` -Hi, - -Closing this PR due to inactivity. If you'd like to pick this up again, feel free to reopen it or submit a new PR. -``` - -### How to credit - -- Mention the contributor by name in the changelog entry -- Include them in release notes as a contributor -- Use co-author in the commit if we build on their code directly - diff --git a/web-frontend/yarn.lock b/web-frontend/yarn.lock index e517367aed..9993d05615 100644 --- a/web-frontend/yarn.lock +++ b/web-frontend/yarn.lock @@ -7176,9 +7176,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^3.3.1: - version "3.4.10" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.10.tgz#96704295b4d8aeefcc8c7a90caa579b0ad69e46a" - integrity sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w== + version "3.4.11" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.11.tgz#29c8ba496475f279ef4015784068452fb14a0680" + integrity sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw== optionalDependencies: "@types/trusted-types" "^2.0.7"