Skip to content

typing_extensions 4.16.0 Sentinel repr change breaks the lowest-direct CI leg #554

Description

What happened

The Check (lowest-direct, py3.10) job failed on PR #551 (run) on a doctest in overture.schema.system.feature.Feature:

Expected: Fence(id=<MISSING>, bbox=<MISSING>, ...)
Got:      Fence(id=MISSING, bbox=MISSING, ...)

The PR's diff (12 file deletions, no dependency surface) is unrelated; the failure reproduces without it.

Root cause

  • pydantic's experimental MISSING sentinel delegates its repr to typing_extensions.Sentinel in every pydantic version (verified on 2.12.0, 2.12.5, and 2.13.0).
  • typing-extensions 4.16.0 (released 2026-07-02) changed the Sentinel repr from <MISSING> to MISSING.
  • The doctest pins the old repr.

Why only the lowest-direct leg

The default matrix legs install from uv.lock, which pins typing-extensions 4.15.0 (old repr), so they pass. The lowest-direct leg re-resolves: direct dependencies are floored, transitives float to latest. typing-extensions is not a direct dependency of any package, so it floats to 4.16.0 and the doctest fails.

Reproduction from a synced worktree:

uv run --no-sync --with pydantic==2.12.0 --with 'typing_extensions>=4.16' \
  python -m pytest --doctest-modules \
  packages/overture-schema-system/src/overture/schema/system/feature.py -q

One loose end: the base branch's lowest-direct leg still passed on 2026-07-08 with the same uv version (0.11.28), six days after the 4.16.0 release — something else in the resolution graph held typing-extensions below 4.16 that day and has since relaxed. CI logs don't record resolved versions, so the exact delta is unconfirmed; it doesn't change the fix.

Impact

Every branch and PR run of Check Python package code fails the lowest-direct leg until this is fixed, independent of the change under test.

Fix

  1. Update the doctest expectation to the current upstream repr (MISSING).
  2. uv lock --upgrade-package typing-extensions so the default (locked) legs agree with it.
  3. Optionally declare typing-extensions>=4.16 as a direct dependency of overture-schema-system: the sentinel repr is load-bearing for its doctest, so the floor makes the lowest-direct resolution deterministic about it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions