{
  "repository": "python/cpython",
  "ref": "405f12722cb7631f15d5b6df5825a2262209d9d8",
  "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": [
        "pre-commit hook actionlint"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.actionlint"
        }
      ],
      "upstream": "https://github.com/rhysd/actionlint",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "mypy",
      "method": "static_analysis",
      "commands": [
        "mypy --num-workers 4 --config-file $EXPR/mypy.ini"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/mypy.yml",
          "locator": "jobs.mypy.steps[4]"
        },
        {
          "path": "Lib/_pyrepl/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Lib/test/libregrtest/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Lib/tomllib/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/build/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/cases_generator/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/check-c-api-docs/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/clinic/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/jit/mypy.ini",
          "locator": "config file"
        },
        {
          "path": "Tools/peg_generator/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": "ruff-check",
      "method": "static_analysis",
      "commands": [
        "pre-commit hook ruff-check"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.ruff-check"
        },
        {
          "path": ".ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Doc/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Lib/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Lib/test/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Platforms/Apple/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Platforms/WASI/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Tools/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Tools/build/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Tools/clinic/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Tools/i18n/.ruff.toml",
          "locator": "config file"
        },
        {
          "path": "Tools/peg_generator/.ruff.toml",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/astral-sh/ruff",
      "docs": "https://docs.astral.sh/ruff/linter/#exit-codes",
      "exit_codes": {
        "0": "no violations",
        "1": "violations found",
        "2": "invalid configuration, CLI options or internal error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "zizmor",
      "method": "static_analysis",
      "commands": [
        "pre-commit hook zizmor"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.zizmor"
        }
      ],
      "upstream": "https://github.com/zizmorcore/zizmor",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": "ci-matrix",
      "method": "testing",
      "commands": [
        "mypy (target: 9)"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/mypy.yml",
          "locator": "jobs.mypy.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": "playwright",
      "method": "testing",
      "commands": [],
      "triggers": [],
      "evidence": [
        {
          "path": "Platforms/emscripten/browser_test/playwright.config.ts",
          "locator": "config file"
        }
      ],
      "upstream": "https://github.com/microsoft/playwright",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": true
    },
    {
      "tool": "black",
      "method": "formatting",
      "commands": [
        "pre-commit hook black"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "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-case-conflict",
        "pre-commit hook check-merge-conflict",
        "pre-commit hook check-toml",
        "pre-commit hook check-yaml",
        "pre-commit hook end-of-file-fixer"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-case-conflict"
        },
        {
          "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.end-of-file-fixer"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.mixed-line-ending"
        },
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.trailing-whitespace"
        }
      ],
      "upstream": "https://github.com/pre-commit/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": "ruff-format",
      "method": "formatting",
      "commands": [
        "pre-commit hook ruff-format"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.ruff-format"
        }
      ],
      "upstream": "https://github.com/astral-sh/ruff",
      "docs": "https://docs.astral.sh/ruff/formatter/#exit-codes",
      "exit_codes": {
        "0": "already formatted",
        "1": "files would be reformatted (--check)",
        "2": "error"
      },
      "autofix": true,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "done < exclude_tests.txt"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-test-lazy-imports-all.yml",
          "locator": "jobs.test-lazy-imports-all.steps[9] (Verify excluded tests still need exclusion)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "epubcheck Doc/build/epub/Python.epub &> Doc/epubcheck.txt"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-docs.yml",
          "locator": "jobs.check-epub.steps[4] (Run epubcheck)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-dependabot"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-dependabot"
        }
      ],
      "upstream": "https://github.com/python-jsonschema/check-jsonschema",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-github-workflows"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-github-workflows"
        }
      ],
      "upstream": "https://github.com/python-jsonschema/check-jsonschema",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook check-readthedocs"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-readthedocs"
        }
      ],
      "upstream": "https://github.com/python-jsonschema/check-jsonschema",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook remove-tabs"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.remove-tabs"
        }
      ],
      "upstream": "https://github.com/Lucas-C/pre-commit-hooks",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "pre-commit hook sphinx-lint"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.sphinx-lint"
        }
      ],
      "upstream": "https://github.com/sphinx-contrib/sphinx-lint",
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Doc/tools/check-epub.py"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-docs.yml",
          "locator": "jobs.check-epub.steps[6] (Check for fatal errors in EPUB)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Doc/tools/check-html-ids.py -v check /tmp/html-ids-base.json.gz /tmp/html-ids-head.json.gz $([ -f Doc/tools/removed-ids.txt ]"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-check-html-ids.yml",
          "locator": "jobs.check-html-ids.steps[8] (Check for removed HTML IDs)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Doc/tools/check-html-ids.py collect /tmp/merge-base/Doc/build/html -o /tmp/html-ids-base.json.gz"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-check-html-ids.yml",
          "locator": "jobs.check-html-ids.steps[6] (Collect HTML IDs)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Doc/tools/check-html-ids.py collect Doc/build/html -o Doc/build/html-ids-head.json.gz"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-docs.yml",
          "locator": "jobs.build-doc.steps[7] (Collect HTML IDs)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Doc/tools/check-warnings.py --annotate-diff ${branch_base} ${branch_pr} --fail-if-regression --fail-if-improved --fail-if-new-news-nit"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-docs.yml",
          "locator": "jobs.build-doc.steps[5] (Check warnings)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/build/check_capi_macros.py"
      ],
      "triggers": [
        "pre_commit"
      ],
      "evidence": [
        {
          "path": ".pre-commit-config.yaml",
          "locator": "hooks.check-capi-macros"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/build/check_warnings.py --compiler-output-file-path=${CPYTHON_BUILDDIR}/compiler_output_ubuntu.txt --warning-ignore-file-path ${GITHUB_WORKSPACE}/Tools/build/.warningignore_ubuntu --compiler-output-type=gcc --fail-on-regression --fail-on-improvement --path-prefix=../cpython-ro-srcdir/"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-ubuntu.yml",
          "locator": "jobs.build-ubuntu-reusable.steps[15] (Check compiler warnings)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/build/check_warnings.py --compiler-output-file-path=compiler_output_macos.txt --warning-ignore-file-path=Tools/build/.warningignore_macos --compiler-output-type=clang --fail-on-regression --fail-on-improvement --path-prefix=./"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-macos.yml",
          "locator": "jobs.build-macos.steps[7] (Check compiler warnings)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/check-c-api-docs/main.py"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-check-c-api-docs.yml",
          "locator": "jobs.check-c-api-docs.steps[2] (Check for undocumented C APIs)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --$EXPR $EXPR --system Linux"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/build.yml",
          "locator": "jobs.build-ubuntu-ssltests.steps[5] (Install SSL Library)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/build.yml",
          "locator": "jobs.test-hypothesis.steps[5] (Install OpenSSL)"
        },
        {
          "path": ".github/workflows/reusable-ubuntu.yml",
          "locator": "jobs.build-ubuntu-reusable.steps[6] (Install OpenSSL)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python Tools/ssl/multissltests.py --steps=library --base-directory=${MULTISSL_DIR} --openssl=${OPENSSL_VER} --system=Linux ${{ inputs.sanitizer == TSan"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-san.yml",
          "locator": "jobs.build-san-reusable.steps[9] (Install OpenSSL)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "python tools/check-html-ids.py collect build/html -o build/html/html-ids.json.gz"
      ],
      "triggers": [
        "local"
      ],
      "evidence": [
        {
          "path": "Doc/Makefile",
          "locator": "target html-ids (line 297)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "show --format=%at --no-patch $OLDEST)"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-check-html-ids.yml",
          "locator": "jobs.check-html-ids.steps[1] (Find merge base)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    },
    {
      "tool": null,
      "method": "unclassified",
      "commands": [
        "test.pythoninfo"
      ],
      "triggers": [
        "ci"
      ],
      "evidence": [
        {
          "path": ".github/workflows/reusable-install.yml",
          "locator": "jobs.build-install-test.steps[8] (Display build info)"
        }
      ],
      "upstream": null,
      "docs": null,
      "exit_codes": {},
      "autofix": false,
      "declared_only": false
    }
  ]
}
