prometeu-studio/docs/pbs/pull-requests/PR-029-pbs-builtin-slot-inference-and-layout-semantics.md
2026-03-24 13:42:23 +00:00

73 lines
3.1 KiB
Markdown

# PR-029 - PBS Builtin Slot Inference and Canonical Layout Semantics
## Briefing
Hoje o frontend aceita `Slot(index=...)` manual em `declare builtin type`, e parte da validacao de layout fica empurrada para `load-facing`.
Isso abre espaco para inconsistencias entre declaracao de campos, flattening e offsets.
Esta PR move ownership de slot para o compilador: offsets passam a ser inferidos deterministicamente a partir do layout canonico flattenado, sem autoria manual de `Slot`.
## Motivation
- Reduzir superficie de erro humano em builtin layout.
- Alinhar semantica estatica com o contrato de layout flattenado.
- Evitar que erros de layout aparecam tarde em `load-facing` quando sao semanticos.
## Target
- Tornar `Slot(index=...)` proibido na superficie de fonte de builtin field.
- Banir `Slot(...)` da gramatica PBS (erro de sintaxe), sem fallback transitorio.
- Inferir `slotStart` automaticamente no frontend com base em:
- ordem canonica dos campos,
- largura flattenada dos tipos admissiveis,
- composicao builtin aninhada.
- Mover validacoes de layout para `static semantics`.
- Atualizar extracao de metadata reservada para usar slots inferidos (nao lidos de atributo).
- Atualizar fixtures do SDK minimo (`@core:color` etc.) removendo `Slot`.
## Scope
- `frontends/prometeu-frontend-pbs` (semantica + metadata extraction + testes).
- Atualizacao de specs PBS relacionadas a builtin layout e diagnosticos.
## Method
1. Introduzir um resolvedor de layout builtin na fase semantica.
2. Calcular largura flattenada por tipo builtin e mapear offsets por campo.
3. Banir `Slot(...)` no parser (erro de sintaxe deterministico) com remocao da forma da superficie da linguagem.
4. Produzir diagnosticos `E_SEM_*` deterministicos para:
- tipo de campo nao admissivel para layout builtin,
- composicao ciclica de builtin layout,
- impossibilidade de resolver largura flattenada.
5. Persistir offsets inferidos no metadata model de lowering (`IRReservedMetadata`).
6. Remover a exigencia de `Slot` no loader/extractor.
## Acceptance Criteria
- Builtin fields sem `Slot` compilam quando o layout e admissivel.
- Qualquer `Slot(...)` manual e rejeitado como erro de sintaxe (breaking imediato).
- `Pixel(x:int, y:int, color:Color)` recebe offsets inferidos consistentes com flattening.
- Erros de layout builtin deixam de depender de `E_LOAD_*` para serem detectados.
- Suite Gate U cobre positivo e negativo para inferencia de slot.
## Tests
- Positivo: inferencia de offsets em builtin simples e composto.
- Negativo: `Slot` manual presente (falha de parser).
- Negativo: campo com tipo nao admissivel.
- Negativo: ciclo de composicao builtin.
- Asserts por `code`, `phase`, `templateId`, `span`.
## Non-Goals
- Alterar o contrato de runtime/verifier para alem da inferencia de layout no frontend.
- Definir encoding final de artifact/PBX.
## Affected Documents
- `docs/pbs/specs/4. Static Semantics Specification.md`
- `docs/pbs/specs/3. Core Syntax Specification.md`
- `docs/pbs/specs/6.1. Intrinsics and Builtin Types Specification.md`
- `docs/pbs/specs/8. Stdlib Environment Packaging and Loading Specification.md`
- `docs/pbs/specs/12. Diagnostics Specification.md`