{"owner":"siderolabs","repo":"talos","hasSkills":true,"totalSkillsCount":3,"totalTokensCount":1464,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["tools/cloud-image-uploader/README.md","tools/kubeimportlinter/README.md","tools/loglinter/README.md"],"skills":{"tools/cloud-image-uploader/README.md":"# cloud-image-uploader\n\n## Image tags\n\nPublished images are tagged with their build type, which is what cleanup tooling keys off\nof to decide how long an image should stick around:\n\n- AWS: the tag `BuildType`, on both the AMI and the EBS snapshot backing it.\n- GCP: the label `build-type` on the image. GCP label keys must be lowercase, hence the\n  different spelling.\n\nThe values are the same on both:\n\n| Value | Meaning |\n| --- | --- |\n| `e2e` | throwaway image built for an e2e run |\n| `nightly` | branch build, versioned by `git describe` (e.g. `v1.14.0-alpha.1-101-g11a7fbe4c`) |\n| `release` | tagged release, including `alpha`/`beta`/`rc` pre-releases |\n\nThe value is derived from `--tag` and `--name-prefix`.\n\n## vmimport role\n\nRole should be pre-created before running this command.\n\n    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json\n    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json\n\n## Google Cloud Pre-requisites\n\n- `GOOGLE_PROJECT_ID` - Google Cloud Project ID\n- `GOOGLE_CREDENTIALS_JSON` - Google Cloud Service Account JSON\n","tools/kubeimportlinter/README.md":"# kubeimportlinter\n\n`kubeimportlinter` checks that versioned Kubernetes imports are aliased to a descriptive name.\n\nImports whose final path segment is a bare API version (e.g. `v1`, `v1beta1`, `v2`) from a Kubernetes host (`k8s.io`, `sigs.k8s.io`, ...) must be renamed:\n\n```go\nimport \"k8s.io/api/core/v1\"            // invalid: package name is bare v1\nimport v1 \"k8s.io/api/core/v1\"         // invalid: alias equals the version\nimport corev1 \"k8s.io/api/core/v1\"     // valid\n```\n\nIt runs as a `golangci-lint` module plugin custom linter named `kubeimportlinter`.\n\n## Usage\n\nThe repo-root `.custom-gcl.yml` lists this module for the custom binary build:\n\n```bash\nmake golangci-lint-custom\n_out/custom-gcl run --config .golangci.yml\n```\n\nEnable it in `.golangci.yml`:\n\n```yaml\nlinters:\n  enable:\n    - kubeimportlinter\n  settings:\n    custom:\n      kubeimportlinter:\n        type: module\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"vendor/**\"\n          rules:\n            versioned_imports:\n              # override the default host list if needed\n              hosts:\n                - k8s.io\n                - sigs.k8s.io\n              allow:\n                - \"path/to/exempt.go\"\n```\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies the rule to\nevery analyzed Go file under the repository root.\n\n- the repository root is the directory containing the `golangci-lint` config file.\n- `versioned_imports.hosts` lists the import path prefixes the rule applies to\n  (defaults to `k8s.io`, `sigs.k8s.io`).\n- `allow` exempts files from the rule; `exclude` is a broader file skip;\n  `include` narrows the rule; `enabled: false` disables it.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\n```go\n// kubeimportlint:ignore versioned_imports intentional bare alias\nv1 \"k8s.io/api/core/v1\"\n```\n","tools/loglinter/README.md":"# log-linter\n\n`log-linter` checks Go code for logging policy violations.\n\nIt runs as a `golangci-lint` module plugin custom linter named `loglinter`.\n\nCurrent checks:\n\n- disallowed `log/slog` imports unless allowlisted\n- disallowed stdlib `log.*` calls unless allowlisted\n- printf-style formatting directives in `*zap.Logger` message strings\n- `fmt.Sprintf(...)` used as a zap message\n- ad hoc zap root logger constructors not wrapped with `.With(logging.Component(...))` in the same expression\n\n## Usage\n\n### Build a custom golangci-lint binary\n\nA repo-root `.custom-gcl.yml` is included for the custom binary build.\n\nFrom the repo root:\n\n```bash\nmake golangci-lint-custom\n```\n\nThat builds the binary through the Docker-based flow and outputs it to `_out/custom-gcl`.\n\nRun it directly:\n\n```bash\n_out/custom-gcl run --config .golangci.yml\n```\n\n### Enable the plugin in `.golangci.yml`\n\nAdd a custom linter entry like this:\n\n```yaml\nversion: \"2\"\n\nlinters:\n  enable:\n    - loglinter\n  settings:\n    custom:\n      loglinter:\n        type: module\n        description: checks logging conventions\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"_out/**\"\n            - \"vendor/**\"\n          rules:\n            slog_imports:\n              allow:\n                - \"internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/vmware_supported.go\"\n```\n\nThe repository root is the directory containing the `golangci-lint` config file.\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies every rule to every analyzed Go file under the repository root.\n\nUse config mainly to carve out exceptions.\n\n- `allow` is the recommended way to exempt files from a specific rule.\n- `exclude` is a broader file skip for a rule or for the whole run.\n- `include` is still supported when you intentionally want to narrow a rule, but the default is repo-wide enforcement.\n- `enabled: false` explicitly disables a rule.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\nA single issue can be ignored with a same-line or immediately preceding comment:\n\n```go\n// loglint:ignore stdlib_log_calls compatibility adapter\nlog.Printf(\"allowed here\")\n```\n\nMultiple rules can be listed as a comma-separated token:\n\n```go\n// loglint:ignore stdlib_log_calls,zap_root_component reason\n```\n\nUse `all` to suppress every rule for the next line or same line.\n\n## Notes\n\n- Once `loglinter` is enabled in `.golangci.yml`, use the custom binary (`./custom-gcl`) or `make golangci-lint-custom`; a stock `golangci-lint` binary will not have the plugin compiled in.\n- The root-component check is intentionally conservative: it only accepts `.With(logging.Component(...))` when that wrapper appears in the same expression as the configured constructor call.\n- Constructor names and component helper calls are configurable.\n"},"files":{"tools/cloud-image-uploader/README.md":"# cloud-image-uploader\n\n## Image tags\n\nPublished images are tagged with their build type, which is what cleanup tooling keys off\nof to decide how long an image should stick around:\n\n- AWS: the tag `BuildType`, on both the AMI and the EBS snapshot backing it.\n- GCP: the label `build-type` on the image. GCP label keys must be lowercase, hence the\n  different spelling.\n\nThe values are the same on both:\n\n| Value | Meaning |\n| --- | --- |\n| `e2e` | throwaway image built for an e2e run |\n| `nightly` | branch build, versioned by `git describe` (e.g. `v1.14.0-alpha.1-101-g11a7fbe4c`) |\n| `release` | tagged release, including `alpha`/`beta`/`rc` pre-releases |\n\nThe value is derived from `--tag` and `--name-prefix`.\n\n## vmimport role\n\nRole should be pre-created before running this command.\n\n    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json\n    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json\n\n## Google Cloud Pre-requisites\n\n- `GOOGLE_PROJECT_ID` - Google Cloud Project ID\n- `GOOGLE_CREDENTIALS_JSON` - Google Cloud Service Account JSON\n","tools/kubeimportlinter/README.md":"# kubeimportlinter\n\n`kubeimportlinter` checks that versioned Kubernetes imports are aliased to a descriptive name.\n\nImports whose final path segment is a bare API version (e.g. `v1`, `v1beta1`, `v2`) from a Kubernetes host (`k8s.io`, `sigs.k8s.io`, ...) must be renamed:\n\n```go\nimport \"k8s.io/api/core/v1\"            // invalid: package name is bare v1\nimport v1 \"k8s.io/api/core/v1\"         // invalid: alias equals the version\nimport corev1 \"k8s.io/api/core/v1\"     // valid\n```\n\nIt runs as a `golangci-lint` module plugin custom linter named `kubeimportlinter`.\n\n## Usage\n\nThe repo-root `.custom-gcl.yml` lists this module for the custom binary build:\n\n```bash\nmake golangci-lint-custom\n_out/custom-gcl run --config .golangci.yml\n```\n\nEnable it in `.golangci.yml`:\n\n```yaml\nlinters:\n  enable:\n    - kubeimportlinter\n  settings:\n    custom:\n      kubeimportlinter:\n        type: module\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"vendor/**\"\n          rules:\n            versioned_imports:\n              # override the default host list if needed\n              hosts:\n                - k8s.io\n                - sigs.k8s.io\n              allow:\n                - \"path/to/exempt.go\"\n```\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies the rule to\nevery analyzed Go file under the repository root.\n\n- the repository root is the directory containing the `golangci-lint` config file.\n- `versioned_imports.hosts` lists the import path prefixes the rule applies to\n  (defaults to `k8s.io`, `sigs.k8s.io`).\n- `allow` exempts files from the rule; `exclude` is a broader file skip;\n  `include` narrows the rule; `enabled: false` disables it.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\n```go\n// kubeimportlint:ignore versioned_imports intentional bare alias\nv1 \"k8s.io/api/core/v1\"\n```\n","tools/loglinter/README.md":"# log-linter\n\n`log-linter` checks Go code for logging policy violations.\n\nIt runs as a `golangci-lint` module plugin custom linter named `loglinter`.\n\nCurrent checks:\n\n- disallowed `log/slog` imports unless allowlisted\n- disallowed stdlib `log.*` calls unless allowlisted\n- printf-style formatting directives in `*zap.Logger` message strings\n- `fmt.Sprintf(...)` used as a zap message\n- ad hoc zap root logger constructors not wrapped with `.With(logging.Component(...))` in the same expression\n\n## Usage\n\n### Build a custom golangci-lint binary\n\nA repo-root `.custom-gcl.yml` is included for the custom binary build.\n\nFrom the repo root:\n\n```bash\nmake golangci-lint-custom\n```\n\nThat builds the binary through the Docker-based flow and outputs it to `_out/custom-gcl`.\n\nRun it directly:\n\n```bash\n_out/custom-gcl run --config .golangci.yml\n```\n\n### Enable the plugin in `.golangci.yml`\n\nAdd a custom linter entry like this:\n\n```yaml\nversion: \"2\"\n\nlinters:\n  enable:\n    - loglinter\n  settings:\n    custom:\n      loglinter:\n        type: module\n        description: checks logging conventions\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"_out/**\"\n            - \"vendor/**\"\n          rules:\n            slog_imports:\n              allow:\n                - \"internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/vmware_supported.go\"\n```\n\nThe repository root is the directory containing the `golangci-lint` config file.\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies every rule to every analyzed Go file under the repository root.\n\nUse config mainly to carve out exceptions.\n\n- `allow` is the recommended way to exempt files from a specific rule.\n- `exclude` is a broader file skip for a rule or for the whole run.\n- `include` is still supported when you intentionally want to narrow a rule, but the default is repo-wide enforcement.\n- `enabled: false` explicitly disables a rule.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\nA single issue can be ignored with a same-line or immediately preceding comment:\n\n```go\n// loglint:ignore stdlib_log_calls compatibility adapter\nlog.Printf(\"allowed here\")\n```\n\nMultiple rules can be listed as a comma-separated token:\n\n```go\n// loglint:ignore stdlib_log_calls,zap_root_component reason\n```\n\nUse `all` to suppress every rule for the next line or same line.\n\n## Notes\n\n- Once `loglinter` is enabled in `.golangci.yml`, use the custom binary (`./custom-gcl`) or `make golangci-lint-custom`; a stock `golangci-lint` binary will not have the plugin compiled in.\n- The root-component check is intentionally conservative: it only accepts `.With(logging.Component(...))` when that wrapper appears in the same expression as the configured constructor call.\n- Constructor names and component helper calls are configurable.\n"},"items":[{"name":"README.md","path":"tools/cloud-image-uploader/README.md","rawUrl":"https://raw.githubusercontent.com/siderolabs/talos/HEAD/tools/cloud-image-uploader/README.md","title":"cloud-image-uploader Documentation","category":"plugin-manifest","format":"markdown","content":"# cloud-image-uploader\n\n## Image tags\n\nPublished images are tagged with their build type, which is what cleanup tooling keys off\nof to decide how long an image should stick around:\n\n- AWS: the tag `BuildType`, on both the AMI and the EBS snapshot backing it.\n- GCP: the label `build-type` on the image. GCP label keys must be lowercase, hence the\n  different spelling.\n\nThe values are the same on both:\n\n| Value | Meaning |\n| --- | --- |\n| `e2e` | throwaway image built for an e2e run |\n| `nightly` | branch build, versioned by `git describe` (e.g. `v1.14.0-alpha.1-101-g11a7fbe4c`) |\n| `release` | tagged release, including `alpha`/`beta`/`rc` pre-releases |\n\nThe value is derived from `--tag` and `--name-prefix`.\n\n## vmimport role\n\nRole should be pre-created before running this command.\n\n    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json\n    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json\n\n## Google Cloud Pre-requisites\n\n- `GOOGLE_PROJECT_ID` - Google Cloud Project ID\n- `GOOGLE_CREDENTIALS_JSON` - Google Cloud Service Account JSON\n","isInternal":false,"tokens":303,"sizeBytes":1151},{"name":"README.md","path":"tools/kubeimportlinter/README.md","rawUrl":"https://raw.githubusercontent.com/siderolabs/talos/HEAD/tools/kubeimportlinter/README.md","title":"kubeimportlinter Documentation","category":"plugin-manifest","format":"markdown","content":"# kubeimportlinter\n\n`kubeimportlinter` checks that versioned Kubernetes imports are aliased to a descriptive name.\n\nImports whose final path segment is a bare API version (e.g. `v1`, `v1beta1`, `v2`) from a Kubernetes host (`k8s.io`, `sigs.k8s.io`, ...) must be renamed:\n\n```go\nimport \"k8s.io/api/core/v1\"            // invalid: package name is bare v1\nimport v1 \"k8s.io/api/core/v1\"         // invalid: alias equals the version\nimport corev1 \"k8s.io/api/core/v1\"     // valid\n```\n\nIt runs as a `golangci-lint` module plugin custom linter named `kubeimportlinter`.\n\n## Usage\n\nThe repo-root `.custom-gcl.yml` lists this module for the custom binary build:\n\n```bash\nmake golangci-lint-custom\n_out/custom-gcl run --config .golangci.yml\n```\n\nEnable it in `.golangci.yml`:\n\n```yaml\nlinters:\n  enable:\n    - kubeimportlinter\n  settings:\n    custom:\n      kubeimportlinter:\n        type: module\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"vendor/**\"\n          rules:\n            versioned_imports:\n              # override the default host list if needed\n              hosts:\n                - k8s.io\n                - sigs.k8s.io\n              allow:\n                - \"path/to/exempt.go\"\n```\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies the rule to\nevery analyzed Go file under the repository root.\n\n- the repository root is the directory containing the `golangci-lint` config file.\n- `versioned_imports.hosts` lists the import path prefixes the rule applies to\n  (defaults to `k8s.io`, `sigs.k8s.io`).\n- `allow` exempts files from the rule; `exclude` is a broader file skip;\n  `include` narrows the rule; `enabled: false` disables it.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\n```go\n// kubeimportlint:ignore versioned_imports intentional bare alias\nv1 \"k8s.io/api/core/v1\"\n```\n","isInternal":false,"tokens":501,"sizeBytes":1886},{"name":"README.md","path":"tools/loglinter/README.md","rawUrl":"https://raw.githubusercontent.com/siderolabs/talos/HEAD/tools/loglinter/README.md","title":"loglinter Documentation","category":"plugin-manifest","format":"markdown","content":"# log-linter\n\n`log-linter` checks Go code for logging policy violations.\n\nIt runs as a `golangci-lint` module plugin custom linter named `loglinter`.\n\nCurrent checks:\n\n- disallowed `log/slog` imports unless allowlisted\n- disallowed stdlib `log.*` calls unless allowlisted\n- printf-style formatting directives in `*zap.Logger` message strings\n- `fmt.Sprintf(...)` used as a zap message\n- ad hoc zap root logger constructors not wrapped with `.With(logging.Component(...))` in the same expression\n\n## Usage\n\n### Build a custom golangci-lint binary\n\nA repo-root `.custom-gcl.yml` is included for the custom binary build.\n\nFrom the repo root:\n\n```bash\nmake golangci-lint-custom\n```\n\nThat builds the binary through the Docker-based flow and outputs it to `_out/custom-gcl`.\n\nRun it directly:\n\n```bash\n_out/custom-gcl run --config .golangci.yml\n```\n\n### Enable the plugin in `.golangci.yml`\n\nAdd a custom linter entry like this:\n\n```yaml\nversion: \"2\"\n\nlinters:\n  enable:\n    - loglinter\n  settings:\n    custom:\n      loglinter:\n        type: module\n        description: checks logging conventions\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"_out/**\"\n            - \"vendor/**\"\n          rules:\n            slog_imports:\n              allow:\n                - \"internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/vmware_supported.go\"\n```\n\nThe repository root is the directory containing the `golangci-lint` config file.\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies every rule to every analyzed Go file under the repository root.\n\nUse config mainly to carve out exceptions.\n\n- `allow` is the recommended way to exempt files from a specific rule.\n- `exclude` is a broader file skip for a rule or for the whole run.\n- `include` is still supported when you intentionally want to narrow a rule, but the default is repo-wide enforcement.\n- `enabled: false` explicitly disables a rule.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\nA single issue can be ignored with a same-line or immediately preceding comment:\n\n```go\n// loglint:ignore stdlib_log_calls compatibility adapter\nlog.Printf(\"allowed here\")\n```\n\nMultiple rules can be listed as a comma-separated token:\n\n```go\n// loglint:ignore stdlib_log_calls,zap_root_component reason\n```\n\nUse `all` to suppress every rule for the next line or same line.\n\n## Notes\n\n- Once `loglinter` is enabled in `.golangci.yml`, use the custom binary (`./custom-gcl`) or `make golangci-lint-custom`; a stock `golangci-lint` binary will not have the plugin compiled in.\n- The root-component check is intentionally conservative: it only accepts `.With(logging.Component(...))` when that wrapper appears in the same expression as the configured constructor call.\n- Constructor names and component helper calls are configurable.\n","isInternal":false,"tokens":660,"sizeBytes":2862}],"systemPromptSnippet":"<yakaai_skills repo=\"siderolabs/talos\">\n<!-- File: tools/cloud-image-uploader/README.md (Tokens: ~303 | Category: plugin-manifest) -->\n# cloud-image-uploader\n\n## Image tags\n\nPublished images are tagged with their build type, which is what cleanup tooling keys off\nof to decide how long an image should stick around:\n\n- AWS: the tag `BuildType`, on both the AMI and the EBS snapshot backing it.\n- GCP: the label `build-type` on the image. GCP label keys must be lowercase, hence the\n  different spelling.\n\nThe values are the same on both:\n\n| Value | Meaning |\n| --- | --- |\n| `e2e` | throwaway image built for an e2e run |\n| `nightly` | branch build, versioned by `git describe` (e.g. `v1.14.0-alpha.1-101-g11a7fbe4c`) |\n| `release` | tagged release, including `alpha`/`beta`/`rc` pre-releases |\n\nThe value is derived from `--tag` and `--name-prefix`.\n\n## vmimport role\n\nRole should be pre-created before running this command.\n\n    aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json\n    aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json\n\n## Google Cloud Pre-requisites\n\n- `GOOGLE_PROJECT_ID` - Google Cloud Project ID\n- `GOOGLE_CREDENTIALS_JSON` - Google Cloud Service Account JSON\n\n<!-- File: tools/kubeimportlinter/README.md (Tokens: ~501 | Category: plugin-manifest) -->\n# kubeimportlinter\n\n`kubeimportlinter` checks that versioned Kubernetes imports are aliased to a descriptive name.\n\nImports whose final path segment is a bare API version (e.g. `v1`, `v1beta1`, `v2`) from a Kubernetes host (`k8s.io`, `sigs.k8s.io`, ...) must be renamed:\n\n```go\nimport \"k8s.io/api/core/v1\"            // invalid: package name is bare v1\nimport v1 \"k8s.io/api/core/v1\"         // invalid: alias equals the version\nimport corev1 \"k8s.io/api/core/v1\"     // valid\n```\n\nIt runs as a `golangci-lint` module plugin custom linter named `kubeimportlinter`.\n\n## Usage\n\nThe repo-root `.custom-gcl.yml` lists this module for the custom binary build:\n\n```bash\nmake golangci-lint-custom\n_out/custom-gcl run --config .golangci.yml\n```\n\nEnable it in `.golangci.yml`:\n\n```yaml\nlinters:\n  enable:\n    - kubeimportlinter\n  settings:\n    custom:\n      kubeimportlinter:\n        type: module\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"vendor/**\"\n          rules:\n            versioned_imports:\n              # override the default host list if needed\n              hosts:\n                - k8s.io\n                - sigs.k8s.io\n              allow:\n                - \"path/to/exempt.go\"\n```\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies the rule to\nevery analyzed Go file under the repository root.\n\n- the repository root is the directory containing the `golangci-lint` config file.\n- `versioned_imports.hosts` lists the import path prefixes the rule applies to\n  (defaults to `k8s.io`, `sigs.k8s.io`).\n- `allow` exempts files from the rule; `exclude` is a broader file skip;\n  `include` narrows the rule; `enabled: false` disables it.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\n```go\n// kubeimportlint:ignore versioned_imports intentional bare alias\nv1 \"k8s.io/api/core/v1\"\n```\n\n<!-- File: tools/loglinter/README.md (Tokens: ~660 | Category: plugin-manifest) -->\n# log-linter\n\n`log-linter` checks Go code for logging policy violations.\n\nIt runs as a `golangci-lint` module plugin custom linter named `loglinter`.\n\nCurrent checks:\n\n- disallowed `log/slog` imports unless allowlisted\n- disallowed stdlib `log.*` calls unless allowlisted\n- printf-style formatting directives in `*zap.Logger` message strings\n- `fmt.Sprintf(...)` used as a zap message\n- ad hoc zap root logger constructors not wrapped with `.With(logging.Component(...))` in the same expression\n\n## Usage\n\n### Build a custom golangci-lint binary\n\nA repo-root `.custom-gcl.yml` is included for the custom binary build.\n\nFrom the repo root:\n\n```bash\nmake golangci-lint-custom\n```\n\nThat builds the binary through the Docker-based flow and outputs it to `_out/custom-gcl`.\n\nRun it directly:\n\n```bash\n_out/custom-gcl run --config .golangci.yml\n```\n\n### Enable the plugin in `.golangci.yml`\n\nAdd a custom linter entry like this:\n\n```yaml\nversion: \"2\"\n\nlinters:\n  enable:\n    - loglinter\n  settings:\n    custom:\n      loglinter:\n        type: module\n        description: checks logging conventions\n        settings:\n          exclude:\n            - \"**/*_test.go\"\n            - \"_out/**\"\n            - \"vendor/**\"\n          rules:\n            slog_imports:\n              allow:\n                - \"internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/vmware_supported.go\"\n```\n\nThe repository root is the directory containing the `golangci-lint` config file.\n\n## Config\n\nAll rules are enabled by default. An empty settings block applies every rule to every analyzed Go file under the repository root.\n\nUse config mainly to carve out exceptions.\n\n- `allow` is the recommended way to exempt files from a specific rule.\n- `exclude` is a broader file skip for a rule or for the whole run.\n- `include` is still supported when you intentionally want to narrow a rule, but the default is repo-wide enforcement.\n- `enabled: false` explicitly disables a rule.\n- globs are repo-relative, slash-separated, and support `**`.\n\n## Inline exceptions\n\nA single issue can be ignored with a same-line or immediately preceding comment:\n\n```go\n// loglint:ignore stdlib_log_calls compatibility adapter\nlog.Printf(\"allowed here\")\n```\n\nMultiple rules can be listed as a comma-separated token:\n\n```go\n// loglint:ignore stdlib_log_calls,zap_root_component reason\n```\n\nUse `all` to suppress every rule for the next line or same line.\n\n## Notes\n\n- Once `loglinter` is enabled in `.golangci.yml`, use the custom binary (`./custom-gcl`) or `make golangci-lint-custom`; a stock `golangci-lint` binary will not have the plugin compiled in.\n- The root-component check is intentionally conservative: it only accepts `.With(logging.Component(...))` when that wrapper appears in the same expression as the configured constructor call.\n- Constructor names and component helper calls are configurable.\n</yakaai_skills>"}