prometeu-runtime/docs/runtime/agendas/006-break-monolith-runtime.md
2026-03-24 13:40:47 +00:00

2.7 KiB

Agenda - Break Monolith Runtime

Problema

Partes críticas do runtime cresceram como monólitos:

  • dispatcher de syscalls concentrado em um arquivo enorme;
  • lógica de VM e testes unitários convivendo no mesmo arquivo gigante;
  • fronteiras entre domínio, orquestração e teste cada vez menos nítidas.

Isso hoje é visível principalmente em:

  • prometeu-vm/src/virtual_machine.rs
  • prometeu-system/src/virtual_machine_runtime.rs
  • prometeu-hal/src/syscalls.rs

Dor

  • Evolução fica cara porque qualquer mudança exige navegar arquivos enormes.
  • Review perde precisão: comportamento, helper, contrato e teste se misturam no mesmo lugar.
  • A chance de regressão cresce porque a coesão está baixa e o isolamento entre domínios está fraco.
  • O custo cognitivo para novos contribuidores já está alto demais para o estágio do projeto.
  • Testes internos gigantes mascaram ownership ruim de comportamento.

Alvo da Discussao

Definir uma estratégia de modularização do runtime que preserve as invariantes atuais, mas reduza o acoplamento estrutural.

O objetivo não é "fatiar por estética". É:

  • extrair dispatcher de syscalls por domínio;
  • separar responsabilidades dentro do runtime;
  • tirar testes unitários do arquivo monolítico da VM quando fizer sentido;
  • manter discoverability e rigor arquitetural.

O Que Precisa Ser Definido

  1. Topologia de módulos. Como dividir syscalls por domínio:

    • system
    • gfx
    • input
    • audio
    • fs
    • log
    • asset
    • bank
  2. Dono da orquestração. O que continua no runtime central e o que migra para módulos/serviços especializados.

  3. Estratégia para a VM. Quais blocos de virtual_machine.rs devem virar módulos dedicados:

    • execução/opcodes
    • loader init
    • syscalls
    • GC/safepoint hooks
    • helpers de testes
  4. Estratégia de testes. Quais testes permanecem próximos ao módulo e quais viram integração.

  5. Critério de coesão. Como evitar trocar um monólito por vinte arquivos arbitrários sem fronteira real.

O Que Necessita Para Resolver

  • mapa atual de responsabilidades por arquivo;
  • proposta de topologia modular;
  • critério de migração de testes;
  • definição clara do que é API interna entre módulos;
  • plano incremental de refactor sem quebrar o runtime no meio.

Fora de Escopo

  • redesign funcional do comportamento da VM;
  • reescrita completa do runtime;
  • reorganização cosmética sem ganho de ownership.

Critério de Saida Desta Agenda

Pode virar PR quando houver:

  • proposta de módulos aprovada;
  • fronteira clara entre dispatcher, domínio e orquestração;
  • plano para testes unitários e integração;
  • estratégia incremental que preserve o comportamento existente.