37 lines
1.9 KiB
Markdown
37 lines
1.9 KiB
Markdown
# PR-009 - PBS Diagnostics Contract V1
|
|
|
|
## Briefing
|
|
O modelo atual de `Diagnostic` nao contem fase, template id nem placeholders estaveis, o que impede conformidade com o contrato de diagnosticos da spec.
|
|
Este PR eleva o contrato de diagnosticos para v1 sem acoplar a UI.
|
|
|
|
## Target
|
|
- Specs:
|
|
- `docs/pbs/specs/12. Diagnostics Specification.md` (secoes 6, 7, 8, 9, 10)
|
|
- `docs/pbs/specs/13. Lowering IRBackend Specification.md` (secao 7)
|
|
- Codigo:
|
|
- `prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/source/diagnostics/Diagnostic.java`
|
|
- `prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/source/diagnostics/DiagnosticSink.java`
|
|
- emissores de diagnostico no frontend PBS.
|
|
|
|
## Method
|
|
1. Estender `Diagnostic` com `phase`, `templateId` e `placeholders` nomeados.
|
|
2. Definir taxonomia minima de fases externas: `syntax`, `static-semantics`, `manifest-import-resolution`, `linking`, `host-admission`, `load-facing-rejection`.
|
|
3. Preservar `code`, `severity`, `span` e `related spans` como identidade estavel.
|
|
4. Introduzir helpers para emissao padronizada por fase/template.
|
|
5. Mapear erros atuais de lexer/parser/frontend para o novo contrato.
|
|
|
|
## Acceptance Criteria
|
|
- Todo diagnostico PBS emitido tem `code`, `severity`, `phase`, `templateId`, `primary span` e mensagem renderizada.
|
|
- Duplicatas/conflitos incluem ao menos um `related span` quando aplicavel.
|
|
- Identidade de diagnostico independe do texto localizado.
|
|
- Nenhuma fase obrigatoria e colapsada de forma opaca para o usuario.
|
|
- Chamadas legadas continuam compilando com caminho de migracao claro.
|
|
|
|
## Tests
|
|
- `DiagnosticSinkTest` e novos testes de contrato para:
|
|
- presenca obrigatoria de campos;
|
|
- estabilidade de `templateId/placeholders`;
|
|
- caso com `related span`;
|
|
- serializacao/`toString` com fase e codigo.
|
|
- Testes de integracao no frontend PBS garantindo fase correta por erro.
|