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

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