What changed, and why it matters
This commit simply removes an optional Python linting tool called Vulture from Bitcoin Core's continuous integration setup. Vulture was used to detect unused ('dead') Python code in the project's own scripts. Removing it does not change any code that runs the Bitcoin network or wallet, and it does not introduce a security vulnerability. It is a routine maintenance change.
No security action required. This is a routine CI tooling change. If desired, reviewers can confirm that an alternative dead-code detection mechanism (e.g., ruff rules or manual review) remains in place, but that is outside the scope of this commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit deletes test/lint/lint-python-dead-code.py, removes vulture==2.14 from ci/lint/01_install.sh, and removes the corresponding README entry. Vulture is a static analysis tool for finding unused Python code. The change stops running that optional lint check in CI. No consensus, networking, wallet, or runtime code is modified.
Changed components
ci/lint/01_install.shtest/lint/README.mdtest/lint/lint-python-dead-code.pyInspect captured patch +1 / −44
diff --git a/ci/lint/01_install.sh b/ci/lint/01_install.sh
index 4cf695b8..9372df5a 100755
--- a/ci/lint/01_install.sh
+++ b/ci/lint/01_install.sh
@@ -44,8 +44,7 @@ ${CI_RETRY_EXE} pip3 install \
lief==0.16.6 \
mypy==1.19.1 \
pyzmq==27.1.0 \
- ruff==0.15.5 \
- vulture==2.14
+ ruff==0.15.5
SHELLCHECK_VERSION=v0.11.0
curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | \
diff --git a/test/lint/README.md b/test/lint/README.md
index e98522a7..08703ab8 100644
--- a/test/lint/README.md
+++ b/test/lint/README.md
@@ -52,7 +52,6 @@ or `--help`:
| [`lint-python.py`](/test/lint/lint-python.py) | [lief](https://github.com/lief-project/LIEF)
| [`lint-python.py`](/test/lint/lint-python.py) | [mypy](https://github.com/python/mypy)
| [`lint-python.py`](/test/lint/lint-python.py) | [pyzmq](https://github.com/zeromq/pyzmq)
-| [`lint-python-dead-code.py`](/test/lint/lint-python-dead-code.py) | [vulture](https://github.com/jendrikseipp/vulture)
| [`lint-shell.py`](/test/lint/lint-shell.py) | [ShellCheck](https://github.com/koalaman/shellcheck)
| `py_lint` | [ruff](https://github.com/astral-sh/ruff)
| markdown link check | [mlc](https://github.com/becheran/mlc)
diff --git a/test/lint/lint-python-dead-code.py b/test/lint/lint-python-dead-code.py
deleted file mode 100755
index cd6471e2..00000000
--- a/test/lint/lint-python-dead-code.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2022-present The Bitcoin Core developers
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-"""
-Find dead Python code.
-"""
-
-from subprocess import check_output, STDOUT, CalledProcessError
-
-FILES_ARGS = ['git', 'ls-files', '--', '*.py']
-
-
-def check_vulture_install():
- try:
- check_output(["vulture", "--version"])
- except FileNotFoundError:
- print("Skipping Python dead code linting since vulture is not installed. Install by running \"pip3 install vulture\"")
- exit(0)
-
-
-def main():
- check_vulture_install()
-
- files = check_output(FILES_ARGS, text=True).splitlines()
- # --min-confidence 100 will only report code that is guaranteed to be unused within the analyzed files.
- # Any value below 100 introduces the risk of false positives, which would create an unacceptable maintenance burden.
- vulture_args = ['vulture', '--min-confidence=100'] + files
-
- try:
- check_output(vulture_args, stderr=STDOUT, text=True)
- except CalledProcessError as e:
- print(e.output, end="")
- print("Python dead code detection found some issues")
- exit(1)
-
-
-if __name__ == "__main__":
- main()
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.