prometeu-studio/docs/pbs/pull-requests/PR-031-pbs-dependency-scoped-fail-fast-admission.md
2026-03-24 13:42:23 +00:00

61 lines
2.7 KiB
Markdown

# 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`