Skip to content

Teste do pattern de Decimal não depende da versão do pydantic - #216

Merged
bdcdo merged 2 commits into
mainfrom
fix/teste-pattern-decimal-pydantic
Oct 13, 2026
Merged

bdcdo merged 2 commits into
mainfrom
fix/teste-pattern-decimal-pydantic

Conversation

@bdcdo

@bdcdo bdcdo commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

O quê

tests/test_codex.py::TestStrictPydanticSchema::test_pattern_do_decimal_e_recusado_pelo_lookahead falha em todo branch desde que o CI passou a instalar o pydantic 2.14. O teste tirava o schema de um modelo com campo Decimal e esperava que o preflight do codex recusasse o pattern com lookahead. Em toda a série 2.13 (conferido até a 2.13.5) o schema de Decimal traz ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$; do 2.14.0 em diante não traz pattern, o schema passa e o pytest.raises não vê a exceção. Como o uv.lock não é versionado, o CI resolve as dependências a cada execução.

Como

O schema do teste passa a trazer escrito o pattern que o pydantic emite até a 2.13, que é o caso que a recusa protege. Nenhum código de src/ muda.

O CHANGELOG.md e o guia de providers citavam o pattern de Decimal como exemplo do que o preflight recusa. Com o pydantic 2.14 um campo Decimal passa pelo preflight, e a frase passa a nomear as versões em que o exemplo vale.

Testes

  • Suíte completa em Python 3.13 com todos os extras, inclusive codex: 1248 passam, cobertura de ramos em 100%.
  • O teste passa com o pydantic 2.12.0 (o piso declarado), 2.13.4, 2.13.5, 2.14.0 e 2.14.1.
  • Com a recusa de (?! removida de codex.py, o teste falha.
  • ruff format --check, ruff check e ty check passam.

bdcdo added 2 commits October 13, 2026 08:15
O teste tirava o schema de um modelo com campo Decimal e esperava a
recusa do lookahead. Da 2.14 em diante o pydantic não emite pattern para
Decimal, o schema passa e o teste falha em todo branch, porque o CI
resolve as dependências a cada execução.

O schema do teste passa a trazer escrito o pattern que o pydantic emite
até a 2.13, que é o caso que a recusa protege.
O CHANGELOG e o guia de providers citavam o pattern de Decimal como
exemplo do que o preflight do codex recusa. O pydantic 2.14 deixou de
emitir pattern para o tipo, e um campo Decimal passa pelo preflight; a
frase passa a nomear as versões em que o exemplo vale.
@bdcdo

bdcdo commented Oct 13, 2026

Copy link
Copy Markdown
Owner Author

Revisão independente antes do merge

Um subagente novo, sem acesso ao raciocínio da implementação, revisou o commit 9e4b19d8 num worktree descartável. Não achou defeito no diff.

O que ele conferiu por execução

  • O teste da main passa com pydantic 2.12.0, 2.13.4 e 2.13.5 e falha com 2.14.0 e 2.14.1 (DID NOT RAISE ProviderConfigurationError). É a mesma falha dos quatro jobs do run 37861197486.
  • O schema de Decimal traz o pattern até a 2.13.5 e deixa de trazer na 2.14.0.
  • O teste novo passa nas cinco versões, com a versão efetiva impressa em cada execução.
  • O pattern escrito no teste é idêntico, caractere a caractere, ao que o pydantic 2.12.0 e o 2.13.4 emitem (30 caracteres, comparados por AST contra model_json_schema()), e o anyOf tem os ramos na mesma ordem.
  • Com ("(?!", "lookahead") removido de codex.py, três testes falham, entre eles este.
  • Nenhum outro uso de Decimal em tests/ ou src/, e a suíte completa passa com cada uma das versões.

Achados fora do diff e o que foi feito

  • O CHANGELOG.md e os dois guias de providers citavam o pattern de Decimal como exemplo do que o preflight recusa, o que deixou de valer com o pydantic 2.14: os cinco modelos testados com Decimal passam pelo preflight. Corrigido em 5d9bf492.
  • O corpo do PR nomeava a 2.13.4 como limite, e a 2.13.5 também emite o pattern. Corpo corrigido.

Recusado

  • "O teste deixou de conferir o schema que o pydantic gera de fato." É consequência assumida da mudança: no pydantic atual esse schema não existe mais, e a identidade entre o literal e o que as versões antigas geram foi conferida nesta revisão.

O revisor listou outros testes de tests/test_codex.py com a mesma forma (schema gerado pelo pydantic dentro de pytest.raises ou com format exato). Nenhum quebra hoje, de 2.12.0 a 2.14.1.

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