{
  "repository": "semgrep/semgrep",
  "ref": "692bfae4ca1bf070f7e8b603037a19886fa36b4f",
  "methods": [
    {
      "slug": "formal",
      "title": "Formal verification and model checking"
    },
    {
      "slug": "static_analysis",
      "title": "Static analysis"
    },
    {
      "slug": "testing",
      "title": "Testing"
    },
    {
      "slug": "formatting",
      "title": "Formatting and hygiene"
    },
    {
      "slug": "supply_chain",
      "title": "Supply chain"
    },
    {
      "slug": "unclassified",
      "title": "Unclassified"
    }
  ],
  "verifications": [
    {
      "tool": "actionlint",
      "method": "static_analysis",
      "commands": [
        "actionlint -shellcheck="
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.github-actions.steps[3]"
        }
      ],
      "upstream": "https://github.com/rhysd/actionlint",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "flake8",
      "method": "static_analysis",
      "commands": [
        "pre-commit hook flake8"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.flake8"
        }
      ],
      "upstream": "https://github.com/PyCQA/flake8",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "mypy",
      "method": "static_analysis",
      "commands": [
        "pre-commit hook mypy"
      ],
      "triggers": [
        "pre_commit",
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.mypy"
        },
        {
          "path": "Makefile",
          "locator": "target test-all (line 177)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target test (line 80)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target typecheck (line 28)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target default (line 7)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target test-dev (line 114)"
        },
        {
          "path": "cli/pyproject.toml",
          "locator": "[dependency-groups] dev: mypy"
        },
        {
          "path": "mypy.ini",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/python/mypy",
      "docs": "https://mypy.readthedocs.io/en/stable/command_line.html",
      "exit_codes": {
        "0": "no type errors",
        "1": "type errors found",
        "2": "crash or invalid invocation"
      },
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "semgrep",
      "method": "static_analysis",
      "commands": [
        "pre-commit hook semgrep",
        "semgrep ci",
        "semgrep ci --suppress-errors",
        "semgrep --version"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.semgrep"
        },
        {
          "path": ".github/workflows/test-e2e-semgrep-ci.yml",
          "locator": "jobs.semgrep-ci.steps[1]"
        },
        {
          "path": ".github/workflows/test-e2e-semgrep-ci.yml",
          "locator": "jobs.semgrep-ci-fail-open.steps[2]"
        },
        {
          "path": ".github/workflows/tests.yml",
          "locator": "jobs.benchmarks-lite.steps[6] (Test dummy benchmarks on latest)"
        }
      ],
      "upstream": "https://github.com/semgrep/semgrep",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "ci-matrix",
      "method": "testing",
      "commands": [
        "test-qa (split: 4)"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/tests.yml",
          "locator": "jobs.test-qa.strategy.matrix"
        }
      ],
      "upstream": "https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "pytest",
      "method": "testing",
      "commands": [
        "pytest libs/ocaml-tree-sitter-semgrep/scripts/test_*.py",
        "pytest -v libs/ocaml-tree-sitter-semgrep/scripts/test_scanner_memory_safety.py",
        "pytest -n auto -vv --tb=short --splits 4 --group $EXPR tests/qa",
        "pytest scripts/tests",
        "pytest -n auto --run-only-snapshots --snapshot-update --allow-snapshot-deletion -m not pysemfail tests/default/e2e tests/default/e2e-other"
      ],
      "triggers": [
        "ci",
        "local"
      ],
      "evidence": [
        {
          "path": ".github/workflows/ocaml-tree-sitter-ci.yml",
          "locator": "jobs.build.steps[14] (Test (Python))"
        },
        {
          "path": "Makefile",
          "locator": "target ots-test-python (line 196)"
        },
        {
          "path": ".github/workflows/scanner-memory-safety.yml",
          "locator": "jobs.scanner-memory-safety.steps[3] (Run scanners under AddressSanitizer)"
        },
        {
          "path": ".github/workflows/tests.yml",
          "locator": "jobs.test-qa.steps[8] (Test semgrep)"
        },
        {
          "path": "Makefile",
          "locator": "target test-all (line 177)"
        },
        {
          "path": "Makefile",
          "locator": "target test-scripts (line 515)"
        },
        {
          "path": "Makefile",
          "locator": "target ots-test (line 187)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target regenerate-tests (line 188)"
        },
        {
          "path": "cli/pyproject.toml",
          "locator": "[tool.pytest]"
        },
        {
          "path": "cli/pyproject.toml",
          "locator": "[dependency-groups] dev: pytest"
        }
      ],
      "upstream": "https://github.com/pytest-dev/pytest",
      "docs": "https://docs.pytest.org/en/stable/reference/exit-codes.html",
      "exit_codes": {
        "0": "all tests passed",
        "1": "some tests failed",
        "2": "interrupted by the user",
        "3": "internal error",
        "4": "command line usage error",
        "5": "no tests were collected"
      },
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "black",
      "method": "formatting",
      "commands": [
        "pre-commit hook black"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.black"
        }
      ],
      "upstream": "https://github.com/psf/black",
      "docs": null,
      "exit_codes": {
        "0": "nothing to change",
        "1": "files would be reformatted (--check)",
        "123": "internal error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "pre-commit-hooks",
      "method": "formatting",
      "commands": [
        "pre-commit hook check-added-large-files",
        "pre-commit hook check-ast",
        "pre-commit hook check-case-conflict",
        "pre-commit hook check-executables-have-shebangs",
        "pre-commit hook check-json"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-added-large-files"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-ast"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-case-conflict"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-executables-have-shebangs"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-json"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-merge-conflict"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-toml"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-yaml"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.debug-statements"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.detect-private-key"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.end-of-file-fixer"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "prettier",
      "method": "formatting",
      "commands": [
        "pre-commit hook prettier"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.prettier"
        }
      ],
      "upstream": "https://github.com/prettier/prettier",
      "docs": "https://prettier.io/docs/cli#exit-codes",
      "exit_codes": {
        "0": "everything formatted",
        "1": "something was not formatted (--check)",
        "2": "prettier error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "uv-lock",
      "method": "supply_chain",
      "commands": [
        "uv lock --check --project cli"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-uv-lock"
        }
      ],
      "upstream": "https://github.com/astral-sh/uv",
      "docs": null,
      "exit_codes": {},
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "dune runtest libs/ocaml-tree-sitter-semgrep/core"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "Makefile",
          "locator": "target test-all (line 177)"
        },
        {
          "path": "Makefile",
          "locator": "target ots-test (line 187)"
        },
        {
          "path": "Makefile",
          "locator": "target ots-test-ocaml (line 192)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "kinda_slow tests/default"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "cli/Makefile",
          "locator": "target test-dev (line 114)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pr -R semgrep/e2e view $EXPR --json statusCheckRollup --jq '.statusCheckRollup"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/test-e2e-semgrep-ci.yml",
          "locator": "jobs.wait-for-checks.steps[1] (Wait for checks to register)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook autoflake"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.autoflake"
        }
      ],
      "upstream": "https://github.com/myint/autoflake",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-docstring-first"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-docstring-first"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-shebang-scripts-are-executable"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-shebang-scripts-are-executable"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-symlinks"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-symlinks"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-vcs-permalinks"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-vcs-permalinks"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-xml"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-xml"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook destroyed-symlinks"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.destroyed-symlinks"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook fix-encoding-pragma"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.fix-encoding-pragma"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook jsonnet-format"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.jsonnet-format"
        }
      ],
      "upstream": "https://github.com/google/go-jsonnet",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook no-commit-to-branch"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.no-commit-to-branch"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook reorder-python-imports"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.reorder-python-imports"
        }
      ],
      "upstream": "https://github.com/asottile/reorder_python_imports",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook requirements-txt-fixer"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.requirements-txt-fixer"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook semgrep-docker-develop"
      ],
      "triggers": [
        "pre_commit",
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/lint.yml",
          "locator": "jobs.pre-commit.steps[8] (Run pre-commit)"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.semgrep-docker-develop"
        }
      ],
      "upstream": "https://github.com/semgrep/pre-commit",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python tests/e2e-pro-need-login"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "cli/Makefile",
          "locator": "target e2e-pro-need-login (line 153)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python tests/qa"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "cli/Makefile",
          "locator": "target default (line 7)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target qa (line 158)"
        },
        {
          "path": "cli/Makefile",
          "locator": "target osemgrep-qa (line 176)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "quick tests/default"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "cli/Makefile",
          "locator": "target test-dev (line 114)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "running the test\""
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/scanner-memory-safety.yml",
          "locator": "jobs.scanner-memory-safety.steps[1] (Check whether scanner files changed)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "show -s --format=%aN <%aE> ${COMMITS%%$'\\n'*})"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/sync-with-PRO.yml",
          "locator": "jobs.job.steps[3] (Creating the branch and commiting to it)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "skipping the test\""
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/scanner-memory-safety.yml",
          "locator": "jobs.scanner-memory-safety.steps[1] (Check whether scanner files changed)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "testing every grammar'"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/ocaml-tree-sitter-test-languages.yml",
          "locator": "jobs.detect-changes.steps[1] (Select languages for push or pull request)"
        },
        {
          "path": ".github/workflows/ocaml-tree-sitter-test-languages.yml",
          "locator": "jobs.detect-changes.steps[3] (Select languages for manual run)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "true"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "Makefile",
          "locator": "target check-opam-conflicts (line 230)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "while [ ${LEN_CHECKS} = 0 ]"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/test-e2e-semgrep-ci.yml",
          "locator": "jobs.wait-for-checks.steps[1] (Wait for checks to register)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "write_all_languages_and_exit Testing every grammar"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/ocaml-tree-sitter-test-languages.yml",
          "locator": "jobs.detect-changes.steps[1] (Select languages for push or pull request)"
        },
        {
          "path": ".github/workflows/ocaml-tree-sitter-test-languages.yml",
          "locator": "jobs.detect-changes.steps[3] (Select languages for manual run)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "xargs opam install --deps-only --dry-run 2>&1)"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "Makefile",
          "locator": "target check-opam-conflicts (line 230)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    }
  ]
}
