# PR-13.2 - Flow Body Analyzer Callable Body and Completion Decomposition ## Briefing As regras de entrada de callable e de completion/fallthrough em `PbsFlowBodyAnalyzer` formam um cluster coeso, mas hoje ficam misturadas com statement analysis e assignment resolution. Esta PR extrai essa superficie para colaboradores dedicados, sem alterar funcionalidade. ## Motivation ### Dor atual que esta PR resolve 1. `validateCallableBody`, `validateCallableCompletion`, `blockAlwaysReturns`, `statementAlwaysReturns`, `expressionAlwaysReturns`, `switchAlwaysReturns` e `handleAlwaysReturns` concentram regras de completion com alto branching. 2. Completion analysis e statement analysis sao preocupacoes diferentes e hoje dividem a mesma classe. 3. Essa parte e muito sensivel e merece uma fronteira estrutural propria. ## Target Separar a camada de body entry/completion: 1. bootstrap de callable body, 2. validacao de fallthrough/completion, 3. regras de `always returns`, 4. exaustividade relevante para completion. ## Dependencies Prerequisito direto: 1. `PR-13.1` ## Scope 1. Extrair `validateCallableBody`. 2. Extrair `validateCallableCompletion`, `blockAlwaysReturns`, `statementAlwaysReturns`, `expressionAlwaysReturns`. 3. Extrair `switchAlwaysReturns`, `switchIsExhaustive`, `handleAlwaysReturns`, `handleArmAlwaysReturns`, `isKnownErrorPath`. ## Non-Goals 1. Nao alterar as regras atuais de fallthrough para result/plain non-unit. 2. Nao alterar a semantica de exaustividade usada apenas para completion. 3. Nao alterar statement analysis ou assignment checks. ## Method ### O que deve ser feito explicitamente 1. Introduzir um analisador de completion ou divisao equivalente. 2. Manter `PbsFlowBodyAnalyzer` como orquestrador do processo. 3. Preservar rigorosamente a ordem atual de checks e codigos de diagnostico. ## Acceptance Criteria 1. A logica de completion/fallthrough deixa de ficar centralizada em `PbsFlowBodyAnalyzer`. 2. As regras de `always returns` permanecem equivalentes. 3. Nenhum teste de fallthrough, control flow ou result flow muda comportamento esperado. ## Tests 1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsFallthroughTest*` 2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*` 3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsResultFlowRulesTest*` 4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test` ## Affected Documents 1. Nenhum documento normativo. ## Open Questions 1. `switch`/`handle` completion deve ficar junto do completion analyzer ou reaproveitar colaboradores do expression analyzer. A recomendacao e manter local ao completion analyzer para evitar acoplamento indevido entre analise de tipo e analise de terminacao.