{"owner":"qmk","repo":"qmk_firmware","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":[".github/copilot-instructions.md"],"skills":{".github/copilot-instructions.md":"---\napplyTo: \"keyboards/**\"\nexcludeAgent:\n  - \"coding-agent\"\n---\n# GitHub Copilot Instructions for QMK Pull Request Review\nThis document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.\n\n> **Scope**: This review applies **only to changes within the `keyboards/` folder**. Changes outside `keyboards/` (e.g., core code, quantum, platforms, drivers) must be flagged and deferred to a QMK Collaborator — do not review them.\n\n## General PR Requirements\n\n### Branch and Submission Standards\n- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch\n  - Flag if submitter is using their own `master` branch as source\n  - Suggest using feature branches instead for cleaner fork management\n- **Target Branch Policy**:\n  - **New keyboard additions** → `master` branch (new folders under `keyboards/`)\n  - **All other changes** → `develop` branch:\n    - Keyboard updates, refactors, or moves\n    - Core code changes\n    - Data-driven configuration migrations\n    - Any modifications to existing keyboards\n- **PR Scope**: PRs should contain the smallest set of modifications for a single change\n  - Flag PRs that modify multiple keyboards simultaneously\n  - Suggest splitting large PRs into focused, incremental changes\n- **Merge Conflicts**: Check for unresolved merge conflicts\n\n### File Naming and Structure\n- **Lowercase Requirement**: All new directories and filenames must be lowercase\n  - Exception: Upstream sources with original uppercase (LUFA, ChibiOS)\n  - Exception: Core files with valid justification\n  - **Reject**: Board designer preference for uppercase is NOT valid justification\n\n### License Headers\n- **Required**: Valid license headers on all `*.c` and `*.h` files\n- **Recommended**: GPL2/GPL3 for consistency\n- **Format**: Check for proper GPL2+ header or SPDX identifier\n  ```c\n  // Copyright 2024 Your Name (@yourgithub)\n  // SPDX-License-Identifier: GPL-2.0-or-later\n  ```\n- **Exception**: Simple assignment-only `rules.mk` files don't need headers\n- **Flag**: Missing or ambiguous license headers (blocks merge)\n\n---\n\n## Keymap PR Reviews\n\n**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.\n\n### Note on Non-Default Keymaps\n- Any keymap folder named something other than `default` (e.g., `default_clueboard`, `via`) is a non-default keymap\n- **Do not review the content** of non-default keymaps — flag their presence and note that a QMK Collaborator must review them\n\n### Keymap Code Standards\n- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files\n- **Enums**: Suggest using layer enums instead of `#define`s for layers (soft suggestion only)\n- **Custom Keycodes**: First entry must be `QK_USER`\n- **VIA**: Keymaps should NOT enable VIA\n  - VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)\n\n---\n\n## Keyboard PR Reviews\n\n**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:\n- `info.json` or `keyboard.json` (keyboard root or variant level)\n- `readme.md` (keyboard level)\n- `rules.mk` (keyboard level)\n- `config.h` (keyboard level, not keymap level)\n- `<keyboard>.c` and `<keyboard>.h` files\n- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)\n\n### Branch Targeting\n- **New Keyboards**: Target `master` branch\n  - New additions to `keyboards/` folder submit to `master`\n- **Keyboard Moves**: Must target `develop` branch\n  - Check `data/mappings/keyboard_aliases.hjson` is updated for moves\n- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts\n- **Data Driven Migration**: Must target `develop`\n\n### info.json and keyboard.json Requirements\n- **Schema Validation**: Verify that `info.json` and `keyboard.json` files are valid JSON (no syntax errors, no trailing commas, properly closed brackets)\n- **Mandatory Elements**:\n  - `url` field is present and begins with `http://` or `https://`\n  - `maintainer` field is present and non-empty\n  - `usb.vid` and `usb.pid` fields are present and match the `0x` hexadecimal format (e.g. `\"vid\": \"0x1234\"`, `\"pid\": \"0xFEED\"`)\n  - `usb.device_version` field is present\n  - Each key entry in every `layout` array must include a `\"matrix\"` property (e.g. `{\"label\": \"L01\", \"matrix\": [0, 0], \"x\": 0, \"y\": 0}`)\n  - Microcontroller and bootloader specified\n  - Diode direction (if not using direct pins)\n- **Layout Naming**:\n  - Single layout: Must be named `LAYOUT` or match `LAYOUT_*` pattern\n  - Multiple layouts: Must include `LAYOUT_all` plus at least one alternate name\n\n### readme.md Requirements\n- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)\n- **Flash Command**: Present with `:flash` at end\n- **Hardware Link**: Valid availability link (unless handwired)\n  - Private groupbuys acceptable\n  - Open-source should link to files\n- **Reset Instructions**: Bootloader reset instructions must be present (non-empty)\n- **Images**: A keyboard image is preferred but not mandatory\n  - If present, images must not be hosted in the repository\n  - If an imgur URL is used, it must link directly to the image (i.e. `https://i.imgur.com/<id>.<ext>`), not the preview page (i.e. not `https://imgur.com/<id>`)\n\n### rules.mk Standards\n- **Removed Items**:\n  - Size comments like `(-/+size)`\n\n### config.h Standards (Keyboard Level)\n- **Prohibited**:\n  - `#define DESCRIPTION`\n  - Comment blocks explaining features\n  - Commented-out unused defines\n  - `#include \"config_common.h\"`\n- **No Vial**: Vial-related files/changes not accepted\n\n### Keyboard Implementation Files\n\n#### `<keyboard>.c`\n- **Advanced Code Flag**: ⚠️ If a `<keyboard>.c` file is present in the PR, flag it as possible advanced code requiring QMK Collaborator review\n\n#### `<keyboard>.h`\n- **Include**: `#include \"quantum.h\"` at top\n- **Layout Macros**: If `LAYOUT` macros are present, suggest moving them to `info.json` or `keyboard.json`\n\n### Default Keymap Standards\n\n**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.\n\n- **Pristine Requirement**: Bare minimum clean slate\n  - ⚠️ If `keymap.c` contains anything beyond the `keymaps[]` array, or if the `default` keymap folder contains additional `.c` or `.h` files, flag this as possible advanced code requiring QMK Collaborator review\n- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros\n- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`\n- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present\n- **No VIA**: Default keymap should not enable VIA\n\n### Prohibited Files\n- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)\n- **No KLE JSON**: Not used within QMK\n- **Single Keyboard Per PR**: A PR must not modify more than one `keyboards/<folder>/` directory\n  - Flag PRs that touch multiple top-level keyboard folders (e.g., both `keyboards/mykeyboard1/` and `keyboards/mykeyboard2/`) — each keyboard must be a separate PR\n- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors\n  - Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)\n  - Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)\n\n---\n\n## Review Response Templates\n\n### For source master branch usage:\n```\n⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.\n\nSee: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)\n```\n\n### For incorrect target branch:\n```\n❌ This PR targets the wrong branch:\n- **New keyboard additions** should target `master`\n- **Keyboard updates/refactors/moves** should target `develop`\n\nPlease change the target branch accordingly.\n```\n\n### For missing license headers:\n```\n❌ Missing GPL-compatible license headers on the following files:\n- [list files]\n\nPlease add GPL2+ headers (GPL2/GPL3 recommended). Example:\n\\`\\`\\`c\n// Copyright 2024 Your Name (@yourgithub)\n// SPDX-License-Identifier: GPL-2.0-or-later\n\\`\\`\\`\n```\n\n### For non-lowercase filenames:\n```\n❌ The following files/directories must be lowercase:\n- [list files]\n\nException: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.\n```\n\n### For config.h violations:\n```\n⚠️ Found prohibited config.h elements:\n- [list specific issues: `#define DESCRIPTION`, `#include \"config_common.h\"`, comment blocks, commented-out defines]\n\nPlease remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).\n```\n\n### For info.json or keyboard.json issues:\n```\n⚠️ info.json or keyboard.json needs attention:\n- [list missing mandatory fields]\n- Please run: \\`qmk format-json -i path/to/info.json\\` (or keyboard.json)\n- Validate with: \\`qmk lint -kb <keyboard_name>\\`\n```\n\n### For non-pristine default keymap:\n```\n⚠️ Default keymap requires collaborator review:\nThe default `keymap.c` contains code beyond the `keymaps[]` array. The following was detected:\n- [describe: extra functions/definitions in keymap.c, or additional .c/.h files in the default keymap folder]\n\nA QMK Collaborator must review this before merging.\n```\n\n### For non-default keymaps:\n```\n⚠️ Non-default keymap detected: `keyboards/[path]/keymaps/[name]/`\n\nThis keymap requires a QMK Collaborator to review its content. No automated review of its code was performed.\n```\n\n### For `<keyboard>.c` detected:\n```\n⚠️ `<keyboard>.c` file detected: `keyboards/[path]/[keyboard].c`\n\nThis file may contain advanced hardware configuration. A QMK Collaborator must review this before merging.\n```\n\n---\n\n## Constraints and Conduct\n\n- **Scope**: Only review changes within the `keyboards/` folder. Flag any changes outside `keyboards/` and defer to a QMK Collaborator without reviewing them.\n- Focus reviews on **objective checklist items** that can be automatically verified\n- Flag **definite violations** with ❌\n- Suggest improvements for **recommendations** with ⚠️\n- **Provide specific file/line references** when flagging issues\n- **Link to relevant QMK documentation** for each issue\n- **Prioritize blocking issues** (license, merge conflicts, branch policy)\n- **Be constructive**: Suggest fixes, not just problems\n- **Do not review non-default keymaps** — flag their presence and defer to a QMK Collaborator\n- **Do not review `<keyboard>.c` content in detail** — flag its presence and defer to a QMK Collaborator\n\nThis is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.\n"},"files":{".github/copilot-instructions.md":"---\napplyTo: \"keyboards/**\"\nexcludeAgent:\n  - \"coding-agent\"\n---\n# GitHub Copilot Instructions for QMK Pull Request Review\nThis document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.\n\n> **Scope**: This review applies **only to changes within the `keyboards/` folder**. Changes outside `keyboards/` (e.g., core code, quantum, platforms, drivers) must be flagged and deferred to a QMK Collaborator — do not review them.\n\n## General PR Requirements\n\n### Branch and Submission Standards\n- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch\n  - Flag if submitter is using their own `master` branch as source\n  - Suggest using feature branches instead for cleaner fork management\n- **Target Branch Policy**:\n  - **New keyboard additions** → `master` branch (new folders under `keyboards/`)\n  - **All other changes** → `develop` branch:\n    - Keyboard updates, refactors, or moves\n    - Core code changes\n    - Data-driven configuration migrations\n    - Any modifications to existing keyboards\n- **PR Scope**: PRs should contain the smallest set of modifications for a single change\n  - Flag PRs that modify multiple keyboards simultaneously\n  - Suggest splitting large PRs into focused, incremental changes\n- **Merge Conflicts**: Check for unresolved merge conflicts\n\n### File Naming and Structure\n- **Lowercase Requirement**: All new directories and filenames must be lowercase\n  - Exception: Upstream sources with original uppercase (LUFA, ChibiOS)\n  - Exception: Core files with valid justification\n  - **Reject**: Board designer preference for uppercase is NOT valid justification\n\n### License Headers\n- **Required**: Valid license headers on all `*.c` and `*.h` files\n- **Recommended**: GPL2/GPL3 for consistency\n- **Format**: Check for proper GPL2+ header or SPDX identifier\n  ```c\n  // Copyright 2024 Your Name (@yourgithub)\n  // SPDX-License-Identifier: GPL-2.0-or-later\n  ```\n- **Exception**: Simple assignment-only `rules.mk` files don't need headers\n- **Flag**: Missing or ambiguous license headers (blocks merge)\n\n---\n\n## Keymap PR Reviews\n\n**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.\n\n### Note on Non-Default Keymaps\n- Any keymap folder named something other than `default` (e.g., `default_clueboard`, `via`) is a non-default keymap\n- **Do not review the content** of non-default keymaps — flag their presence and note that a QMK Collaborator must review them\n\n### Keymap Code Standards\n- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files\n- **Enums**: Suggest using layer enums instead of `#define`s for layers (soft suggestion only)\n- **Custom Keycodes**: First entry must be `QK_USER`\n- **VIA**: Keymaps should NOT enable VIA\n  - VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)\n\n---\n\n## Keyboard PR Reviews\n\n**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:\n- `info.json` or `keyboard.json` (keyboard root or variant level)\n- `readme.md` (keyboard level)\n- `rules.mk` (keyboard level)\n- `config.h` (keyboard level, not keymap level)\n- `<keyboard>.c` and `<keyboard>.h` files\n- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)\n\n### Branch Targeting\n- **New Keyboards**: Target `master` branch\n  - New additions to `keyboards/` folder submit to `master`\n- **Keyboard Moves**: Must target `develop` branch\n  - Check `data/mappings/keyboard_aliases.hjson` is updated for moves\n- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts\n- **Data Driven Migration**: Must target `develop`\n\n### info.json and keyboard.json Requirements\n- **Schema Validation**: Verify that `info.json` and `keyboard.json` files are valid JSON (no syntax errors, no trailing commas, properly closed brackets)\n- **Mandatory Elements**:\n  - `url` field is present and begins with `http://` or `https://`\n  - `maintainer` field is present and non-empty\n  - `usb.vid` and `usb.pid` fields are present and match the `0x` hexadecimal format (e.g. `\"vid\": \"0x1234\"`, `\"pid\": \"0xFEED\"`)\n  - `usb.device_version` field is present\n  - Each key entry in every `layout` array must include a `\"matrix\"` property (e.g. `{\"label\": \"L01\", \"matrix\": [0, 0], \"x\": 0, \"y\": 0}`)\n  - Microcontroller and bootloader specified\n  - Diode direction (if not using direct pins)\n- **Layout Naming**:\n  - Single layout: Must be named `LAYOUT` or match `LAYOUT_*` pattern\n  - Multiple layouts: Must include `LAYOUT_all` plus at least one alternate name\n\n### readme.md Requirements\n- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)\n- **Flash Command**: Present with `:flash` at end\n- **Hardware Link**: Valid availability link (unless handwired)\n  - Private groupbuys acceptable\n  - Open-source should link to files\n- **Reset Instructions**: Bootloader reset instructions must be present (non-empty)\n- **Images**: A keyboard image is preferred but not mandatory\n  - If present, images must not be hosted in the repository\n  - If an imgur URL is used, it must link directly to the image (i.e. `https://i.imgur.com/<id>.<ext>`), not the preview page (i.e. not `https://imgur.com/<id>`)\n\n### rules.mk Standards\n- **Removed Items**:\n  - Size comments like `(-/+size)`\n\n### config.h Standards (Keyboard Level)\n- **Prohibited**:\n  - `#define DESCRIPTION`\n  - Comment blocks explaining features\n  - Commented-out unused defines\n  - `#include \"config_common.h\"`\n- **No Vial**: Vial-related files/changes not accepted\n\n### Keyboard Implementation Files\n\n#### `<keyboard>.c`\n- **Advanced Code Flag**: ⚠️ If a `<keyboard>.c` file is present in the PR, flag it as possible advanced code requiring QMK Collaborator review\n\n#### `<keyboard>.h`\n- **Include**: `#include \"quantum.h\"` at top\n- **Layout Macros**: If `LAYOUT` macros are present, suggest moving them to `info.json` or `keyboard.json`\n\n### Default Keymap Standards\n\n**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.\n\n- **Pristine Requirement**: Bare minimum clean slate\n  - ⚠️ If `keymap.c` contains anything beyond the `keymaps[]` array, or if the `default` keymap folder contains additional `.c` or `.h` files, flag this as possible advanced code requiring QMK Collaborator review\n- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros\n- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`\n- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present\n- **No VIA**: Default keymap should not enable VIA\n\n### Prohibited Files\n- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)\n- **No KLE JSON**: Not used within QMK\n- **Single Keyboard Per PR**: A PR must not modify more than one `keyboards/<folder>/` directory\n  - Flag PRs that touch multiple top-level keyboard folders (e.g., both `keyboards/mykeyboard1/` and `keyboards/mykeyboard2/`) — each keyboard must be a separate PR\n- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors\n  - Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)\n  - Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)\n\n---\n\n## Review Response Templates\n\n### For source master branch usage:\n```\n⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.\n\nSee: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)\n```\n\n### For incorrect target branch:\n```\n❌ This PR targets the wrong branch:\n- **New keyboard additions** should target `master`\n- **Keyboard updates/refactors/moves** should target `develop`\n\nPlease change the target branch accordingly.\n```\n\n### For missing license headers:\n```\n❌ Missing GPL-compatible license headers on the following files:\n- [list files]\n\nPlease add GPL2+ headers (GPL2/GPL3 recommended). Example:\n\\`\\`\\`c\n// Copyright 2024 Your Name (@yourgithub)\n// SPDX-License-Identifier: GPL-2.0-or-later\n\\`\\`\\`\n```\n\n### For non-lowercase filenames:\n```\n❌ The following files/directories must be lowercase:\n- [list files]\n\nException: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.\n```\n\n### For config.h violations:\n```\n⚠️ Found prohibited config.h elements:\n- [list specific issues: `#define DESCRIPTION`, `#include \"config_common.h\"`, comment blocks, commented-out defines]\n\nPlease remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).\n```\n\n### For info.json or keyboard.json issues:\n```\n⚠️ info.json or keyboard.json needs attention:\n- [list missing mandatory fields]\n- Please run: \\`qmk format-json -i path/to/info.json\\` (or keyboard.json)\n- Validate with: \\`qmk lint -kb <keyboard_name>\\`\n```\n\n### For non-pristine default keymap:\n```\n⚠️ Default keymap requires collaborator review:\nThe default `keymap.c` contains code beyond the `keymaps[]` array. The following was detected:\n- [describe: extra functions/definitions in keymap.c, or additional .c/.h files in the default keymap folder]\n\nA QMK Collaborator must review this before merging.\n```\n\n### For non-default keymaps:\n```\n⚠️ Non-default keymap detected: `keyboards/[path]/keymaps/[name]/`\n\nThis keymap requires a QMK Collaborator to review its content. No automated review of its code was performed.\n```\n\n### For `<keyboard>.c` detected:\n```\n⚠️ `<keyboard>.c` file detected: `keyboards/[path]/[keyboard].c`\n\nThis file may contain advanced hardware configuration. A QMK Collaborator must review this before merging.\n```\n\n---\n\n## Constraints and Conduct\n\n- **Scope**: Only review changes within the `keyboards/` folder. Flag any changes outside `keyboards/` and defer to a QMK Collaborator without reviewing them.\n- Focus reviews on **objective checklist items** that can be automatically verified\n- Flag **definite violations** with ❌\n- Suggest improvements for **recommendations** with ⚠️\n- **Provide specific file/line references** when flagging issues\n- **Link to relevant QMK documentation** for each issue\n- **Prioritize blocking issues** (license, merge conflicts, branch policy)\n- **Be constructive**: Suggest fixes, not just problems\n- **Do not review non-default keymaps** — flag their presence and defer to a QMK Collaborator\n- **Do not review `<keyboard>.c` content in detail** — flag its presence and defer to a QMK Collaborator\n\nThis is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.\n"},"items":[{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","title":"copilot-instructions.md","content":"---\napplyTo: \"keyboards/**\"\nexcludeAgent:\n  - \"coding-agent\"\n---\n# GitHub Copilot Instructions for QMK Pull Request Review\nThis document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.\n\n> **Scope**: This review applies **only to changes within the `keyboards/` folder**. Changes outside `keyboards/` (e.g., core code, quantum, platforms, drivers) must be flagged and deferred to a QMK Collaborator — do not review them.\n\n## General PR Requirements\n\n### Branch and Submission Standards\n- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch\n  - Flag if submitter is using their own `master` branch as source\n  - Suggest using feature branches instead for cleaner fork management\n- **Target Branch Policy**:\n  - **New keyboard additions** → `master` branch (new folders under `keyboards/`)\n  - **All other changes** → `develop` branch:\n    - Keyboard updates, refactors, or moves\n    - Core code changes\n    - Data-driven configuration migrations\n    - Any modifications to existing keyboards\n- **PR Scope**: PRs should contain the smallest set of modifications for a single change\n  - Flag PRs that modify multiple keyboards simultaneously\n  - Suggest splitting large PRs into focused, incremental changes\n- **Merge Conflicts**: Check for unresolved merge conflicts\n\n### File Naming and Structure\n- **Lowercase Requirement**: All new directories and filenames must be lowercase\n  - Exception: Upstream sources with original uppercase (LUFA, ChibiOS)\n  - Exception: Core files with valid justification\n  - **Reject**: Board designer preference for uppercase is NOT valid justification\n\n### License Headers\n- **Required**: Valid license headers on all `*.c` and `*.h` files\n- **Recommended**: GPL2/GPL3 for consistency\n- **Format**: Check for proper GPL2+ header or SPDX identifier\n  ```c\n  // Copyright 2024 Your Name (@yourgithub)\n  // SPDX-License-Identifier: GPL-2.0-or-later\n  ```\n- **Exception**: Simple assignment-only `rules.mk` files don't need headers\n- **Flag**: Missing or ambiguous license headers (blocks merge)\n\n---\n\n## Keymap PR Reviews\n\n**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.\n\n### Note on Non-Default Keymaps\n- Any keymap folder named something other than `default` (e.g., `default_clueboard`, `via`) is a non-default keymap\n- **Do not review the content** of non-default keymaps — flag their presence and note that a QMK Collaborator must review them\n\n### Keymap Code Standards\n- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files\n- **Enums**: Suggest using layer enums instead of `#define`s for layers (soft suggestion only)\n- **Custom Keycodes**: First entry must be `QK_USER`\n- **VIA**: Keymaps should NOT enable VIA\n  - VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)\n\n---\n\n## Keyboard PR Reviews\n\n**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:\n- `info.json` or `keyboard.json` (keyboard root or variant level)\n- `readme.md` (keyboard level)\n- `rules.mk` (keyboard level)\n- `config.h` (keyboard level, not keymap level)\n- `<keyboard>.c` and `<keyboard>.h` files\n- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)\n\n### Branch Targeting\n- **New Keyboards**: Target `master` branch\n  - New additions to `keyboards/` folder submit to `master`\n- **Keyboard Moves**: Must target `develop` branch\n  - Check `data/mappings/keyboard_aliases.hjson` is updated for moves\n- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts\n- **Data Driven Migration**: Must target `develop`\n\n### info.json and keyboard.json Requirements\n- **Schema Validation**: Verify that `info.json` and `keyboard.json` files are valid JSON (no syntax errors, no trailing commas, properly closed brackets)\n- **Mandatory Elements**:\n  - `url` field is present and begins with `http://` or `https://`\n  - `maintainer` field is present and non-empty\n  - `usb.vid` and `usb.pid` fields are present and match the `0x` hexadecimal format (e.g. `\"vid\": \"0x1234\"`, `\"pid\": \"0xFEED\"`)\n  - `usb.device_version` field is present\n  - Each key entry in every `layout` array must include a `\"matrix\"` property (e.g. `{\"label\": \"L01\", \"matrix\": [0, 0], \"x\": 0, \"y\": 0}`)\n  - Microcontroller and bootloader specified\n  - Diode direction (if not using direct pins)\n- **Layout Naming**:\n  - Single layout: Must be named `LAYOUT` or match `LAYOUT_*` pattern\n  - Multiple layouts: Must include `LAYOUT_all` plus at least one alternate name\n\n### readme.md Requirements\n- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)\n- **Flash Command**: Present with `:flash` at end\n- **Hardware Link**: Valid availability link (unless handwired)\n  - Private groupbuys acceptable\n  - Open-source should link to files\n- **Reset Instructions**: Bootloader reset instructions must be present (non-empty)\n- **Images**: A keyboard image is preferred but not mandatory\n  - If present, images must not be hosted in the repository\n  - If an imgur URL is used, it must link directly to the image (i.e. `https://i.imgur.com/<id>.<ext>`), not the preview page (i.e. not `https://imgur.com/<id>`)\n\n### rules.mk Standards\n- **Removed Items**:\n  - Size comments like `(-/+size)`\n\n### config.h Standards (Keyboard Level)\n- **Prohibited**:\n  - `#define DESCRIPTION`\n  - Comment blocks explaining features\n  - Commented-out unused defines\n  - `#include \"config_common.h\"`\n- **No Vial**: Vial-related files/changes not accepted\n\n### Keyboard Implementation Files\n\n#### `<keyboard>.c`\n- **Advanced Code Flag**: ⚠️ If a `<keyboard>.c` file is present in the PR, flag it as possible advanced code requiring QMK Collaborator review\n\n#### `<keyboard>.h`\n- **Include**: `#include \"quantum.h\"` at top\n- **Layout Macros**: If `LAYOUT` macros are present, suggest moving them to `info.json` or `keyboard.json`\n\n### Default Keymap Standards\n\n**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.\n\n- **Pristine Requirement**: Bare minimum clean slate\n  - ⚠️ If `keymap.c` contains anything beyond the `keymaps[]` array, or if the `default` keymap folder contains additional `.c` or `.h` files, flag this as possible advanced code requiring QMK Collaborator review\n- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros\n- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`\n- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present\n- **No VIA**: Default keymap should not enable VIA\n\n### Prohibited Files\n- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)\n- **No KLE JSON**: Not used within QMK\n- **Single Keyboard Per PR**: A PR must not modify more than one `keyboards/<folder>/` directory\n  - Flag PRs that touch multiple top-level keyboard folders (e.g., both `keyboards/mykeyboard1/` and `keyboards/mykeyboard2/`) — each keyboard must be a separate PR\n- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors\n  - Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)\n  - Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)\n\n---\n\n## Review Response Templates\n\n### For source master branch usage:\n```\n⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.\n\nSee: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)\n```\n\n### For incorrect target branch:\n```\n❌ This PR targets the wrong branch:\n- **New keyboard additions** should target `master`\n- **Keyboard updates/refactors/moves** should target `develop`\n\nPlease change the target branch accordingly.\n```\n\n### For missing license headers:\n```\n❌ Missing GPL-compatible license headers on the following files:\n- [list files]\n\nPlease add GPL2+ headers (GPL2/GPL3 recommended). Example:\n\\`\\`\\`c\n// Copyright 2024 Your Name (@yourgithub)\n// SPDX-License-Identifier: GPL-2.0-or-later\n\\`\\`\\`\n```\n\n### For non-lowercase filenames:\n```\n❌ The following files/directories must be lowercase:\n- [list files]\n\nException: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.\n```\n\n### For config.h violations:\n```\n⚠️ Found prohibited config.h elements:\n- [list specific issues: `#define DESCRIPTION`, `#include \"config_common.h\"`, comment blocks, commented-out defines]\n\nPlease remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).\n```\n\n### For info.json or keyboard.json issues:\n```\n⚠️ info.json or keyboard.json needs attention:\n- [list missing mandatory fields]\n- Please run: \\`qmk format-json -i path/to/info.json\\` (or keyboard.json)\n- Validate with: \\`qmk lint -kb <keyboard_name>\\`\n```\n\n### For non-pristine default keymap:\n```\n⚠️ Default keymap requires collaborator review:\nThe default `keymap.c` contains code beyond the `keymaps[]` array. The following was detected:\n- [describe: extra functions/definitions in keymap.c, or additional .c/.h files in the default keymap folder]\n\nA QMK Collaborator must review this before merging.\n```\n\n### For non-default keymaps:\n```\n⚠️ Non-default keymap detected: `keyboards/[path]/keymaps/[name]/`\n\nThis keymap requires a QMK Collaborator to review its content. No automated review of its code was performed.\n```\n\n### For `<keyboard>.c` detected:\n```\n⚠️ `<keyboard>.c` file detected: `keyboards/[path]/[keyboard].c`\n\nThis file may contain advanced hardware configuration. A QMK Collaborator must review this before merging.\n```\n\n---\n\n## Constraints and Conduct\n\n- **Scope**: Only review changes within the `keyboards/` folder. Flag any changes outside `keyboards/` and defer to a QMK Collaborator without reviewing them.\n- Focus reviews on **objective checklist items** that can be automatically verified\n- Flag **definite violations** with ❌\n- Suggest improvements for **recommendations** with ⚠️\n- **Provide specific file/line references** when flagging issues\n- **Link to relevant QMK documentation** for each issue\n- **Prioritize blocking issues** (license, merge conflicts, branch policy)\n- **Be constructive**: Suggest fixes, not just problems\n- **Do not review non-default keymaps** — flag their presence and defer to a QMK Collaborator\n- **Do not review `<keyboard>.c` content in detail** — flag its presence and defer to a QMK Collaborator\n\nThis is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.\n","category":".github","tokens":2766}]}