# PR-19.6 - PBS Semantics for Lifecycle Markers, Init Ordering, and InitAllowed Validation ## Briefing Com globals e seu dependency graph fechados, a ultima frente semantica da familia `19` precisa validar a camada de lifecycle: 1. `[Init]`, 2. `[Frame]`, 3. ordenacao por arquivo/modulo/projeto, 4. e admissibilidade de host calls via `[InitAllowed]`. ## Target Implementar a validacao de: 1. signatures de `[Init]` e `[Frame]`, 2. unicidade e colocacao de `[Frame]`, 3. um `[Init]` por arquivo, 4. elevacao do `[Init]` co-localizado com `[Frame]` para project init, 5. restricao de host calls durante init. ## Dependencies Prerequisitos diretos: 1. `PR-19.3` 2. `PR-19.5` ## Scope 1. Validar `fn name() -> void` para `[Init]` e `[Frame]`. 2. Validar unicidade de `[Frame]` por projeto executavel. 3. Validar que project init e o `[Init]` no mesmo arquivo do `[Frame]`. 4. Validar que arquivos podem ter no maximo um `[Init]`. 5. Validar host call em init apenas quando o target SDK carregar `[InitAllowed]`. ## Non-Goals 1. Nao implementar ainda wrapper publicado. 2. Nao implementar ainda callables sinteticos de lowering. 3. Nao produzir ainda artifacts de conformance finais. ## Method 1. Construir a semantica de lifecycle em cima do ordering ja definido para globals. 2. Tratar module init e project init como diferenca de ordenacao e papel, nao de syntax. 3. Validar `[InitAllowed]` somente em host methods da SDK. ## Acceptance Criteria 1. `[Init]` e `[Frame]` exigem `fn name() -> void`. 2. Existe exatamente um `[Frame]` por projeto executavel. 3. `project init` e identificado apenas no arquivo do `[Frame]`. 4. Um arquivo nao pode declarar mais de um `[Init]`. 5. Host calls em init sem `[InitAllowed]` sao rejeitadas. 6. Uso invalido de `[InitAllowed]` e rejeitado. ## Tests 1. Fixtures positivas para: - file `[Init]`, - project `[Init]`, - `[Frame]`, - loops em init, - host call admissivel com `[InitAllowed]`. 2. Fixtures negativas para: - assinatura invalida, - multiplos `[Frame]`, - project init fora do arquivo do `[Frame]`, - multiplos `[Init]` no arquivo, - host call sem `[InitAllowed]`, - `[InitAllowed]` em target invalido. ## Affected Artifacts 1. validadores semanticos/lifecycle PBS 2. admission de host methods em init 3. testes de lifecycle e diagnostics ## Open Questions 1. Nenhuma. O passo seguinte e lowering.