From 3ff83951c4dbb7e2da7d807604f9c26dcd2c8368 Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sun, 11 Jan 2026 05:10:10 +0530 Subject: [PATCH 1/6] style: format Python code with black --- application/utils/spreadsheet_parsers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/utils/spreadsheet_parsers.py b/application/utils/spreadsheet_parsers.py index be36be719..867b0f42e 100644 --- a/application/utils/spreadsheet_parsers.py +++ b/application/utils/spreadsheet_parsers.py @@ -333,7 +333,7 @@ def update_cre_in_links( def parse_hierarchical_export_format( - cre_file: List[Dict[str, str]] + cre_file: List[Dict[str, str]], ) -> Dict[str, List[defs.Document]]: """parses the main OpenCRE csv and creates a list of standards in it From 53e0c6991776b1dbceb98062b5ce7cd4008c7f03 Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sun, 11 Jan 2026 05:20:08 +0530 Subject: [PATCH 2/6] style: format Python code with black --- migrations/versions/7a17989aa1e3_first_migration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/versions/7a17989aa1e3_first_migration.py b/migrations/versions/7a17989aa1e3_first_migration.py index d0e269829..c5ed7d586 100644 --- a/migrations/versions/7a17989aa1e3_first_migration.py +++ b/migrations/versions/7a17989aa1e3_first_migration.py @@ -1,7 +1,7 @@ """First Migration Revision ID: 7a17989aa1e3 -Revises: +Revises: Create Date: 2021-08-31 19:23:49.227719 """ From 918dc47e7324704a8f80046e758a9b3535a5a358 Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sun, 11 Jan 2026 06:44:13 +0530 Subject: [PATCH 3/6] chore(ci): add pre-commit formatting and CI enforcement --- .github/workflows/auto-format.yml | 45 ++++++++++ .github/workflows/linter.yml | 3 +- .github/workflows/pre-commit-check.yml | 31 +++++++ .pre-commit-config.yaml | 20 +++++ docs/CONTRIBUTING.md | 110 ++++++++++++++++++------- 5 files changed, 179 insertions(+), 30 deletions(-) create mode 100644 .github/workflows/auto-format.yml create mode 100644 .github/workflows/pre-commit-check.yml create mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/auto-format.yml b/.github/workflows/auto-format.yml new file mode 100644 index 000000000..195d87aef --- /dev/null +++ b/.github/workflows/auto-format.yml @@ -0,0 +1,45 @@ +--- +name: Auto-format PRs + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: write + +jobs: + auto-format: + name: Auto format with pre-commit + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: true + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Install pre-commit + run: python -m pip install --upgrade pip pre-commit + + - name: Run pre-commit and apply fixes + id: precommit + run: | + # Run all hooks and allow modifications + pre-commit run --all-files || true + # If pre-commit modified files, commit and push them back to the PR branch + if [ -n "$(git status --porcelain)" ]; then + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add -A + git commit -m "chore(format): apply pre-commit formatting" + # Try to push; if this action does not have permission the push will fail. + git push || (echo "Push failed: this action cannot push to the PR branch. If this PR came from a fork, enable 'Allow edits from maintainers' or run 'pre-commit install' and 'pre-commit run --all-files' locally, then push." && exit 0) + else + echo "No formatting changes needed" + fi diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 9c7faf9a1..61f3e91a4 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -14,6 +14,7 @@ jobs: - name: Lint Code Base uses: github/super-linter@v6 env: - VALIDATE_PYTHON_BLACK: true + # Let pre-commit/Black handle python formatting (avoid duplicate Black failures) + VALIDATE_PYTHON_BLACK: false VALIDATE_ALL_CODEBASE: false GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pre-commit-check.yml b/.github/workflows/pre-commit-check.yml new file mode 100644 index 000000000..288553b34 --- /dev/null +++ b/.github/workflows/pre-commit-check.yml @@ -0,0 +1,31 @@ +--- +name: pre-commit checks + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + pre-commit: + name: Run pre-commit checks + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - name: Install pre-commit + run: python -m pip install --upgrade pip pre-commit + + - name: Run pre-commit (checks) + # This will exit non-zero if any hook fails (so the PR will be blocked) + run: pre-commit run --all-files \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..2b1fe4b30 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,20 @@ +repos: + - repo: https://github.com/psf/black + rev: 24.10.0 + hooks: + - id: black + language_version: python3 + - repo: https://github.com/pre-commit/mirrors-isort + rev: v5.13.0 + hooks: + - id: isort + - repo: https://github.com/charliermarsh/ruff-pre-commit + rev: v0.0.297 + hooks: + - id: ruff + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 7fdc26f9a..782e34d72 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -6,8 +6,7 @@ The following is a set of guidelines for contributing. These are mostly guidelin #### Table Of Contents -- [Contributing to OpenCRE](#contributing-to-opencre) - - [Table Of Contents](#table-of-contents) +- [Contributing to OpenCRE](#contributing-to-opencre) - [Table Of Contents](#table-of-contents) - [Code of Conduct](#code-of-conduct) - [I don't want to read this whole thing I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question) - [How Can I Contribute?](#how-can-i-contribute) @@ -20,7 +19,6 @@ The following is a set of guidelines for contributing. These are mostly guidelin - [Pull Requests](#pull-requests) - [Styleguides](#styleguides) - [Git Commit Messages](#git-commit-messages) - ## Code of Conduct @@ -38,7 +36,6 @@ or send a message to rob.vanderveer@owasp.org The "Issues" page lists a number of features we would like to implement, we have tagged the ones we believe are easy to pick up with the tag `good first issue` and/or `beginner`. Alternatively you can contribute content (see below) or request features or mappings by opening an Issue. - ### How can I contribute content (a standard mapping or changes to the CRE catalog)? Adding a mapping to OpenCRE for a new standard X means that sections in X are each assigned to the corresponding ‘Common Requirement’ (or CRE number) at opencre.org. @@ -46,12 +43,13 @@ For example, the section 613-Insufficien Session expiration in the CWE standard The result is that when you go to the overview page of that requirement(CRE), users will see a link to CWE 613: https://www.opencre.org/cre/065-782 How to: + 1. Get the OpenCRE standard mapping template spreadsheet -2. For every section in the standard, find the corresponding Common Requirement (CRE number) at OpenCRE and enter in that row the details of that section in the right columns: name, id, and hyperlink +2. For every section in the standard, find the corresponding Common Requirement (CRE number) at OpenCRE and enter in that row the details of that section in the right columns: name, id, and hyperlink 3. In case you identify opportunities to add Common Requirements: add those to the spreadsheet 4. Send the mapping template file by creating a new github issue and add the file. That way, the community can see it, and we can use that issue to further communicate. Another option is to send the file to rob.vanderveer@owasp.org. You can also use that mail address for any questions. -ad. 1 +ad. 1 The mapping spreadsheet (Excel) can be obtained [here](https://github.com/OWASP/OpenCRE/raw/refs/heads/main/docs/CREmappingtemplate.xls). Note, it contains one example, where it links the CRE for development processes to a section in NIST 800-53. @@ -71,12 +69,11 @@ In general, this will be rare. ad.4 OpenCRE has an importing interface in case you run your own myOpenCRE, but for the public opencre.org we first perform some checks before we add a standard to it - hence the request to send the mapping to us in email. +#### Alternative, automated method of linking: -#### Alternative, automated method of linking: -NOTE: there is an alternative method of linking a standard to OpenCRE, and it's the preferred way because it is self-maintaining. It requires editing the orginal standard text. What you do is you add to the standard a hyperlink reference to the relevant common requirement (e.g. [Restrict XML parsing](https://www.opencre.org/cre/764-507)) in a section on that topic. And then you specify to us at OpenCRE how we can read your source (e.g. Github) automatically to extract those hyperlinks and to construct links to that section in the document, and parse the name and id. That way, the links between the standard and OpenCRE will stay intact if links move, or change. It's easy and no maintenance required. +NOTE: there is an alternative method of linking a standard to OpenCRE, and it's the preferred way because it is self-maintaining. It requires editing the orginal standard text. What you do is you add to the standard a hyperlink reference to the relevant common requirement (e.g. [Restrict XML parsing](https://www.opencre.org/cre/764-507)) in a section on that topic. And then you specify to us at OpenCRE how we can read your source (e.g. Github) automatically to extract those hyperlinks and to construct links to that section in the document, and parse the name and id. That way, the links between the standard and OpenCRE will stay intact if links move, or change. It's easy and no maintenance required. Again, this only works if you have control over the content of the standard. Contact us if you want to set this up. We'd be happy to help. - ### Reporting Bugs When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](https://github.com/common-requirement-enumeration/.github/blob/main/.github/ISSUE_TEMPLATE.md), the information it asks for helps us resolve issues faster. @@ -89,11 +86,11 @@ Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). Explain the problem and include additional details to help maintainers reproduce the problem: -* **Use a clear and descriptive title** for the issue to identify the problem. -* **Describe the exact steps which reproduce the problem** in as many details as possible. -* **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. -* **Explain which behavior you expected to see instead and why.** +- **Use a clear and descriptive title** for the issue to identify the problem. +- **Describe the exact steps which reproduce the problem** in as many details as possible. +- **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). +- **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. +- **Explain which behavior you expected to see instead and why.** ### Suggesting Enhancements @@ -105,19 +102,19 @@ When you are creating an enhancement suggestion, please [include as many details Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). Create an issue on that repository and provide the following information: -* **Use a clear and descriptive title** for the issue to identify the suggestion. -* **Provide a step-by-step description of the suggested enhancement** in as many details as possible. -* **Provide specific examples to demonstrate the steps**. Include copy/pasteable snippets which you use in those examples, as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -* **Describe the current behavior** and **explain which behavior you expected to see instead** and why. -* **Explain why this enhancement would be useful**. +- **Use a clear and descriptive title** for the issue to identify the suggestion. +- **Provide a step-by-step description of the suggested enhancement** in as many details as possible. +- **Provide specific examples to demonstrate the steps**. Include copy/pasteable snippets which you use in those examples, as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). +- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. +- **Explain why this enhancement would be useful**. ### Your First Code Contribution Unsure where to begin contributing? You can start by looking through these `beginner`, `good first issue` and `help-wanted` issues: -* Beginner issues - issues which should only require a few lines of code, and a test or two. -* Good first issue - issues which should require more substantial changes but can be done in an afternoon or two. -* Help wanted issues - issues which should be a bit more involved than `beginner` issues. +- Beginner issues - issues which should only require a few lines of code, and a test or two. +- Good first issue - issues which should require more substantial changes but can be done in an afternoon or two. +- Help wanted issues - issues which should be a bit more involved than `beginner` issues. #### Pull Requests @@ -130,12 +127,11 @@ We use eslint and black to enforce style. `make lint` should fix most style prob ### Git Commit Messages -* Use the present tense ("Add feature" not "Added feature") -* Use the imperative mood ("Move cursor to..." not "Moves cursor to...") -* Limit the first line to 72 characters or less -* Reference issues and pull requests liberally after the first line -* When only changing documentation, include `[ci skip]` in the commit title. - +- Use the present tense ("Add feature" not "Added feature") +- Use the imperative mood ("Move cursor to..." not "Moves cursor to...") +- Limit the first line to 72 characters or less +- Reference issues and pull requests liberally after the first line +- When only changing documentation, include `[ci skip]` in the commit title. ## Working on the frontend @@ -143,8 +139,64 @@ You can start the frontend in a debuggable instance separate from the backend us After you have installed the application following the README. You can start the backend server with: +
make dev-flask
-Then in a separate terminal + +Then in a separate terminal +
cd application/frontend
+ and finally start the frontend in a debug session: +
yarn start
+ +--- + +## Code Formatting & CI Consistency + +OpenCRE enforces consistent formatting and basic linting using **pre-commit**.\ +This is done to prevent recurring CI failures (for example, `PYTHON_BLACK` errors) and to ensure a smooth review process for **all contributors**, including fork-based pull requests. + +### What this means for contributors + +- Python formatting is enforced using **Black** +- Import ordering is handled by **isort** +- Basic linting is handled by **Ruff** +- These checks run both **locally (recommended)** and **in CI** + +If formatting or linting rules are violated, CI will fail until the issue is fixed. + +### Running checks locally (strongly recommended) + +Installing and running pre-commit locally helps you catch issues **before pushing**. + +``` +pip install pre-commit +pre-commit install +pre-commit run --all-files + +``` + +### **CI behavior** + +- All pull requests (including forks) run pre-commit checks in CI + +- Python formatting is handled by **pre-commit**, not Super-Linter + +- Super-Linter continues to run for non-Python checks + +### **Auto-formatting** + +Some pull requests may receive **automatic formatting commits** via GitHub Actions when possible: + +- PRs from the main repository + +- Forked PRs with **"Allow edits from maintainers"** enabled + +If automatic fixes cannot be pushed, CI logs will explain how to fix issues locally. + +### **Forks & maintainer edits** + +Contributors using forks are encouraged to enable **"Allow edits from maintainers"** when opening a PR. + +This allows maintainers to quickly apply formatting fixes and reduce review friction. From dd2d7367ea32f3b9cdfa22cd8bb6bda61e99f827 Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sun, 11 Jan 2026 07:18:08 +0530 Subject: [PATCH 4/6] chore: add pre-commit with black and non-blocking ruff --- .pre-commit-config.yaml | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2b1fe4b30..bd8c7a246 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,20 +1,28 @@ +exclude: | + ^application/static/| + ^application/frontend/www/| + ^application/static/assets/| + ^node_modules/| + ^dist/| + ^build/| + ^\.cache/| + repos: - repo: https://github.com/psf/black rev: 24.10.0 hooks: - id: black language_version: python3 - - repo: https://github.com/pre-commit/mirrors-isort - rev: v5.13.0 - hooks: - - id: isort - - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.297 + + # Ruff in CHECK-ONLY mode (NO autofix) + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.3.7 hooks: - id: ruff + args: ['--no-fix', '--exit-zero'] + + # Lightweight hygiene only (safe) - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - id: check-yaml From 71e5cf6f8f39faab79e503d27d19565f980e9bca Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sun, 11 Jan 2026 07:40:31 +0530 Subject: [PATCH 5/6] chore(ci): standardize Python formatting with pre-commit --- .github/workflows/linter.yml | 3 +-- .pre-commit-config.yaml | 12 ------------ docs/CONTRIBUTING.md | 2 -- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 61f3e91a4..9c7faf9a1 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -14,7 +14,6 @@ jobs: - name: Lint Code Base uses: github/super-linter@v6 env: - # Let pre-commit/Black handle python formatting (avoid duplicate Black failures) - VALIDATE_PYTHON_BLACK: false + VALIDATE_PYTHON_BLACK: true VALIDATE_ALL_CODEBASE: false GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bd8c7a246..b0fa604e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,15 +14,3 @@ repos: - id: black language_version: python3 - # Ruff in CHECK-ONLY mode (NO autofix) - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.7 - hooks: - - id: ruff - args: ['--no-fix', '--exit-zero'] - - # Lightweight hygiene only (safe) - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 - hooks: - - id: check-yaml diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 782e34d72..922860b06 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -160,8 +160,6 @@ This is done to prevent recurring CI failures (for example, `PYTHON_BLACK` error ### What this means for contributors - Python formatting is enforced using **Black** -- Import ordering is handled by **isort** -- Basic linting is handled by **Ruff** - These checks run both **locally (recommended)** and **in CI** If formatting or linting rules are violated, CI will fail until the issue is fixed. From f0ec91540f02e7e2a97820a4bdc9847443cc5505 Mon Sep 17 00:00:00 2001 From: PRAteek-singHWY Date: Sat, 17 Jan 2026 13:54:58 +0530 Subject: [PATCH 6/6] chore: pivot to local-only pre-commit setup (remove CI enforcement) --- .github/workflows/auto-format.yml | 45 -------------------------- .github/workflows/pre-commit-check.yml | 31 ------------------ docs/CONTRIBUTING.md | 43 ++++-------------------- 3 files changed, 7 insertions(+), 112 deletions(-) delete mode 100644 .github/workflows/auto-format.yml delete mode 100644 .github/workflows/pre-commit-check.yml diff --git a/.github/workflows/auto-format.yml b/.github/workflows/auto-format.yml deleted file mode 100644 index 195d87aef..000000000 --- a/.github/workflows/auto-format.yml +++ /dev/null @@ -1,45 +0,0 @@ ---- -name: Auto-format PRs - -on: - pull_request: - types: [opened, synchronize, reopened] - -permissions: - contents: write - -jobs: - auto-format: - name: Auto format with pre-commit - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: true - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.x' - - - name: Install pre-commit - run: python -m pip install --upgrade pip pre-commit - - - name: Run pre-commit and apply fixes - id: precommit - run: | - # Run all hooks and allow modifications - pre-commit run --all-files || true - # If pre-commit modified files, commit and push them back to the PR branch - if [ -n "$(git status --porcelain)" ]; then - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add -A - git commit -m "chore(format): apply pre-commit formatting" - # Try to push; if this action does not have permission the push will fail. - git push || (echo "Push failed: this action cannot push to the PR branch. If this PR came from a fork, enable 'Allow edits from maintainers' or run 'pre-commit install' and 'pre-commit run --all-files' locally, then push." && exit 0) - else - echo "No formatting changes needed" - fi diff --git a/.github/workflows/pre-commit-check.yml b/.github/workflows/pre-commit-check.yml deleted file mode 100644 index 288553b34..000000000 --- a/.github/workflows/pre-commit-check.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -name: pre-commit checks - -on: - push: - pull_request: - -permissions: - contents: read - -jobs: - pre-commit: - name: Run pre-commit checks - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.x" - - - name: Install pre-commit - run: python -m pip install --upgrade pip pre-commit - - - name: Run pre-commit (checks) - # This will exit non-zero if any hook fails (so the PR will be blocked) - run: pre-commit run --all-files \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 922860b06..66197db38 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -152,49 +152,20 @@ and finally start the frontend in a debug session: --- -## Code Formatting & CI Consistency -OpenCRE enforces consistent formatting and basic linting using **pre-commit**.\ -This is done to prevent recurring CI failures (for example, `PYTHON_BLACK` errors) and to ensure a smooth review process for **all contributors**, including fork-based pull requests. +## Code Formatting -### What this means for contributors +OpenCRE encourages consistent formatting to keep the codebase clean and readable. +We provide a **pre-commit** configuration to help you format your code locally before submitting a Pull Request. -- Python formatting is enforced using **Black** -- These checks run both **locally (recommended)** and **in CI** +### Running checks locally (Recommended) -If formatting or linting rules are violated, CI will fail until the issue is fixed. +Running these checks locally helps you catch formatting issues early and prevents unrelated linting failures in CI. -### Running checks locally (strongly recommended) - -Installing and running pre-commit locally helps you catch issues **before pushing**. - -``` +```bash pip install pre-commit pre-commit install pre-commit run --all-files - ``` -### **CI behavior** - -- All pull requests (including forks) run pre-commit checks in CI - -- Python formatting is handled by **pre-commit**, not Super-Linter - -- Super-Linter continues to run for non-Python checks - -### **Auto-formatting** - -Some pull requests may receive **automatic formatting commits** via GitHub Actions when possible: - -- PRs from the main repository - -- Forked PRs with **"Allow edits from maintainers"** enabled - -If automatic fixes cannot be pushed, CI logs will explain how to fix issues locally. - -### **Forks & maintainer edits** - -Contributors using forks are encouraged to enable **"Allow edits from maintainers"** when opening a PR. - -This allows maintainers to quickly apply formatting fixes and reduce review friction. +This will automatically format your Python code using **Black** and run other standard checks.