# Contributor handoff — pytest-dev/pytest

> Canonical page: https://codevetter.com/unpack/pytest/agent-handoff

# Contributor handoff — pytest-dev/pytest

Scanned commit 2887015cade4757385308e7a7d8083557fc637e2 (2026-09-29). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Tests and CI were inspected, not executed, and the investigation is bounded rather than exhaustive. Future changes should begin with the public API, configuration lifecycle, and the specific plugin module involved. Lifecycle cleanup, configuration precedence, worker conditions, and downstream plugin compatibility are concrete review boundaries. Execution commands below are repository-documented follow-up checks for an authorized implementation session, not results from this investigation.
- Read pyproject.toml, tox.ini, pytest/__init__.py, and pytest/__main__.py first to establish package requirements, test commands, public exports, and the actual CLI entrypoint. — [pyproject.toml#L1-L6](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/pyproject.toml#L1-L6) [pyproject.toml#L27-L57](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/pyproject.toml#L27-L57) [tox.ini#L48-L71](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/tox.ini#L48-L71) [src/pytest/__init__.py#L6-L31](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/pytest/__init__.py#L6-L31) [src/pytest/__main__.py#L5-L9](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/pytest/__main__.py#L5-L9)
- For startup changes, read Config.parse and findpaths together: parsing stages combine options and load plugins, while loader ordering determines which configuration wins and which files are reported as ignored. — [src/_pytest/config/__init__.py#L1631-L1685](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/config/__init__.py#L1631-L1685) [src/_pytest/config/__init__.py#L1709-L1739](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/config/__init__.py#L1709-L1739) [src/_pytest/config/findpaths.py#L304-L325](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/config/findpaths.py#L304-L325)
- For execution changes, preserve teardown after setup failure, request/funcargs cleanup in finally, sessionfinish gating, and final unconfiguration; these are separate cleanup obligations. — [src/_pytest/runner.py#L131-L150](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/runner.py#L131-L150) [src/_pytest/main.py#L362-L375](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/main.py#L362-L375)
- For fixture changes, inspect dependency loading before cache checks and finish() invalidation; targeted tests include testing/python/fixtures.py cases for scoped reuse and cached setup exceptions. — [src/_pytest/fixtures.py#L1206-L1269](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/fixtures.py#L1206-L1269) [testing/python/fixtures.py#L5464-L5535](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/testing/python/fixtures.py#L5464-L5535)
- For cache or reporting changes, retain path containment and worker suppression, and inspect matching test assertions rather than assuming they passed; relevant targets include test_cacheprovider.py, test_runner.py, and test_terminal.py. — [src/_pytest/cacheprovider.py#L165-L176](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/cacheprovider.py#L165-L176) [src/_pytest/cacheprovider.py#L430-L439](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/cacheprovider.py#L430-L439) [testing/test_cacheprovider.py#L36-L69](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/testing/test_cacheprovider.py#L36-L69) [testing/test_runner.py#L251-L284](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/testing/test_runner.py#L251-L284) [testing/test_terminal.py#L88-L100](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/testing/test_terminal.py#L88-L100)
- CONTRIBUTING.rst documents tox -e py312 -- testing/test_config.py and direct pytest testing/test_config.py after development setup; tox -e linting runs configured pre-commit checks, including Ruff and mypy. — [CONTRIBUTING.rst#L377-L403](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/CONTRIBUTING.rst#L377-L403) [tox.ini#L113-L119](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/tox.ini#L113-L119) [.pre-commit-config.yaml#L3-L8](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/.pre-commit-config.yaml#L3-L8) [.pre-commit-config.yaml#L36-L51](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/.pre-commit-config.yaml#L36-L51)
- Do not equate default suite inspection with integration coverage: plugin examples are excluded from discovery, tox runs integrations separately with BDD disabled, and selected CI matrix jobs allow failure. — [pyproject.toml#L437-L447](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/pyproject.toml#L437-L447) [tox.ini#L177-L201](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/tox.ini#L177-L201) [.github/workflows/test.yml#L270-L308](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/.github/workflows/test.yml#L270-L308)
- Compatibility traps include deprecated console_main, native rejection of unhandled async tests and fixtures, and deprecated nodeid fixture registration; documented behavior changes normally require an issue-numbered typed changelog fragment. — [src/_pytest/config/__init__.py#L295-L307](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/config/__init__.py#L295-L307) [src/_pytest/python.py#L181-L189](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/python.py#L181-L189) [src/_pytest/fixtures.py#L1386-L1395](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/fixtures.py#L1386-L1395) [src/_pytest/fixtures.py#L2092-L2094](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/src/_pytest/fixtures.py#L2092-L2094) [CONTRIBUTING.rst#L405-L410](https://github.com/pytest-dev/pytest/blob/2887015cade4757385308e7a7d8083557fc637e2/CONTRIBUTING.rst#L405-L410)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
