# PR-031 - PBS Dependency-Scoped Fail-Fast Admission ## Briefing Hoje o pipeline pode continuar emitindo parte do `IRBackend` mesmo após erros de admissão em módulos dependidos (ex.: `E_LOAD_*`). Isso permite artefato parcialmente válido em build com erro, o que aumenta risco de interpretação incorreta do resultado. Esta PR formaliza política de fail-fast por dependência: módulos que dependem de módulo reprovado não devem ser lowered/emitidos, sem interromper globalmente a coleta de diagnósticos. ## Motivation - Evitar saída parcial enganosa quando há falha estrutural em módulo upstream. - Manter diagnósticos úteis e completos no restante do grafo. - Preservar determinismo do contrato de admissão no boundary do frontend. ## Target - Ajustar admissão do `PBSFrontendPhaseService` para bloqueio transitivo por dependência de módulo falho. - Preservar compilação/diagnóstico de módulos independentes no mesmo build. - Tornar comportamento explícito e testável. ## Scope - `prometeu-compiler/frontends/prometeu-frontend-pbs` (pipeline de admissão e merge de `IRBackendFile`). - Testes de integração em `PBSFrontendPhaseServiceTest`. ## Method 1. Introduzir rastreamento de dependências entre módulos no frontend pipeline (import graph por módulo) usando apenas `import` explícito de source `.pbs`. 2. Quando um módulo falhar em admissão (`syntax`, `static semantics`, `linking`, `load-facing`, `host-admission` quando aplicável), marcar módulo como reprovado. 3. Propagar reprovação somente para módulos que importam (direta ou transitivamente) o módulo reprovado. 4. Impedir merge no `IRBackend` para: - módulo reprovado, - módulos bloqueados por dependência. 5. Manter emissão de diagnósticos e processamento para módulos independentes. ## Acceptance Criteria - Se `A` falha e `B` depende de `A`, `B` não é emitido no `IRBackend`. - Se `C` é independente de `A`, `C` continua apto a ser emitido. - Build com erro não produz artefato parcial inconsistente no subgrafo dependente. - Diagnósticos permanecem completos e com identidade estável (`code`, `phase`, `templateId`, `span`). ## Tests - Cenário positivo: módulos independentes sobrevivem ao fail-fast por dependência. - Cenário negativo: módulo dependente de módulo com `E_LOAD_*` não é lowered. - Cenário negativo: módulo dependente de módulo com `E_LINK_*` não é lowered. - Asserts por diagnóstico e por conteúdo final de `IRBackend`. ## Non-Goals - Fail-fast global do build ao primeiro erro. - Alterar contrato de runtime/loader. - Redefinir severidade de diagnósticos existentes. ## Affected Documents - `docs/pbs/specs/12. Diagnostics Specification.md` - `docs/pbs/specs/13. Lowering IRBackend Specification.md`