Repository navigation
Description
π€ Generated by the Daily AI Engineer
Evidence
#2769 adds exactly one file β a 29-line .coderabbit.yaml at the repository root β and its π§Ή Lint - mega-linter check is red. Not one of the reported errors is in that file:
| Linter | Errors | Where |
|---|---|---|
| cspell | 8051 | across 914 files |
| checkov | 287 | repository-wide |
| lychee | 166 | across 888 files |
| markdownlint | 169 | across 90 files (55 auto-fixed) |
| jscpd | 24 | repository-wide |
| gitleaks | 2 | repository-wide |
| zizmor | 1 | of 8 workflows |
| revive | 1 | of 6 Go files |
| trivy | 1 | repository-wide |
| v8r (YAML) | 1 | k8s/bases/apps/backstage/cluster.yaml, k8s/bases/apps/umami/cluster.yaml |
The v8r errors are representative of the rest: it resolves those CNPG Cluster manifests against a schema that rejects apiVersion, kind, metadata and spec β a mis-detected schema, not a defect in the manifests.
Why this has stayed invisible
MegaLinter runs from the Go-project validation path, which is paths-filtered. Almost every PR on this repository changes only k8s/**, so the job is skipped and the red baseline is never surfaced. Comparing check sets makes it plain: #2745 (k8s-only) has no π§Ή Lint - mega-linter check at all, while #2769 (one root-level file) does β and it fails on the first run.
It is not main breakage: the job runs on pull_request, so main itself is green.
Who this affects
Anyone touching a non-k8s/** path β a root config file, a script, a workflow, a Go tool. Their PR lands red on a check that has nothing to do with their change, and the honest options are all bad: merge past a red check, spend a session on 8000 unrelated findings, or avoid touching those paths.
Expected behaviour
A PR that introduces no lint errors gets a green MegaLinter run. Reaching that means deciding, per linter, whether the baseline is a real defect backlog or a misconfiguration β the v8r schema resolution and the cspell dictionary look like configuration; checkov and gitleaks deserve to be read before being tuned.
The likely shape is a repository .mega-linter.yml that (a) fixes the demonstrable misconfigurations, (b) scopes the remaining linters to changed files rather than the whole tree, and (c) keeps every security-relevant linter blocking. Do not silence a linter to get green β a suppressed gitleaks or checkov finding is worse than a red check.
Acceptance criteria
- A PR changing only a root-level config file gets a green
π§Ή Lint - mega-linter. - Each currently-failing linter is dispositioned explicitly: fixed, correctly scoped, or recorded as a real backlog with its own follow-up.
- No security-relevant linter (gitleaks, checkov, trivy, zizmor) is disabled or moved to advisory.
- Verified by re-running the job on ci(coderabbit): keep docstring coverage advisory instead of merge-blockingΒ #2769, which changes one file and should have nothing to report.
Rough size: M.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Projects
- StatusShow more project fieldsβ Done
Activity
devantler commentedon Jul 21, 2026
Noting overlap so this is not done twice. I reached the same symptom independently and filed #2775 about twenty minutes before this one, from a single failing run rather than a full inventory β so it named only the three blocking linters and got the mechanism wrong, calling it
mainbreakage. This issue is the better description and I have closed mine in its favour, moved its two useful children (#2777, #2778) here as sub-issues, and closed a third that was built on my incorrect reading.Already covered by the open #2776, so it can be treated as done for the first acceptance criterion:
scripts/validate-eks-ci-role-policy/drops 19 β 13 locally at the job's own settings. The rest is Duplication scanner still reports clones in the EKS validator testsΒ #2777.Two things worth carrying into the wider fix here:
for _, tt := range tests { t.Run(...) }β is counted as duplication by jscpd but is idiomatic Go. It wants a shared case runner, not suppression and not a clever inline helper. Detail in Duplication scanner still reports clones in the EKS validator testsΒ #2777.coderabbitai commentedon Jul 21, 2026
π Related PRs
#2370 - fix(autoscaling): break the DaemonSet-VPA node ratchet; keep Longhorn storage off autoscale nodes [merged]
#2485 - ci(cluster-policies): flip .policyignore to an allowlist [merged]
#2507 - fix(apps): make actual-budget openid schema offline-resolvable [merged]
#2567 - ci: make CodeRabbit docstring pre-merge check non-blocking [merged]
#2622 - fix(ci): heal cancelled merge-group deploys [merged]
π Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.π§ͺ Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:π¬ Have feedback or questions? Drop into our discord!
devantler commentedon Jul 21, 2026
This is now the critical path for the repository, not a tidy-up. Two PRs are parked on it and neither can move until it is done:
.coderabbit.yamlfor this repo.Both are otherwise complete. The local-review-round rule merged today (monorepo#2351) bounds its merge-gate relaxation to a CodeRabbit quota signal and explicitly not to "a red CI check", so a red MegaLinter parks a PR regardless of how clean everything else is. Anything landing here that touches a non-
k8s/**path will hit the same wall.Progress against the first acceptance criterion, measured in CI at #2776's head:
The errcheck one is worth adding to this issue's inventory if it is not already there:
π§Ή Lint - golangci-lintis a second paths-filtered job with its own hidden baseline, on the same mechanism as MegaLinter. It was failing ongenerate-kubescape-exceptions/main.goand nobody had seen it, because the job only runs when a PR touches Go files.Remaining, in the order they block: the 17 duplication findings (#2777 for the Go ones, #2778 for the Python files), then the cspell/checkov/lychee/v8r dispositions this issue describes.
devantler commentedon Jul 21, 2026
Releasing the claim I took on this β I redirected to a higher-priority EKS chain and did not build it, so it should not sit reserved.
Two findings from the investigation, so the next run does not repeat it:
fix(lint): clear the lint defects main was carrying into every PR), andπ§Ή Lint - mega-linteris now its only non-green check. Advance that PR rather than opening a second one.β Validate Go Projectis an org-ruleset required workflow, not a file in this repo..github/workflows/validate-go-project.yaml404s onmainhere; it is injected by the org ruleset Require workflows to pass before merging for Go, sourced fromdevantler-tech/actions@refs/heads/main. That is why it does not appear in this repo's workflow list β expect to edit it there, while MegaLinter's own config (.mega-linter.yml) is still read from this repo's root, where none currently exists.fix(lint): scope MegaLinter to the paths it actually governs
fix(lint): match checkov's leading-slash paths and ignore four unchecβ¦
fix(lint): unanchor checkov's path skips and make the link check resiβ¦
fix(lint): keep the security scanners on k8s, and unblock the auto-fiβ¦
fix(lint): stop CI committing its own report tree and mangling docs tβ¦
fix(lint): keep the auto-fixer off SOPS ciphertext and the repo's sheβ¦
fix(lint): keep prettier out of the manifest tree and match the shellβ¦
fix(lint): scope yamllint off the manifest tree too, and stop link chβ¦