Skip to content

fix(config): depreca Environment::Sandbox e corrige o contrato de ambientes — release v3.4.0 - #32

Merged
andrenfe merged 1 commit into
masterfrom
fix/sandbox-environment-contract
Jul 30, 2026
Merged

fix(config): depreca Environment::Sandbox e corrige o contrato de ambientes — release v3.4.0#32
andrenfe merged 1 commit into
masterfrom
fix/sandbox-environment-contract

Conversation

@andrenfe

Copy link
Copy Markdown
Member

Resumo

Environment::Sandbox prometia isolamento que nunca existiu e isso é um risco real: um integrador que instancia new Client(apiKey: $k, environment: Environment::Sandbox) acredita estar isolado e emite documento fiscal real se a chave for de produção.

Fatos (review 2026-07-14 + verificação 2026-07-29):

  • Config::baseUrlForApi() nunca consultou $environment — todo tráfego vai para os hosts de produção com qualquer valor do enum.
  • Não há host sandbox na plataforma; o Node (fonte de paridade) valida apenas production|development e tampouco roteia.
  • A spec client-core já dizia que o servidor distingue por credencial, não por subdomínio — o docblock contradizia a spec.

O que muda

  • Docblocks honestos em Environment e Config: o enum é metadado declarativo; o isolamento real vem do escopo da chave + company.environment = Development.
  • Sandbox fica @deprecated e o Config emite E_USER_DEPRECATED (via @trigger_error, padrão Symfony) ao selecioná-lo, com a orientação correta. Remoção na próxima major.
  • Docs: configuration.md ganha a seção "Ambientes na NFE.io" (duas camadas de isolamento); getting-started.md, README e skill corrigidos.
  • Nenhum comportamento de rede muda — pinado por teste: URLs idênticas com Production e Sandbox.

Testes

  • Unit: deprecation disparada só em Sandbox; URLs idênticas nos dois valores do enum.
  • make test: 264 passed / 1 failed — a falha é a ambiental pré-existente (CurlTransportFailurePhaseTest, DNS; passa no CI). make stan e make cs limpos.

Release v3.4.0

Este PR também corta a v3.4.0 (Version.php + CHANGELOG versionado, padrão dos releases anteriores), embarcando junto a fix-inbound-routes (#30, já na master). Após o merge: tag v3.4.0 na master → release.yml verifica a matrix e publica.

OpenSpec: fix-sandbox-environment-contract (11/11 tasks; artefatos locais). Com este PR, a onda 1 inteira da review (P0) está entregue.

…ientes — release v3.4.0

Environment::Sandbox prometia roteamento/isolamento que nunca existiu: não há
host sandbox na plataforma (o Node valida só production|development; a spec
client-core já dizia que o servidor distingue por credencial) e
Config::baseUrlForApi() nunca consultou o environment — todo tráfego sempre
foi para produção. Um integrador que selecionava Sandbox com chave de
produção emitia documento fiscal real achando-se isolado.

- Environment/Config: docblocks passam a dizer a verdade (metadado
  declarativo; isolamento = chave de conta dev + company.environment)
- Sandbox @deprecated; Config emite E_USER_DEPRECATED ao selecioná-lo,
  com a orientação do isolamento real; remoção na próxima major
- Testes: deprecation disparada só em Sandbox; URLs idênticas com
  Production e Sandbox (pina a ausência de roteamento)
- Docs: configuration.md ganha a seção "Ambientes na NFE.io";
  getting-started.md, README e skill corrigidos
- Nenhum comportamento de rede muda

Inclui o corte da release v3.4.0 (Version.php + CHANGELOG), que embarca
também a fix-inbound-routes (#30).

OpenSpec: fix-sandbox-environment-contract
@andrenfe
andrenfe merged commit a5362fc into master Jul 30, 2026
9 checks passed
@andrenfe
andrenfe deleted the fix/sandbox-environment-contract branch July 30, 2026 04:41
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