--- id: AGD-0062 ticket: multi-frontend-common-lifecycle title: Extrair lifecycle comum das responsabilidades do frontend PBS status: open created: 2026-07-15 resolved: decision: tags: [compiler, compiler-general, compiler-pbs, lifecycle, backend, multi-frontend] --- # Agenda - Extrair o lifecycle do frontend PBS ## Objetivo Domain owner: `compiler/general`, com impacto em `compiler/pbs`. Separar declaracao de lifecycle feita por uma linguagem da montagem comum de init, frame, module initializers e entrypoint publicado. ## Contexto atual As lessons e specs antigas indicam que PBS ja trata lifecycle e wrapper/entrypoint. O alinhamento pede que `PBSFrontendPhaseService` deixe de conter regras universais da plataforma. ## Escopo - Localizar onde PBS sintetiza ou valida lifecycle. - Definir contrato comum de `LifecycleDeclaration` ou equivalente. - Planejar servico comum para validar, ordenar e montar entrypoint. ## Fora de escopo - Alterar sintaxe PBS. - Mudar comportamento observavel de projetos existentes. - Refatorar todo o backend junto da extracao. ## Arquivos e componentes a inspecionar - `prometeu-compiler/frontends/prometeu-frontend-pbs/...PBSFrontendPhaseService...` - `prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/backend/irvm/LowerToIRVMService.java` - `docs/specs/compiler/16. Runtime Execution and Initialization Specification.md` - `docs/specs/compiler/20. IRBackend to IRVM Lowering Specification.md` - `docs/specs/compiler-languages/pbs/13. Lowering IRBackend Specification.md` ## Alteracoes propostas Opcao A: frontend PBS emite declaracoes neutras de lifecycle e backend/common assembler monta o entrypoint. Opcao B: manter montagem no PBS por enquanto, mas isolar regras comuns em um servico compartilhado chamado pelo PBS. Recomendacao inicial: extrair primeiro o servico comum com testes de caracterizacao, depois migrar o PBS para produzir apenas declaracoes. ## Estrategia de implementacao Identificar fixture positiva atual, proteger com teste, criar contrato comum minimo, mover validacoes universais e manter mensagens PBS onde forem sintaxe/semantica da linguagem. ## Testes necessarios - Lifecycle valido PBS continua gerando mesmo PBX/IRVM. - Lifecycle ausente ou frame invalido falha no nivel comum quando aplicavel. - Teste de IR comum com lifecycle sem parser PBS. ## Criterios de aceitacao - PBS traduz a forma da linguagem para declaracoes neutras. - Servico comum valida e monta lifecycle da plataforma. ## Riscos - Mover validacoes PBS-especificas para camada comum por engano. - Alterar ordem de inicializadores sem perceber. ## Decisoes que devem ser registradas - Nome e ownership do servico comum. - Forma canonica das declaracoes de lifecycle. - Separacao entre erro de linguagem e erro de plataforma.