diff --git a/.agents/review-rules/README.md b/.agents/review-rules/README.md index 99b5b115cdb..ef0efc9d066 100644 --- a/.agents/review-rules/README.md +++ b/.agents/review-rules/README.md @@ -27,7 +27,7 @@ never a copy per directory. Security and QA & DX deliberately don't link agents shouldn't be able to produce. All five slots are used, so a new domain now merges into an existing agent. QA & -DX covers the build, test, and CI surface — the same paths `.github/OWNERS` +DX covers the build, test, and CI surface — the same paths `OWNERS` assigns to `@n8n-io/qa-dx`. Code-quality rules that happen to apply broadly (error classes, `any`, lazy imports) are backend rules, not QA & DX ones. DB migrations is split out of Backend because a migration is permanent and runs diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 213f992ce03..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,11 +0,0 @@ -# Temporary: kept side by side with the top-level OWNERS file while the -# "Required Reviews" enforcement is on trial. Do not add entries here; -# add them to OWNERS. See "Transition from CODEOWNERS" in WORKFLOWS.md. -packages/@n8n/db/src/migrations/ @n8n-io/migrations-review -/OWNERS @n8n-io/qa-dx -.github/workflows @n8n-io/qa-dx -.github/scripts @n8n-io/qa-dx -.github/actions @n8n-io/qa-dx -.github/poutine-rules @n8n-io/qa-dx -docker/get-n8n.sh @n8n-io/qa-dx -.code-health-baseline.json @n8n-io/qa-dx diff --git a/.github/WORKFLOWS.md b/.github/WORKFLOWS.md index d57a43f6b76..5396d475282 100644 --- a/.github/WORKFLOWS.md +++ b/.github/WORKFLOWS.md @@ -10,7 +10,6 @@ Complete reference for n8n's `.github/` folder. .github/ ├── WORKFLOWS.md # This document ├── CI-TELEMETRY.md # Telemetry & metrics guide -├── CODEOWNERS # Temporary, side by side with OWNERS during the trial ├── pull_request_template.md # PR description template ├── pull_request_title_conventions.md # Title format rules (Angular) ├── actionlint.yml # Workflow linter config @@ -850,9 +849,8 @@ See **[CI-TELEMETRY.md](CI-TELEMETRY.md)** for: ## OWNERS -Team ownership lives in the top-level `OWNERS` file (this replaces the -GitHub-native `CODEOWNERS` file; see the transition note below). The scripts -that consume it live in `.github/scripts/owners/`. Line format: +Team ownership lives in the top-level `OWNERS` file. The scripts that consume +it live in `.github/scripts/owners/`. Line format: ``` <@org/team> [required] @@ -922,8 +920,7 @@ Reviews** status succeed without required OWNERS team approvals. A team member must apply the `large-scale-change` label. The gate checks the actor from the label event and verifies their current team membership. The label alone is not sufficient. Label changes re-evaluate the status. Removing the label removes -the exemption. During the CODEOWNERS trial, GitHub still enforces its separate -code-owner review requirement. +the exemption. Every path that writes the status runs in the base repository context, because a fork-context run has no secrets and a read-only token. PR changes arrive @@ -937,16 +934,6 @@ contribution whose runs still wait for approval gets no review-event re-evaluation until a maintainer approves the runs; `workflow_dispatch` with the PR number is the manual fallback. -### Transition from CODEOWNERS - -During a trial period, `.github/CODEOWNERS` stays in place next to OWNERS: -GitHub's native code-owner enforcement keeps gating merges while the -"Required Reviews" status runs side by side. The two must agree — CODEOWNERS -holds exactly the `required` entries of OWNERS (plus the OWNERS file itself) -and must not gain new entries; new ownership goes into OWNERS. After the -trial, delete `.github/CODEOWNERS`, remove "Require review from Code Owners" -from the master ruleset, and delete this section (tracked in DEVP-887). - --- ## Runner Selection diff --git a/packages/@n8n/module-cli/frontend-module-guide.md b/packages/@n8n/module-cli/frontend-module-guide.md index c679590f4d0..ca000ce8f2f 100644 --- a/packages/@n8n/module-cli/frontend-module-guide.md +++ b/packages/@n8n/module-cli/frontend-module-guide.md @@ -10,7 +10,7 @@ Modules give these benefits: - **Independence:** You typecheck, lint and test one feature in seconds. You do not run all of editor-ui (~770K lines of `.ts` and `.vue`; `src/features/` holds ~600K of that). - **Decoupling:** A module cannot read the shell or another module. Features stay separate. -- **Ownership:** One package has one CODEOWNERS line. +- **Ownership:** One package has one `OWNERS` line. - **Parity:** The frontend module id is the same as the backend module id. Both read `/rest/module-settings`. @@ -477,7 +477,7 @@ const isEnabled = computed( ## Register the module with the shell A module does nothing until the shell can see it. The shell needs **four file edits and one -CODEOWNERS line**. The CLI makes the four edits. Read this section when you register a module by +`OWNERS` line**. The CLI makes the four edits. Read this section when you register a module by hand, or when you debug a CI failure. | # | Where | What | Scaffolded? | @@ -486,10 +486,10 @@ hand, or when you debug a CI failure. | 2 | `editor-ui/package.json` | `"@n8n/frontend-module-x": "workspace:*"` | ✅ | | 3 | `editor-ui/tsconfig.json` | two `paths` entries (bare + `/*`) | ✅ | | 4 | `editor-ui/src/app/modules.manifest.ts` | import + array entry | ✅ | -| 5 | `.github/CODEOWNERS` | one line for the new package | ❌ do this | +| 5 | `OWNERS` | one line for the new package | ❌ do this | -The frontend has no CODEOWNERS entries today, so you cannot copy a line for #5. Add your line when -you create the module. A package with no owner is the start of an incomplete migration. +Add the ownership line when you create the module. A package with no owner is the start of an +incomplete migration. **Put #1, #2 and #3 in the same PR.** They are not alternatives. Each one serves a different resolver: @@ -696,7 +696,7 @@ Keep `"license": "LicenseRef-n8n-sustainable-use"`. Do not add `private`. can become a static map of dynamic imports. Vite then emits one chunk for each module. The decision point is the end of wave 2, with bundle data. The team decided against a module load at run time. -5. **CODEOWNERS is a manual step.** An addition to the CLI is a small and clear follow-up. +5. **Updating `OWNERS` is a manual step.** An addition to the CLI is a small and clear follow-up. 6. **`@n8n/module-cli` has no `lint` script.** Type-aware lint on a package with no types gives only `no-unsafe-*` noise. Ten other `@n8n/*` packages ship in the same way, and Biome still formats this one. Review this decision if the CLI grows past a few hundred lines.