prometeu-studio/discussion/workflow/agendas/AGD-0057-multi-frontend-provider-contract.md
bQUARKz 35b65bb524
All checks were successful
JaCoCo Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 61.37% (17351/28272) * Branch Coverage: 52.31% (6722/12850) * Lines of Code: 28272 * Cyclomatic Complexity: 11325 #### Quality Gates Summary Output truncated.
Test / Build skipped: 15, passed: 601
Intrepid/Prometeu/Studio/pipeline/head This commit looks good
multi FE adjustment agendas
2026-07-15 07:58:23 +01:00

3.0 KiB

id ticket title status created resolved decision tags
AGD-0057 multi-frontend-provider-contract Introduzir provider completo de frontend open 2026-07-15
compiler
compiler-general
studio
frontend
registry
multi-frontend

Agenda - Introduzir provider completo de frontend

Objetivo

Domain owner: compiler/general, com impacto em studio.

Discutir como consolidar um contrato de FrontendProvider que agrupe especificacao, compilador e servicos editoriais opcionais sem transformar o Studio em uma plataforma de plugins.

Contexto atual

O repositorio ja possui prometeu-compiler/prometeu-frontend-registry/src/main/java/p/studio/compiler/FrontendRegistryService.java e superficies relacionadas a FrontendSpec, FrontendPhaseService e languageId. Ainda ha sinais de registro ou uso direto do PBS em composition roots e chamadas comuns.

Escopo

  • Inspecionar o registry atual e seus consumidores.
  • Definir se FrontendProvider deve ser novo contrato ou evolucao de contrato existente.
  • Planejar PBSFrontendProvider como unico provider inicial.
  • Preservar selecao atual por languageId.

Fora de escopo

  • Descoberta dinamica de plugins.
  • Reflection, classpath scanning ou carregamento externo de JARs.
  • Implementar qualquer frontend real alem do PBS.

Arquivos e componentes a inspecionar

  • prometeu-compiler/prometeu-frontend-registry/src/main/java/p/studio/compiler/FrontendRegistryService.java
  • prometeu-compiler/frontends/prometeu-frontend-pbs/...
  • prometeu-compiler/prometeu-build-pipeline/...
  • prometeu-studio/src/main/java/p/studio/projects/ProjectLanguageCatalogService.java
  • prometeu-app/src/main/java/p/studio/AppContainer.java

Alteracoes propostas

Opcao A: criar FrontendProvider explicito com specification(), compiler() e languageService() opcional.

Opcao B: evoluir o registry para devolver um objeto existente que ja represente provider, adicionando apenas os campos faltantes.

Recomendacao inicial: preferir a menor mudanca que faca o codigo comum resolver provider = registry.require(languageId) e pare de conhecer classes PBS fora do composition root.

Estrategia de implementacao

Comecar por uma auditoria de chamadas atuais ao registry e de instanciacoes diretas do PBS. Introduzir o contrato sem remover APIs antigas no mesmo passo, migrar PBS para o contrato e so entao substituir consumidores comuns.

Testes necessarios

  • Teste do registry exigindo resolucao por languageId.
  • Teste de registro unico do PBS como provider inicial.
  • Teste de erro claro para languageId desconhecido.

Criterios de aceitacao

  • O codigo comum consulta o provider, nao instancia PBSFrontendPhaseService.
  • PBS permanece funcional.
  • Nenhum frontend real novo e criado.

Riscos

  • Criar uma abstracao grande demais antes de mapear os consumidores reais.
  • Misturar contrato de build com contrato editorial.

Decisoes que devem ser registradas

  • Nome final do contrato.
  • Responsabilidades minimas do provider.
  • Onde fica o composition root autorizado a registrar PBS.