configuration/quality/data/dependency.data.json
configuration/quality/data/dependency.data.json is a file in GovLab Quality. 1011 lines of code and 0 definitions.
{
"records": [
{
"tool": "eslint",
"ecosystem": "javascript",
"npm": "eslint",
"isPlugin": false,
"configTarget": "eslint.config.js",
"emitter": "eslint",
"disposition": "full-gate"
},
{
"tool": "govlab-eslint",
"ecosystem": "javascript",
"npm": "@govlab/quality/eslint-plugin",
"pluginNamespace": "govlab",
"ruleIdPrefix": "govlab",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "govlab-context",
"ecosystem": "javascript",
"npm": "@govlab/quality/context-lint",
"pluginNamespace": "govlab-context",
"ruleIdPrefix": "govlab-context",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "unused-imports",
"ecosystem": "javascript",
"npm": "eslint-plugin-unused-imports",
"pluginNamespace": "unused-imports",
"ruleIdPrefix": "unused-imports",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "jsonc",
"ecosystem": "json",
"npm": "eslint-plugin-jsonc",
"pluginNamespace": "jsonc",
"ruleIdPrefix": "jsonc",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-boundaries",
"ecosystem": "javascript",
"npm": "eslint-plugin-boundaries",
"pluginNamespace": "boundaries",
"ruleIdPrefix": "boundaries",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-eslint-plugin",
"ecosystem": "javascript",
"npm": "eslint-plugin-eslint-plugin",
"pluginNamespace": "eslint-plugin",
"ruleIdPrefix": "eslint-plugin",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-i18next",
"ecosystem": "javascript",
"npm": "eslint-plugin-i18next",
"pluginNamespace": "i18next",
"ruleIdPrefix": "i18next",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-import",
"ecosystem": "javascript",
"npm": "eslint-plugin-import",
"pluginNamespace": "import",
"ruleIdPrefix": "import",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-jest",
"ecosystem": "javascript",
"npm": "eslint-plugin-jest",
"pluginNamespace": "jest",
"ruleIdPrefix": "jest",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-jsdoc",
"ecosystem": "javascript",
"npm": "eslint-plugin-jsdoc",
"pluginNamespace": "jsdoc",
"ruleIdPrefix": "jsdoc",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-jsx-a11y",
"ecosystem": "javascript",
"npm": "eslint-plugin-jsx-a11y",
"pluginNamespace": "jsx-a11y",
"ruleIdPrefix": "jsx-a11y",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-lodash",
"ecosystem": "javascript",
"npm": "eslint-plugin-lodash",
"pluginNamespace": "lodash",
"ruleIdPrefix": "lodash",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-n",
"ecosystem": "javascript",
"npm": "eslint-plugin-n",
"pluginNamespace": "n",
"ruleIdPrefix": "n",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-no-unsanitized",
"ecosystem": "javascript",
"npm": "eslint-plugin-no-unsanitized",
"pluginNamespace": "no-unsanitized",
"ruleIdPrefix": "no-unsanitized",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-perfectionist",
"ecosystem": "javascript",
"npm": "eslint-plugin-perfectionist",
"pluginNamespace": "perfectionist",
"ruleIdPrefix": "perfectionist",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-promise",
"ecosystem": "javascript",
"npm": "eslint-plugin-promise",
"pluginNamespace": "promise",
"ruleIdPrefix": "promise",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-react",
"ecosystem": "javascript",
"npm": "eslint-plugin-react",
"pluginNamespace": "react",
"ruleIdPrefix": "react",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-react-hooks",
"ecosystem": "javascript",
"npm": "eslint-plugin-react-hooks",
"pluginNamespace": "react-hooks",
"ruleIdPrefix": "react-hooks",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-regexp",
"ecosystem": "javascript",
"npm": "eslint-plugin-regexp",
"pluginNamespace": "regexp",
"ruleIdPrefix": "regexp",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-sonarjs",
"ecosystem": "javascript",
"npm": "eslint-plugin-sonarjs",
"pluginNamespace": "sonarjs",
"ruleIdPrefix": "sonarjs",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-stylistic",
"ecosystem": "javascript",
"npm": "@stylistic/eslint-plugin",
"pluginNamespace": "@stylistic",
"ruleIdPrefix": "@stylistic",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-tailwindcss",
"ecosystem": "javascript",
"npm": "eslint-plugin-tailwindcss",
"pluginNamespace": "tailwindcss",
"ruleIdPrefix": "tailwindcss",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-testing-library",
"ecosystem": "javascript",
"npm": "eslint-plugin-testing-library",
"pluginNamespace": "testing-library",
"ruleIdPrefix": "testing-library",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-unicorn",
"ecosystem": "javascript",
"npm": "eslint-plugin-unicorn",
"pluginNamespace": "unicorn",
"ruleIdPrefix": "unicorn",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-vue",
"ecosystem": "javascript",
"npm": "eslint-plugin-vue",
"pluginNamespace": "vue",
"ruleIdPrefix": "vue",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-angular",
"ecosystem": "typescript",
"npm": "@angular-eslint/eslint-plugin",
"pluginNamespace": "@angular-eslint",
"ruleIdPrefix": "@angular-eslint",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-functional",
"ecosystem": "typescript",
"npm": "eslint-plugin-functional",
"pluginNamespace": "functional",
"ruleIdPrefix": "functional",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-ts",
"ecosystem": "typescript",
"npm": "@typescript-eslint/eslint-plugin",
"pluginNamespace": "@typescript-eslint",
"ruleIdPrefix": "@typescript-eslint",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-yml",
"ecosystem": "yaml",
"npm": "eslint-plugin-yml",
"pluginNamespace": "yml",
"ruleIdPrefix": "yml",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "stylelint",
"ecosystem": "css",
"npm": "stylelint",
"isPlugin": false,
"configTarget": ".stylelintrc.js",
"emitter": "stylelint",
"disposition": "full-gate"
},
{
"tool": "govlab-stylelint",
"ecosystem": "css",
"npm": "@govlab/quality/stylelint-plugin",
"pluginNamespace": "govlab",
"ruleIdPrefix": "govlab",
"isPlugin": true,
"configTarget": ".stylelintrc.js",
"emitter": "stylelint"
},
{
"tool": "prettier",
"ecosystem": "javascript",
"npm": "prettier",
"isPlugin": false,
"configTarget": "prettier.config.mjs",
"emitter": "prettier",
"disposition": "full-gate"
},
{
"tool": "golangci-lint",
"ecosystem": "go",
"system": "golangci-lint",
"isPlugin": false,
"configTarget": ".golangci.yml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "revive",
"ecosystem": "go",
"system": "revive",
"isPlugin": false,
"configTarget": "revive.toml",
"emitter": "native",
"disposition": "selectable",
"reason": "A consumer-selectable Go linter. In a public polyglot framework a tool that overlaps golangci-lint's surfaces is a CHOICE, not a redundancy: a consumer elects revive via govlab.config quality.owners (e.g. complexity.go = revive), at which point revive emits revive.toml and gates the surface while golangci-lint drops it. Unelected, revive runs advisory-only on its own config."
},
{
"tool": "checkstyle",
"ecosystem": "java",
"system": "checkstyle",
"isPlugin": false,
"configTarget": "checkstyle.xml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "pmd",
"ecosystem": "java",
"system": "pmd",
"isPlugin": false,
"configTarget": "pmd-ruleset.xml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "pylint",
"ecosystem": "python",
"system": "pylint",
"isPlugin": false,
"configTarget": ".pylintrc",
"emitter": "native",
"disposition": "selectable",
"reason": "A consumer-selectable Python linter. Overlapping ruff's surfaces is a CHOICE, not a redundancy: a consumer elects pylint via govlab.config quality.owners (e.g. complexity.python = pylint) and it gates the elected surfaces while ruff drops them; pylint also covers surfaces ruff does not (type-annotation, visibility). Unelected, pylint runs advisory-only on its own config."
},
{
"tool": "ruff",
"ecosystem": "python",
"system": "ruff",
"isPlugin": false,
"configTarget": "ruff.toml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "clippy",
"ecosystem": "rust",
"system": "clippy",
"isPlugin": false,
"configTarget": "clippy.toml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "rubocop",
"ecosystem": "ruby",
"system": "rubocop",
"isPlugin": false,
"configTarget": ".rubocop.yml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "perlcritic",
"ecosystem": "perl",
"system": "perlcritic",
"isPlugin": false,
"configTarget": ".perlcriticrc",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "phpmd",
"ecosystem": "php",
"system": "phpmd",
"isPlugin": false,
"configTarget": "phpmd.xml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "swiftlint",
"ecosystem": "swift",
"system": "swiftlint",
"isPlugin": false,
"configTarget": ".swiftlint.yml",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "yamllint",
"ecosystem": "yaml",
"system": "yamllint",
"isPlugin": false,
"configTarget": ".yamllint",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "clang-tidy",
"ecosystem": "cpp",
"system": "clang-tidy",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "credo",
"ecosystem": "elixir",
"system": "credo",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "go-critic",
"ecosystem": "go",
"system": "go-critic",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory",
"reason": "A consumer-choice Go linter (advisory, report-only). Overlapping golangci-lint's surface is a CHOICE in a public polyglot, never a redundancy: go-critic runs on its own defaults and reports without gating, since golangci-lint owns Go's gating surface by default. It carries mapping rows and can be upgraded to selectable by authoring its emit descriptor."
},
{
"tool": "sonar",
"ecosystem": "java",
"system": "sonar-scanner",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "server-based analysis platform (SonarQube), not a standalone configurable linter — no SSOT rule config"
},
{
"tool": "detekt",
"ecosystem": "kotlin",
"system": "detekt",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "luacheck",
"ecosystem": "lua",
"system": "luacheck",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "actionlint",
"ecosystem": "actions",
"system": "actionlint",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory"
},
{
"tool": "tflint",
"ecosystem": "iac",
"system": "tflint",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory"
},
{
"tool": "stylua",
"ecosystem": "lua",
"system": "stylua",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"catalogRules": false,
"disposition": "full-gate"
},
{
"tool": "phpcs",
"ecosystem": "php",
"system": "phpcs",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "lintr",
"ecosystem": "r",
"system": "lintr",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "scalastyle",
"ecosystem": "scala",
"system": "scalastyle",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "rubocop-capybara",
"ecosystem": "ruby",
"system": "rubocop-capybara",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-factory_bot",
"ecosystem": "ruby",
"system": "rubocop-factory_bot",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-graphql",
"ecosystem": "ruby",
"system": "rubocop-graphql",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-minitest",
"ecosystem": "ruby",
"system": "rubocop-minitest",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-performance",
"ecosystem": "ruby",
"system": "rubocop-performance",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-rails",
"ecosystem": "ruby",
"system": "rubocop-rails",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-rspec",
"ecosystem": "ruby",
"system": "rubocop-rspec",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-sequel",
"ecosystem": "ruby",
"system": "rubocop-sequel",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rubocop-thread_safety",
"ecosystem": "ruby",
"system": "rubocop-thread_safety",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "eslint-compat",
"ecosystem": "javascript",
"npm": "eslint-plugin-compat",
"pluginNamespace": "compat",
"ruleIdPrefix": "compat",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "eslint-security",
"ecosystem": "javascript",
"npm": "eslint-plugin-security",
"pluginNamespace": "security",
"ruleIdPrefix": "security",
"isPlugin": true,
"configTarget": "eslint.config.js",
"emitter": "eslint"
},
{
"tool": "htmlhint",
"ecosystem": "html",
"npm": "htmlhint",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "sqlfluff",
"ecosystem": "sql",
"system": "sqlfluff",
"isPlugin": false,
"configTarget": ".sqlfluff",
"emitter": "native",
"disposition": "full-gate"
},
{
"tool": "bandit",
"ecosystem": "python",
"system": "bandit",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "brakeman",
"ecosystem": "ruby",
"system": "brakeman",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "checkov",
"ecosystem": "iac",
"system": "checkov",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "clj-kondo",
"ecosystem": "clojure",
"system": "clj-kondo",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "codeql",
"ecosystem": "actions",
"system": "codeql",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "GitHub CodeQL is a hosted/CI security-analysis service driven by query packs, not a locally-configurable linter with an in-memory config surface — out of the SSOT, like other server/service tools."
},
{
"tool": "error-prone",
"ecosystem": "java",
"system": "error-prone",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "javac compiler plugin (build-integrated), not a standalone configurable linter — no SSOT rule config"
},
{
"tool": "gosec",
"ecosystem": "go",
"system": "gosec",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "hadolint",
"ecosystem": "dockerfile",
"system": "hadolint",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "kics",
"ecosystem": "ansible",
"system": "kics",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "mypy",
"ecosystem": "python",
"system": "mypy",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "static type checker with per-project inference config, not a threshold ruleset — out of the SSOT like tsc"
},
{
"tool": "psalm",
"ecosystem": "php",
"system": "psalm",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "PHP static type checker with per-project inference config, not a threshold ruleset — out of the SSOT like tsc"
},
{
"tool": "rubocop-rake",
"ecosystem": "ruby",
"system": "rubocop-rake",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "A RuboCop extension gem (rule-pack) loaded into rubocop via `require:` — its cops run inside rubocop, which owns Ruby's lint surface (surface.data.json); not a standalone linter with its own SSOT config or gate."
},
{
"tool": "rustc",
"ecosystem": "rust",
"system": "rustc",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "the Rust compiler, not a configurable linter — no SSOT-serializable rule config (clippy is the rust linter)"
},
{
"tool": "semgrep",
"ecosystem": "csharp",
"system": "semgrep",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "shellcheck",
"ecosystem": "shell",
"system": "shellcheck",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "slither",
"ecosystem": "solidity",
"system": "slither",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "spotbugs",
"ecosystem": "java",
"system": "spotbugs",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "excluded",
"reason": "bytecode static analysis, build-integrated, not an SSOT-configurable threshold ruleset"
},
{
"tool": "staticcheck",
"ecosystem": "go",
"system": "staticcheck",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory",
"reason": "A consumer-choice Go linter (advisory, report-only). Overlapping golangci-lint's surface is a CHOICE, never a redundancy: staticcheck runs on its own defaults and reports without gating, since golangci-lint owns Go's gating surface by default. It carries mapping rows and can be upgraded to selectable by authoring its emit descriptor."
},
{
"tool": "trivy",
"ecosystem": "iac",
"system": "trivy",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"disposition": "advisory"
},
{
"tool": "govlab-native",
"ecosystem": "typescript",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"installable": false,
"disposition": "excluded",
"reason": "govlab's own native TypeScript quality checks, built from the monorepo — internal framework tooling, not a standalone installable linter with an SSOT config surface."
},
{
"tool": "knip",
"ecosystem": "javascript",
"npm": "knip",
"isPlugin": false,
"configTarget": "knip.config.js",
"emitter": "none",
"catalogRules": false,
"disposition": "full-gate"
},
{
"tool": "jscpd",
"ecosystem": "javascript",
"npm": "jscpd",
"isPlugin": false,
"configTarget": ".jscpd.json",
"emitter": "none",
"catalogRules": false,
"disposition": "full-gate"
},
{
"tool": "oxlint",
"ecosystem": "typescript",
"npm": "oxlint",
"isPlugin": false,
"configTarget": ".oxlintrc.json",
"emitter": "none",
"disposition": "full-gate"
},
{
"tool": "typescript",
"ecosystem": "typescript",
"npm": "typescript",
"isPlugin": false,
"configTarget": "tsconfig.json",
"emitter": "none",
"catalogRules": false,
"disposition": "excluded",
"reason": "The TypeScript compiler/type-checker (tsc), not a linter — it reads its per-project tsconfig.json from disk only (no in-memory config API), so tsconfig is compiler config out of the SSOT per config_single_truth, and it carries no quality rules (catalogRules:false)."
},
{
"tool": "depcheck",
"ecosystem": "javascript",
"npm": "depcheck",
"isPlugin": false,
"configTarget": ".depcheckrc",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory",
"reason": "A consumer-choice unused-dependency finder (advisory, report-only). Overlapping knip's surface is a CHOICE, never a redundancy: depcheck runs on its own resolution and reports without gating, since knip owns the SSOT's unused-code + unused-dependency gating surface. Carries no SSOT-mapped rules (catalogRules:false)."
},
{
"tool": "ts-prune",
"ecosystem": "typescript",
"npm": "ts-prune",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory",
"reason": "A consumer-choice dead-export finder (advisory, report-only). Overlapping knip's surface is a CHOICE, never a redundancy: ts-prune runs on its own tsconfig resolution and reports without gating, since knip owns the SSOT's unused-export gating surface. Carries no SSOT-mapped rules (catalogRules:false)."
},
{
"tool": "lockfile-lint",
"ecosystem": "javascript",
"npm": "lockfile-lint",
"isPlugin": false,
"configTarget": ".lockfile-lintrc.json",
"emitter": "none",
"catalogRules": false,
"disposition": "excluded",
"reason": "A lockfile-integrity validator (checks registry hosts / https), run standalone in the verify-codebase prepare stage — not a code linter with quality rules (catalogRules:false) or an SSOT-tunable config surface."
},
{
"tool": "madge",
"ecosystem": "javascript",
"npm": "madge",
"isPlugin": false,
"configTarget": "",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory",
"reason": "A consumer-choice circular-dependency detector (advisory, report-only). Offering it alongside knip is a CHOICE, never a redundancy: madge reports import cycles without gating, since knip owns the SSOT's JS/TS structural gating surface. Carries no SSOT-mapped rules (catalogRules:false)."
},
{
"tool": "dependency-cruiser",
"ecosystem": "javascript",
"npm": "dependency-cruiser",
"isPlugin": false,
"configTarget": ".dependency-cruiser.js",
"emitter": "none",
"catalogRules": false,
"disposition": "advisory",
"reason": "A consumer-choice dependency-architecture validator (advisory, report-only). Its rules are executable JS config (config-as-code), so it runs against the consumer's own rule set and reports without gating; knip owns the SSOT's JS/TS structural gating surface. Carries no SSOT-mapped rules (catalogRules:false)."
}
],
"coverage": {
"noEngineSetting": [
"annotation-style",
"async-await",
"boolean-expression",
"braces-style",
"comparison-style",
"declaration-grouping",
"destructuring",
"error-handling",
"identifier-length",
"integer-overflow",
"open-closed",
"operator-style",
"return-count",
"side-effects",
"sort-order",
"statements-per-line",
"string-literal",
"switch-default",
"ternary-conditional",
"visibility-modifier",
"wildcard-import"
],
"noNativeDescriptor": [
"clang-tidy",
"credo",
"go-critic",
"sonar",
"detekt",
"luacheck",
"phpcs",
"lintr",
"scalastyle",
"rubocop-capybara",
"rubocop-factory_bot",
"rubocop-graphql",
"rubocop-minitest",
"rubocop-performance",
"rubocop-rails",
"rubocop-rspec",
"rubocop-sequel",
"rubocop-thread_safety"
]
}
}