# Contributor handoff — encode/httpx

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

# Contributor handoff — encode/httpx

Scanned commit b5addb64f0161ff6bfe94c124ef76f6a1fba5254 (2026-02-23). 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 this brief is a bounded source investigation rather than an exhaustive audit. Start at the public entrypoint and follow the specific policy, model, and transport boundary involved in the task. Preserve synchronous/asynchronous parity, stream ownership, request-merging rules, and explicit disabling semantics. Verification commands below describe the repository workflow for a separately authorized execution task; publication is a distinct external action.
- Read pyproject.toml, __init__.py and _api.py before altering entrypoints: optional extras determine CLI/protocol availability, public exports are explicit, and top-level request helpers own temporary client lifetime. — [pyproject.toml#L38-L59](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/pyproject.toml#L38-L59) [httpx/__init__.py#L14-L26](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/__init__.py#L14-L26) [httpx/__init__.py#L29-L100](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/__init__.py#L29-L100) [httpx/_api.py#L102-L120](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_api.py#L102-L120)
- Client dispatch fixes need parity review in both send/auth/redirect pipelines; shared URL/header/cookie redirect transformations live on BaseClient, while sync and async hooks and stream operations differ. — [httpx/_client.py#L475-L582](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L475-L582) [httpx/_client.py#L930-L999](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L930-L999) [httpx/_client.py#L1645-L1715](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L1645-L1715)
- Preserve build_request() versus send() behavior: construction merges client defaults, but manually constructed requests bypass that merge. send() still sets missing timeout metadata and resolves authentication policy. — [httpx/_client.py#L355-L389](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L355-L389) [httpx/_client.py#L888-L913](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L888-L913) [httpx/_client.py#L584-L591](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L584-L591)
- USE_CLIENT_DEFAULT distinguishes omission from explicit None for auth and timeout; relative request URLs append to a slash-normalized base path rather than replacing it. These semantics are deliberate and documented in implementation. — [httpx/_client.py#L94-L110](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L94-L110) [httpx/_client.py#L391-L411](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L391-L411) [httpx/_client.py#L457-L473](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L457-L473)
- Treat stream cleanup and replay as acceptance criteria: stream contexts close in finally, raw iteration rejects closed/consumed streams, and generator redirects have a regression case expecting StreamConsumed. — [httpx/_client.py#L869-L877](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L869-L877) [httpx/_client.py#L1583-L1592](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L1583-L1592) [httpx/_models.py#L935-L972](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_models.py#L935-L972) [tests/client/test_redirects.py#L345-L361](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/tests/client/test_redirects.py#L345-L361)
- For separately authorized execution, the documented focused command is scripts/test -- tests/test_multipart.py; arguments reach pytest, but local execution also runs global checks and a 100-percent coverage gate. Test servers require ports 8000 and 8001. — [.github/CONTRIBUTING.md#L59-L78](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/.github/CONTRIBUTING.md#L59-L78) [scripts/test#L10-L18](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/test#L10-L18) [scripts/coverage#L11-L11](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/coverage#L11-L11)
- Repository checks enforce changelog/version agreement, Ruff formatting and lint, and strict mypy over httpx and tests; QueryParams is immutable, and per-request client cookies emit a deprecation warning. — [scripts/check#L7-L14](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/check#L7-L14) [scripts/sync-version#L3-L10](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/sync-version#L3-L10) [httpx/_urls.py#L631-L641](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_urls.py#L631-L641) [httpx/_client.py#L804-L810](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/httpx/_client.py#L804-L810) [pyproject.toml#L108-L110](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/pyproject.toml#L108-L110)
- Build and release are separate boundaries: scripts/build creates distributions and docs; scripts/publish uploads distributions and force-deploys docs, and the Publish workflow responds to pushed tags. None of these commands was executed during this investigation. — [scripts/build#L11-L13](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/build#L11-L13) [scripts/publish#L25-L26](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/scripts/publish#L25-L26) [.github/workflows/publish.yml#L3-L26](https://github.com/encode/httpx/blob/b5addb64f0161ff6bfe94c124ef76f6a1fba5254/.github/workflows/publish.yml#L3-L26)

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)
