# PR-08.4 - CALL_FUNC Callee Module Identity Correctness ## Briefing No lowering executavel PBS, instrucoes `CALL_FUNC` podem carregar `calleeModuleKey` do contexto local, e nao necessariamente do callable alvo. Isso compromete rastreabilidade, debug e futuras validacoes de linking por modulo. ## Motivation ### Dor atual que esta PR resolve 1. Metadado de callsite incorreto para chamadas inter-modulo. 2. Dificulta diagnostico e verificacao de integridade no backend. 3. Introduz risco de regressao quando modulo vira identidade tipada no contrato. ## Target Garantir que todo `CALL_FUNC` preserva identidade real do alvo (`callee module`) de forma deterministica, sem usar contexto local como proxy. ## Dependencies Prerequisitos diretos: 1. `PR-05.0.4` (assinatura/callable internados). 2. `PR-08.2` (quando `ModuleId` tipado estiver ativo, usar id do alvo). ## Scope 1. Corrigir montagem de callsite para puxar modulo do `calleeCallableId` resolvido. 2. Ajustar modelos auxiliares de resolucao de callable para incluir modulo do alvo. 3. Expandir testes de lowering com chamadas cross-module. ## Non-Goals 1. Nao alterar categoria de callsite. 2. Nao introduzir linking dinamico de funcoes. 3. Nao alterar bytecode emitido para opcodes de chamada. ## Method ### O que deve ser feito explicitamente 1. Enriquecer lookup de callable para retornar identidade completa (`callableId + module identity`). 2. Em `CALL_FUNC`, preencher `callee module` com identidade do alvo real. 3. Adicionar validacao de consistencia em contrato executavel para evitar modulo invalido em chamada. 4. Criar regressao com: - modulo A chamando funcao em modulo B, - assert do modulo do callee no IRBackend. ## Acceptance Criteria 1. Nenhuma instrução `CALL_FUNC` usa modulo local quando alvo e externo. 2. Testes cross-module passam com metadado correto de callee. 3. Diagnosticos mantem atribuicao correta em falhas de resolucao. 4. Contrato segue deterministico em rebuilds equivalentes. ## Tests 1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsFrontendCompilerTest*` 2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PBSFrontendPhaseServiceTest*` 3. `:prometeu-compiler:prometeu-build-pipeline:test --tests *LowerToIRVMPipelineStageTest*` ## Affected Documents 1. `docs/pbs/specs/13. Lowering IRBackend Specification.md` 2. `docs/general/specs/20. IRBackend to IRVM Lowering Specification.md` 3. `docs/general/specs/22. Backend Spec-to-Test Conformance Matrix.md` ## Open Questions 1. Durante a transicao, manter `calleeCallableName` textual para debug ou derivar sempre da assinatura por id?