71 lines
2.2 KiB
Markdown
71 lines
2.2 KiB
Markdown
# PR-05.3 - IRVM Deterministic Function-ID and Entrypoint Policy
|
|
|
|
## Briefing
|
|
|
|
A regra de indexação de funções e seleção de entrypoint precisa ficar estritamente alinhada ao contrato normativo para evitar divergência entre builds equivalentes.
|
|
|
|
Esta PR fecha política determinística de `func_id` e entrypoint único explícito.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. Possível variação de `func_id` quando ordem de merge muda.
|
|
2. Risco de entrypoint implícito ou ambíguo.
|
|
3. Dificuldade para gerar artefatos reproduzíveis e goldens estáveis.
|
|
|
|
## Target
|
|
|
|
`LowerToIRVMService` com regra única e testável de ordenação/indexação/entrypoint.
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-05.0.2` (identidade de modulo por `ModuleId`).
|
|
2. `PR-05.0.3` (IDs tipados de callable).
|
|
|
|
## Scope
|
|
|
|
1. Ordenação determinística de funções.
|
|
2. Política explícita de entrypoint.
|
|
3. Diagnóstico para ausência ou ambiguidade de entrypoint.
|
|
|
|
## Non-Goals
|
|
|
|
1. Não altera ABI de chamada.
|
|
2. Não altera layout binário do bytecode.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Definir ordenação canônica apenas pelos campos normativos aprovados.
|
|
2. Tornar explícita a ordenação de módulo a partir do `ModuleId` canônico.
|
|
3. Exigir exatamente um entrypoint válido no grafo admitido.
|
|
4. Atribuir `func_id=0` ao entrypoint e indexar demais por ordem canônica.
|
|
5. Rejeitar determinísticamente casos sem entrypoint ou com entrypoint múltiplo.
|
|
6. Cobrir cenários de permutação de entrada com mesma saída de indexação.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. Mesma entrada admitida gera mesma tabela de `func_id` em execuções repetidas.
|
|
2. Mudança na ordem de merge dos módulos não altera indexação final.
|
|
3. Ausência ou ambiguidade de entrypoint falha com diagnóstico estável.
|
|
4. A ordenação não depende de string derivada não canônica de módulo.
|
|
|
|
## Tests
|
|
|
|
1. Teste de determinismo com permutação de ordem de merge.
|
|
2. Teste de entrypoint único válido.
|
|
3. Testes negativos para zero entrypoint e múltiplos entrypoints.
|
|
|
|
## Affected Documents
|
|
|
|
1. `docs/general/specs/20. IRBackend to IRVM Lowering Specification.md`
|
|
2. `docs/general/specs/19. Verification and Safety Checks Specification.md`
|
|
|
|
## Open Questions
|
|
|
|
Sem bloqueios arquiteturais.
|