# PR-08.5 - Intrinsic Registry Single Source of Truth (Compiler <-> Runtime) ## Briefing O compiler backend hoje possui `IRVMIntrinsicRegistry` hardcoded e o runtime possui registry propio em `builtins.rs`. Mesmo estando alinhados agora, a manutencao manual em dois lugares cria risco alto de drift. ## Motivation ### Dor atual que esta PR resolve 1. Duplicacao de source-of-truth para ids finais de intrinsic. 2. Risco de regressao silenciosa quando runtime evoluir surface intrinsic. 3. Custo operacional para garantir paridade manual em cada mudanca. ## Target Estabelecer uma fonte unica versionada para mapeamento canonico de intrinsics (`canonicalName@version -> finalId`) e consumir isso em compiler + runtime com teste de paridade automatizado. ## Dependencies Prerequisitos diretos: 1. `PR-08.1` (resolucao canonica consistente no frontend). 2. `PR-05.7` (caminho de verificacao runtime-backed robusto). ## Scope 1. Definir artefato de registry canonico (ex.: JSON/TOML) sob controle de versionamento. 2. Gerar/consumir mapeamento no compiler (`IRVMIntrinsicRegistry`) a partir desse artefato. 3. Adicionar checagem de paridade em teste para impedir divergencia com runtime. 4. Documentar fluxo de evolucao de intrinsic id sem quebra de compatibilidade. ## Non-Goals 1. Nao reescrever todas as implementacoes de intrinsic do runtime nesta PR. 2. Nao alterar semantica de execucao de `INTRINSIC`. 3. Nao migrar para discovery dinamico em tempo de execucao. ## Method ### O que deve ser feito explicitamente 1. Introduzir arquivo canonico de registry em local acordado (`docs` ou `shared metadata`). 2. Criar utilitario de leitura/geracao para preencher `IRVMIntrinsicRegistry` no compiler. 3. Adicionar teste no compiler que compara mapeamento esperado com runtime (snapshot/paridade). 4. Adicionar regra de CI para falhar em desvio de paridade. 5. Atualizar docs de contribuicao para fluxo de adicao/upgrade de intrinsics. ## Acceptance Criteria 1. Existe uma unica fonte versionada de mapeamento de intrinsic ids finais. 2. Compiler nao depende de lista manual duplicada para esse mapeamento. 3. CI falha quando runtime e compiler divergem em identidade/ID de intrinsic. 4. Inclusao de nova intrinsic segue workflow documentado e testavel. ## Tests 1. `:prometeu-compiler:prometeu-build-pipeline:test --tests *Intrinsic*` 2. Teste de paridade compiler-runtime dedicado. 3. Smoke runtime-backed com intrinsic valido e id invalido. ## Affected Documents 1. `docs/pbs/specs/6.1. Intrinsics and Builtin Types 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` 4. `../runtime/docs/runtime/specs/06-input-peripheral.md` 5. `../runtime/docs/runtime/specs/02-vm-instruction-set.md` ## Open Questions 1. Melhor local da fonte unica: repo `runtime`, repo `studio`, ou pacote compartilhado dedicado?