---
profile: min

exclude_paths:
  - collections/
  - .ansible/

skip_list:
  # Task names follow the project's documented "Category | Action" convention
  # (see CLAUDE.md), which intentionally starts with a lowercase category (e.g.
  # "kubectl | Download binary"). Renaming ~50 tasks repo-wide would break that
  # convention for no functional benefit.
  - name[casing]

  # Long template expressions in JSON Patch paths are more readable without
  # extra spaces. The ansible-lint var-spacing rule is overly strict for this
  # domain-specific syntax.
  - var-spacing

  # Vars are named after their role's domain concept (e.g. k8s_version,
  # longhorn_disks) and are shared/read across roles, defaults, group_vars and
  # templates. Enforcing a role-name prefix here would require a repo-wide,
  # high-risk rename touching every layer that references these variables.
  - var-naming[no-role-prefix]

  # Several tasks intentionally run shell/command modules whose "changed"
  # state is either always true (idempotent by design, e.g. helm upgrade
  # --install) or checked via a separate registered/failed_when guard rather
  # than changed_when.
  - no-changed-when

  # A few changed-triggered tasks (e.g. Traefik rollout restart, GitLab fleet
  # repo commit/push) are deliberately inline rather than handlers, since they
  # need to run mid-playbook with immediate ordering guarantees.
  - no-handler

  # Some Helm values/service description lines exceed 160 chars and are not
  # worth artificially wrapping.
  - yaml[line-length]
