# 026-runtime-cartridge-entrypoint-removal-and-boot-protocol-propagation ## Briefing Executar a propagacao de codigo da [`decision 025`](../decisions/025-cartridge-manifest-entrypoint-removal-and-runtime-protocol.md) no runtime, removendo `entrypoint` do loader e do estado de cartridge, endurecendo o boot da VM em `func_id = 0` e ajustando testes e tooling local necessario para manter o stress path funcional. Esta PR assume que a discussao arquitetural e o contrato normativo ja estao fechados. Nao e lugar para rediscutir authority de boot. ## Decisions de Origem - [`025-cartridge-manifest-entrypoint-removal-and-runtime-protocol.md`](../decisions/025-cartridge-manifest-entrypoint-removal-and-runtime-protocol.md) ## Alvo Propagar o protocolo de boot fixo em `func_id = 0` para `prometeu-hal`, `prometeu-system`, `prometeu-vm` e tooling local afetado nesta workspace. ## Escopo - remover `entrypoint` de `CartridgeManifest`, `CartridgeDTO` e `Cartridge`; - parar de desserializar e propagar `entrypoint` no loader; - endurecer `VirtualMachine::initialize(...)` para boot protocolar sem parametro textual; - remover `current_entrypoint` e o uso correspondente no boot do runtime system; - atualizar testes de loader, runtime system e VM init para o novo contrato; - ajustar o stress tooling local necessario para continuar emitindo artefato compativel com `func_id = 0`. ## Fora de Escopo - redesign geral de `prepare_call()` para chamadas nao relacionadas a boot; - compatibilidade normativa para cartuchos legados baseados em `entrypoint`; - mudancas amplas no compiler/PBS fora desta workspace; - qualquer reabertura da decisao sobre erro canonico ou autoridade de boot. ## Plano de Execucao 1. Remover `entrypoint` dos tipos de cartridge em `prometeu-hal` e atualizar o loader. 2. Endurecer `VirtualMachine::initialize(...)` para carregar o programa e resolver boot exclusivamente em `func_id = 0`, reutilizando `VmInitError::EntrypointNotFound` quando o protocolo falhar. 3. Remover `current_entrypoint` do runtime system e ajustar o caminho de `tick()` para preparar a chamada de entrada sem dependencia textual. 4. Atualizar testes afetados em `prometeu-hal`, `prometeu-system` e `prometeu-vm`. 5. Ajustar `crates/tools/pbxgen-stress` ou fixture equivalente para nao depender mais de `entrypoint` em `manifest.json`. 6. Rodar a bateria de testes proporcional ao risco da mudanca. ## Criterios de Aceite - nenhum tipo ou loader ativo do runtime depende de `entrypoint` em `manifest.json`; - o boot inicial da VM nao aceita mais parametro textual de entrypoint; - cartucho sem funcao valida em `func_id = 0` falha com `VmInitError::EntrypointNotFound`; - `current_entrypoint` deixa de existir como estado operacional do runtime system; - o stress tooling local continua produzindo artefato executavel compativel com o contrato novo; - os testes afetados passam sob o contrato endurecido. ## Tests / Validacao - testes unitarios de `prometeu-vm` cobrindo boot valido em `func_id = 0` e falha quando `0` estiver ausente ou invalido; - testes de `prometeu-system` cobrindo inicializacao e ciclo de boot sem `current_entrypoint`; - testes de `prometeu-hal` cobrindo loader sem `entrypoint` no manifesto; - validacao do stress tooling local para garantir que o gerador nao continue emitindo contrato legado. ## Riscos - a remocao de `entrypoint` pode quebrar fixtures e helpers de teste dispersos fora dos call sites obvios; - mudar `VirtualMachine::initialize(...)` sem revisar o caminho de `tick()` pode deixar boot sem prepare inicial coerente; - deixar `prepare_call()` parcialmente textual sem delimitar seu papel pode gerar confusao futuras, embora isso nao bloqueie esta PR; - tooling local que ainda grave `entrypoint` pode mascarar regressao se nao for atualizado no mesmo ciclo.