2.7 KiB
2.7 KiB
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
PBSFrontendPhaseServicepara 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 deIRBackendFile).- Testes de integração em
PBSFrontendPhaseServiceTest.
Method
- Introduzir rastreamento de dependências entre módulos no frontend pipeline (import graph por módulo) usando apenas
importexplícito de source.pbs. - Quando um módulo falhar em admissão (
syntax,static semantics,linking,load-facing,host-admissionquando aplicável), marcar módulo como reprovado. - Propagar reprovação somente para módulos que importam (direta ou transitivamente) o módulo reprovado.
- Impedir merge no
IRBackendpara:- módulo reprovado,
- módulos bloqueados por dependência.
- Manter emissão de diagnósticos e processamento para módulos independentes.
Acceptance Criteria
- Se
Afalha eBdepende deA,Bnão é emitido noIRBackend. - Se
Cé independente deA,Ccontinua 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.mddocs/pbs/specs/13. Lowering IRBackend Specification.md