Skip to content

CI testa em Python 3.14 e o pacote declara suporte - #231

Open
bdcdo wants to merge 3 commits into
mainfrom
chore/ci-python-3.14-3.15
Open

bdcdo wants to merge 3 commits into
mainfrom
chore/ci-python-3.14-3.15

Conversation

@bdcdo

@bdcdo bdcdo commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

O CI testava só em 3.11 e 3.13, e os classifiers paravam no 3.13. O 3.14 saiu em outubro de 2025 e o 3.15 em outubro de 2026 (status das versões), e nada no repositório dizia se o pacote funciona neles.

O que muda

  • As matrizes dos jobs unit e codex-provider passam a ['3.11', '3.13', '3.14'].
  • O classifier Python :: 3.14 entra no manifesto.
  • O comentário do job coverage passa a dizer que o limite de 100% vale para a soma das versões da matriz.
  • CONTRIBUTING.md e CHANGELOG.md.

Os jobs quality, coverage, docs e codex-windows seguem em 3.13, e o lowest-direct em 3.11.

Por que o 3.15 não entra

A instalação em 3.15 falha no ormsgpack, que chega pelo langgraph-checkpoint. A versão mais recente dele, a 1.12.2, publica wheels de cp310 a cp314. Sem wheel, o uv compila do fonte, e a compilação para com the configured Python version (3.15) is newer than PyO3's maximum supported version (3.14), porque o pacote usa o PyO3 0.27.2. A variável PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1, que a mensagem sugere, não contorna: a compilação para com 68 erros. O resultado é o mesmo no CPython 3.15.0rc2 e no 3.15.0 final.

O ormsgpack é o único pacote que impede a instalação. pyyaml, uuid-utils e zstandard também não publicam wheel para o 3.15, mas compilam do fonte. Quando o ormsgpack publicar a wheel, vale conferir esses três antes de pôr o 3.15 na matriz.

Cobertura em 3.14

Em 3.14 sozinho a cobertura é de 99,88%: typing.Union e types.UnionType passaram a ser o mesmo objeto, e três linhas de utils.py que tratam um deles depois do outro (412-413 e 764) deixam de ser alcançadas. O job coverage segue em 100% porque soma as versões, e o 3.11 e o 3.13 cobrem essas linhas. O comando de cobertura do CONTRIBUTING.md, rodado só em 3.14, não atinge o limite. Este PR não mexe nisso.

Verificação local

  • ruff format --check, ruff check, ty check, vulture e deptry src: saída 0.
  • Job unit em 3.14: 1184 passaram, 105 pulados, o mesmo que em 3.11 e 3.13.
  • Job codex-provider em 3.14: 1175 passaram, 135 pulados, o mesmo que em 3.11 e 3.13.

bdcdo added 3 commits October 13, 2026 15:47
As matrizes dos jobs unit e codex-provider ganham o 3.14, e o
classifier correspondente entra no manifesto.

O 3.15 fica de fora: o ormsgpack, que o langgraph-checkpoint exige, não
publica wheel para ele, e a compilação do fonte falha porque o PyO3
0.27.2 só aceita até o 3.14.
O comentário dizia duas versões de Python. Passa a dizer que o limite de
100% vale para a soma das versões, e por quê: no 3.14 sozinho a cobertura
de utils.py fica em 99%.
@bdcdo

bdcdo commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner Author

Revisão independente

Um subagente novo revisou o diff no SHA 2e97508, sem acesso ao raciocínio da implementação, rodou os jobs em 3.11, 3.13 e 3.14 e leu os logs do CI. Os achados foram conferidos na fonte antes de entrar aqui.

Corrigido em 17afac8 e no corpo do PR

  • Comentário do job coverage desatualizado. Dizia "nas duas versões de Python", e a matriz passou a ter três. O comentário agora fala das versões da matriz e explica por que o 100% vale para a soma.
  • Corpo do PR impreciso sobre o 3.15. O ormsgpack é o único pacote que impede a instalação, mas pyyaml, uuid-utils e zstandard também não têm wheel para o 3.15 e compilam do fonte. O corpo passou a dizer isso, e que a falha se repete no 3.15.0 final.

Aberto, para decisão

  • Cobertura de 99,88% em 3.14 sozinho. Três linhas de utils.py (412-413 e 764) não são alcançadas a partir do 3.14, porque typing.Union is types.UnionType passou a ser verdadeiro. O gate do CI passa pela soma das versões. O comando de cobertura do CONTRIBUTING.md, rodado só em 3.14, sai com erro. Um teste com 12 anotações (Union com referência não resolvida, Literal, Annotated, Any, TypeVar, X | None) deu o mesmo resultado nas três versões, então não há diferença de comportamento.

Descartado

  • O prefixo chore/ da branch não está na lista do CONTRIBUTING.md. Há precedente no remoto, e a lista traz os tipos comuns.
  • Windows não é exercitado em 3.14. O job codex-windows é fixo em 3.13, e o 3.11 está na mesma situação hoje.

Conferido sem achado

Job 3.11 3.13 3.14
unit 1184 aprovados, 105 pulados 1184 / 105 1184 / 105
codex-provider 1175 aprovados, 135 pulados 1175 / 135 1175 / 135
  • A lista de testes pulados é idêntica entre 3.11 e 3.14 nos dois jobs. Todos são pulados por extra ausente, nenhum por versão. Com todos os extras instalados em 3.14 são 1310 aprovados e nenhum pulado.
  • No CI, unit (3.14) e codex-provider (3.14) rodaram em CPython 3.14.8, e o job coverage combinou seis arquivos e fechou em 100%.
  • Os cinco comandos do job quality saem com 0 também em 3.14, e mkdocs build passa em 3.14.
  • A main não tem proteção de branch nem lista de checks obrigatórios a atualizar.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant