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

3.1 KiB

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