CodeVetter · Repo Unpack · Contributor handoff
pypa/hatch
Begin with the two package manifests and hatch.toml, then follow the relevant command through Application and Project before changing a backend or plugin contract. Preserve lazy evaluation, cross-platform filesystem behavior, lifecycle ordering, and backend-specific branches. Tests and CI were inspected, not executed; use their definitions to plan separately authorized validation without treating them as passing evidence. The investigation is bounded, and upstream contribution rules require disclosed AI assistance and informed human review.
- Read pyproject.toml, backend/pyproject.toml, and hatch.toml first: Hatch and Hatchling have separate build bootstraps, and the repository test environment includes backend/ as a workspace member.
- For execution changes, read Application.runner_context and Project.prepare_environment together: command handlers populate yielded contexts before preparation, and preparation preserves create/install/lock/sync ordering.
- Preserve lazy imports and platform abstractions: Ruff explicitly permits lazy imports for CLI responsiveness, while Path IDs casefold on Windows/macOS and Platform formats subprocess calls.
- Build edits must account for both Hatchling subprocess invocation and alternative-backend helper scripts; backend metadata-only hooks are conditionally defined when PIP_BUILD_TRACKER is absent because build hooks can change dependency metadata.
- Read tests/conftest.py before choosing validation: fixtures isolate storage, some backend calls run through mocks, and capability markers control skips. Tests and CI were inspected only, so no pass status is available from this brief.
- When execution is authorized, repository guidance provides hatch test, hatch test --cover, and hatch check; target test paths can be forwarded through hatch test's variadic arguments before expanding validation.
- Distinguish the type-checking paths: CI invokes the types environment's Mypy script, whereas hatch check types uses the hatch-check-types environment and defaults to Pyrefly; pip locking likewise differs from uv because pip cannot apply locks.
- Upstream contribution documentation requires disclosure of all AI usage, human understanding of contributed code, and human review/editing of AI-assisted issue or discussion content; its commit/submission instructions do not authorize actions in this read-only investigation.