# PR-05.0.2 - Module Identity Dense Table and ModuleId Wiring ## Briefing O FE usa `String moduleKey` em varios mapas e no handoff para backend. Esta PR introduz identidade densa de modulo (`ModuleTable` + `ModuleId`) e faz o FE operar internamente por ID, mantendo string apenas como representacao de borda quando necessario. ## Motivation ### Dor que esta PR resolve 1. Chaves string de modulo sao repetidas e suscetiveis a inconsistencia de normalizacao. 2. Custos de hash/string crescem com o grafo de modulos. 3. Dificuldade de garantir determinismo e joins estaveis em agregacao multi-modulo. ## Target Substituir identidade interna de modulo baseada em string por `ModuleId` internado. ## Scope 1. Criacao de `ModuleTable` no core. 2. Uso de `ModuleId` em `PBSFrontendPhaseService` para mapas de modulo/dependencias. 3. Adaptacao de pontos de diagnostico e exibição para renderizar nome canônico quando preciso. ## Non-Goals 1. Nao altera sintaxe de import. 2. Nao altera formato de mensagens ao usuario final alem do necessario. ## Method ### O que deve ser feito explicitamente 1. Implementar `ModuleTable extends InternTable` (ou valor equivalente canonico). 2. Trocar `Map` de modulo em `PBSFrontendPhaseService` por `Map`. 3. Trocar grafo de dependencia de `String` para `ModuleId`. 4. Manter funcao unica de render de modulo para diagnostico. ## Acceptance Criteria 1. Fluxo principal do FE nao depende de `moduleKey` string para joins internos. 2. Dependencias e bloqueios por falha de modulo usam `ModuleId`. 3. Nao ha regressao funcional em linking/import gating. ## Tests 1. Teste de determinismo de IDs de modulo para mesmo grafo admitido. 2. Teste de propagacao de falha por dependencia usando IDs. ## Affected Documents 1. `docs/pbs/specs/13. Lowering IRBackend Specification.md` 2. `docs/general/specs/20. IRBackend to IRVM Lowering Specification.md` ## Open Questions Sem bloqueios arquiteturais.