31 KiB
Contexto
O Prometeu precisa separar corretamente modos operacionais diferentes. A pergunta inicial nasceu a partir de tween/UI, mas a discussao revelou que o ponto central nao e animacao: e a diferenca entre pipeline de jogo e pipeline de sistema/app.
O estado atual tem algumas separacoes de render/composicao, mas ainda mistura pipeline de app de sistema com pipeline de jogo:
FrameComposere o dono da composicao canonica de cenas, camera e sprites.Gfxexecuta raster e efeitos globais como fade de scene/HUD.- primitivas
gfx.*sao drenadas como overlay final, fora do contrato canonico de jogo. - o
PrometeuHubtem uma UI simples baseada emWindowManager, com janelas estaticas e renderizacao imediata porfill_rect. - a VM ja tem
FrameSync, entao o tempo logico natural para animacao e por frame, nao por relogio de host.
O objetivo agora e definir uma separacao correta entre:
- modo jogo;
- modo sistema/Hub;
- apps Prometeu rodando dentro do ambiente do Hub.
Atualizacao da discussao: ha uma separacao importante entre UI de jogos e UI do sistema Prometeu. Para jogos, a direcao preferida e nao criar syscalls especificas de UI; um framework/biblioteca pode compor UI usando as primitivas existentes de sprites, cena, input e frame sync. Para o PrometeuHub e apps do Prometeu, a UI do sistema pode ter uma camada propria. Se essa camada for exportada para devs criarem apps do Prometeu, ela nao deve ser tratada como API de jogo comum, e talvez nem como syscall tradicional.
Atualizacao adicional: apps do Prometeu podem ser escritos em PBS, como jogos, mas isso nao implica que usem o mesmo pipeline de jogo. A linguagem/formato de programa pode ser comum, enquanto o modo de execucao muda: hub e apps do sistema podem rodar a 30 Hz, 24 Hz ou em um modelo mais orientado a invalidacao/eventos, e devem compartilhar o mesmo ambiente de UI do PrometeuHub.
Atualizacao de retomada: a direcao preferida agora e reaproveitar a mesma VM e linguagens afins para apps de sistema, mas com perfil de biblioteca/capacidades separado. Apps system nao devem importar nem depender da stdlib de jogos: nada de FrameComposer, Gfx ou Input como superficie publica. Logs talvez possa existir como servico comum ou adaptado. fs provavelmente precisa existir de forma diferenciada: mais filesystem de app/sistema e menos modelo de memory card de jogo.
Atualizacao sobre manifest/tooling: nao precisamos introduzir um novo target. O manifest.json ja possui o campo app_mode/AppMode, que e exatamente o discriminante de perfil desta discussao: Game ou System. O compiler deve usar esse modo para escolher/injetar a stdlib correta durante a compilacao, e o Studio tambem deve usar essa informacao para orientar projeto, build, validacao e UX. Internamente, Logs pode enderecar o mesmo servico/runtime, mas do ponto de vista do Studio e da autoria deve existir via stdlib de perfil, mesmo que o conteudo inicial seja equivalente. O contrato minimo de fs para System pertence a uma agenda especifica; esta agenda deve apenas fixar que Game e System terao recursos expostos de forma diferenciada.
Leitura do estado atual do codigo: o firmware e tickado pelo host uma vez por frame, com comentario explicito de 60 Hz. O PrometeuHub shell em si nao roda via VirtualMachineRuntime::tick; HubHomeStep chama hub.gui_update(...), depois hub.render(...), e por fim present(). Porem, quando existe uma janela focada de app System, HubHomeStep chama ctx.os.tick(ctx.vm, ctx.signals, ctx.hw), que e o mesmo caminho usado por GameRunningStep para jogos. Portanto, hoje o Hub shell e direto no firmware, mas apps de sistema dentro do Hub compartilham o pipeline de VM/logical-frame dos jogos.
Direcao ajustada: esse comportamento atual esta errado para apps Prometeu. Apps nao devem ser tratados como jogos rodando dentro de uma janela. Eles devem ter um pipeline especifico de app, com userland proprio dentro do Hub, acesso a diretivas de janelas/componentes, servicos de disco, perifericos e capacidades de sistema. A analogia operacional e mais proxima de um ambiente de apps tipo Android do que de um cartucho de jogo.
Direcao de fechamento da agenda: o sistema de janelas, UI e apps System deve ser tratado como dominio proprio do Prometeu Runtime/Hub, separado do pipeline de jogo. Mesmo que, no futuro, apps PBS usem syscalls para criar janelas, componentes e receber eventos, a syscall sera apenas transporte. O contrato real sera uma ABI especifica do perfil System, diferente da ABI de jogos com Gfx, Input, banks, sprites e memory cards.
A primeira fatia de trabalho nao deve construir o WindowManager completo. O escopo desta agenda e separar o pipeline: o caminho de jogo fica intocado, e System passa a ter um pipeline especifico do Runtime/Hub que encaminha execucao, eventos e renderizacao para o dominio do WindowManager. Esse pipeline deve seguir a inspiracao operacional do Android: apps de sistema vivem em um ambiente de janelas/UI gerenciado pelo sistema, nao em um loop de jogo dentro de uma janela.
Somente depois que esse pipeline interno e o modelo do WindowManager amadurecerem, o dominio deve ser exposto para apps System por meio de ABI publica propria e stdlib/framework PBS de perfil System. Assim, PBS pode construir apps de sistema usando janelas, componentes, eventos, lifecycle e filesystem de app, sem herdar FrameComposer, Gfx ou Input do perfil de jogo.
Problema
Hoje AppMode::System ainda cai no caminho de execucao da VM usado por jogos quando ha uma janela focada no Hub. Isso transforma app de sistema em "jogo dentro de uma janela", quando o modelo desejado e outro: apps Prometeu devem rodar em um userland proprio do Hub, com pipeline, pacing, lifecycle, janelas/componentes, disco/perifericos e capacidades de sistema.
O risco e resolver sintomas de UI antes de corrigir o modo operacional:
- se entrar em
Gfx, mistura politica de UI com raster; - se entrar em
FrameComposer, mistura estado de interface com composicao canonica de jogo; - se virar syscall publica cedo demais, congela ABI antes de sabermos quais propriedades realmente precisam ser animadas;
- se ficar apenas no hub sem modelo claro, pode virar duplicacao quando outras UIs precisarem da mesma mecanica.
- se tratarmos apps do Prometeu como jogos, forçamos uma API de sistema dentro do contrato de cartucho.
- se acoplarmos PBS a um unico modo de execucao, perdemos a chance de ter perfis diferentes para jogo, hub e app sem duplicar linguagem/tooling.
- se apps de sistema continuarem usando
VirtualMachineRuntime::tickcomo jogos, o Hub vira apenas um wrapper visual em vez de um ambiente operacional real. - se a API de apps for desenhada como syscalls de jogo, ela tende a misturar contrato de cartucho com contrato de userland do sistema.
- se apps
systemherdarem a stdlib de jogos,FrameComposer,GfxeInputvazam para um dominio onde a UI, o roteamento de input e a composicao pertencem ao Hub/sistema. - se
fsfor apenas memory card, apps de sistema ficam artificialmente limitados; se for FS amplo demais, quebramos isolamento e capacidade. - se a primeira entrega tentar construir todo o WindowManager em vez de separar o pipeline, o escopo explode e mistura decisao arquitetural com desenho completo de UI.
- se a primeira entrega tentar abrir ABI publica PBS antes do pipeline interno amadurecer, congelamos uma superficie de System sem saber se o modelo de Hub funciona.
- se tratarmos syscalls futuras como contrato conceitual em vez de transporte, repetimos o erro de deixar o mecanismo de chamada definir a arquitetura.
Pontos Criticos
- O tempo deve ser deterministico e baseado em frames logicos, provavelmente avançado em
FrameSync/begin_frame. - A primeira entrega deve animar estado de UI do sistema, nao definir ainda um framework visual completo.
- O tween deve produzir valores simples (
i32,u8, talvez alpha/fade), deixando renderizacao para o dono atual da UI. - Precisa haver politica de termino: remover tween concluido, clamping no valor final e comportamento se o alvo for substituido durante a animacao.
- O contrato precisa decidir se o controle e interno ao firmware/hub ou exposto a cartuchos via syscall.
- A discussao deve separar tres superficies: jogos, PrometeuHub, e apps do Prometeu.
- PBS deve ser tratado como meio de autoria/execucao, nao como sinonimo de "jogo a 60 Hz".
- Apps do Prometeu precisam de um perfil de frame pacing proprio, provavelmente mais lento e/ou dirigido por invalidacao.
- Apps do Prometeu precisam de um userland proprio no Hub, com lifecycle, janela, componentes, disco/perifericos e capacidades de sistema.
- O pipeline atual de
AppMode::Systemusando o mesmoctx.os.tick(...)de jogos deve ser tratado como comportamento transitorio ou incorreto, nao como contrato. - A VM e as linguagens podem ser comuns entre jogos e apps system, mas a stdlib/capability set nao deve ser comum.
- Apps system nao devem receber
FrameComposer,GfxouInputcomo bibliotecas publicas; essas superficies pertencem ao perfil de jogo. - Input de app system deve chegar via eventos/componentes/foco do Hub, nao via snapshot de controle de jogo.
- Render de app system deve passar pela UI/compositor do sistema, nao pelo compositor canonico de jogo.
- Persistencia de app system deve ser filesystem orientado a app/capacidades, enquanto jogos continuam com memory card/save slots quando esse for o contrato de portabilidade.
Logspode ser candidato a servico transversal, mas precisa preservar fonte, permissao, quota e visibilidade por perfil.- O
app_mode/AppModeja existente nomanifest.jsondeve ser a fonte de verdade do perfil de autoria/build:GameouSystem. - O compiler deve resolver/injetar stdlib conforme
app_mode; o Studio deve ler o mesmo campo para orientar capacidades, templates, validacao e UX. Logspode usar o mesmo servico runtime internamente, mas deve ser exposto pela stdlib adequada ao perfil.- O contrato detalhado de
fsdeSystemfica fora desta agenda e deve continuar na agenda especifica de filesystem; aqui basta fixar queSystemnao usa mem cards deGame. Systemnao tera banks,Gfx, nem acesso aofsvia mem cards deGame; tera controles de janelas, componentes e APIs de ambiente, em um modelo mais proximo de apps Android.- Syscall futura para apps PBS
Systemdeve ser tratada como transporte; o contrato real sera a ABI publica do perfilSystem. - A primeira fatia deve ser interna ao Runtime/Hub e cobrir a separacao de pipeline para
System, roteando o caminho de app/system para o dominio doWindowManagersem alterar o pipeline de jogo. - Nenhuma API publica PBS de System deve ser congelada ate o modelo interno provar que funciona como ambiente operacional.
Opcoes
Opcao A - Tween interno no PrometeuHub / firmware
Criar um pequeno motor de tween no dominio de UI do sistema, usado pelo WindowManager ou por um UiAnimationController.
- Pro: menor risco arquitetural; nao muda ABI publica; suficiente para transicoes do hub.
- Pro: esforco baixo e testavel com unidade pura.
- Contra: cartuchos nao ganham API de animacao.
- Contra: pode precisar ser promovido depois se a mesma necessidade aparecer no runtime publico.
Estimativa: 1 a 2 dias para MVP util, incluindo testes.
Opcao B - Servico runtime interno compartilhavel
Criar um controlador generico em prometeu-system ou prometeu-drivers, mas ainda sem syscall publica. O hub consome esse servico; outras superficies internas podem reutilizar.
- Pro: separa interpolacao de renderizacao e prepara expansao.
- Pro: ainda evita congelar ABI publica.
- Contra: exige mais cuidado com ownership, handles e ciclo de vida.
- Contra: precisa decidir onde o servico vive sem violar a fronteira
FrameComposer/Gfx.
Estimativa: 3 a 5 dias para uma versao solida com handles, cancelamento/substituicao e testes.
Opcao C - API publica de tween via syscall
Adicionar dominio ou chamadas publicas para criar/consultar/cancelar tweens a partir de bytecode/cartuchos.
- Pro: vira capacidade da plataforma, nao so do hub.
- Pro: cartuchos ganham uma primitiva de UI/animacao deterministica.
- Contra: alto custo de contrato: ABI, caps, custos de syscall, tipos aceitos, persistencia de handles, erros e compatibilidade futura.
- Contra: requer decisao e plano antes de mexer em spec/code.
Estimativa: 1 a 2 semanas para contrato, spec, implementacao, testes VM/syscall e exemplos minimos. Esta opcao nao deve ser prioridade enquanto a separacao de modos estiver aberta.
Opcao D - Framework de UI para jogos sobre primitivas existentes
Manter tween e widgets de jogo em uma biblioteca/framework, sem nova syscall de UI. O framework usa FrameSync, input, sprites, cenas, camera e/ou primitivas de desenho ja existentes.
- Pro: evita congelar UI de jogo no ABI do runtime.
- Pro: permite evoluir ergonomia, layout, widgets e easing fora do nucleo.
- Pro: respeita que jogos costumam precisar de UIs estilizadas, nao de um toolkit de sistema.
- Contra: exige SDK/framework separado e exemplos bons.
- Contra: nao resolve por si so a UI do PrometeuHub.
Estimativa: 2 a 4 dias para uma primeira biblioteca pequena de tween/layout immediate-mode para jogos, assumindo que ela roda no lado de autor/cartridge tooling e nao exige ABI nova.
Opcao E - Toolkit de UI para PrometeuHub/apps do sistema
Criar uma camada propria para UI do PrometeuHub e possiveis apps do Prometeu. Essa camada pode ser exportada para devs de apps do sistema, mas nao precisa ser o mesmo contrato de cartuchos/jogos.
- Pro: modela corretamente apps do Prometeu como software do ambiente, nao como jogos.
- Pro: permite componentes mais "sistema": janelas, foco, navegacao, temas, transicoes.
- Contra: precisa definir modelo de app do Prometeu, permissao/capacidade e packaging.
- Contra: se exportada cedo, vira contrato de plataforma do mesmo jeito, apenas fora do dominio de jogos.
Estimativa: 1 a 2 semanas para um toolkit minimo de apps do Prometeu, porque isso puxa mais que tween: ciclo de vida de app, foco, janelas, input routing e superficie de extensao.
Opcao F - PBS comum com perfis de execucao diferentes
Permitir que jogos e apps do Prometeu sejam escritos em PBS, mas declarar perfis distintos:
-
perfil de jogo: frame loop de jogo, alvo 60 Hz, primitivas de jogo e framework opcional de UI;
-
perfil de hub/app: ambiente UI do Prometeu, pacing menor como 30 Hz/24 Hz ou invalidacao, janelas/foco/input routing de sistema;
-
contrato comum: bytecode/VM/tooling basico;
-
contrato divergente: capacidades, syscalls permitidas, scheduler/pacing, lifecycle e UI services.
-
Pro: reaproveita linguagem, compilador, VM e parte do tooling.
-
Pro: modela apps como programas PBS sem fingir que sao jogos.
-
Pro: permite reduzir custo de CPU/bateria no hub e em apps sem prejudicar jogos.
-
Contra: exige manifest/perfil de execucao e regras claras de capacidades.
-
Contra: precisa cuidado para nao criar duas plataformas incompatíveis sob o mesmo nome PBS.
Estimativa: 1 a 2 semanas para especificar e implementar um primeiro perfil de app/hub se limitado a pacing/lifecycle/UI basica; mais se incluir packaging, permissao e distribuicao.
Opcao G - Userland de apps Prometeu dentro do Hub
Criar um pipeline especifico para apps Prometeu:
-
apps continuam podendo ser escritos em PBS;
-
o loader reconhece um perfil de app, diferente de jogo;
-
o Hub hospeda processos/apps com lifecycle proprio;
-
o scheduler de apps usa pacing proprio, como 30 Hz, 24 Hz ou invalidacao;
-
apps acessam um toolkit de janelas/componentes e servicos de sistema;
-
disco, perifericos e capacidades passam por APIs de userland/app, nao pelo contrato de jogo puro;
-
o pipeline de jogo continua separado, otimizado para frame loop, input e composicao de jogo.
-
Pro: modela corretamente o Prometeu como ambiente operacional, nao apenas launcher.
-
Pro: permite UI de sistema rica, apps multitarefa ou semi-multitarefa, foco, janela, permissao e lifecycle.
-
Pro: evita contaminar jogos com APIs de sistema e evita limitar apps ao modelo de cartucho.
-
Contra: e uma decisao arquitetural maior que tween; tween vira apenas uma peca do toolkit.
-
Contra: exige contrato de manifest/perfil, scheduler, capacidades, armazenamento e input routing.
Estimativa: 2 a 4 semanas para um primeiro userland minimo de apps dentro do Hub, dependendo do quanto de disco/perifericos/componentes entrar no MVP. Um spike vertical menor poderia levar 1 semana: carregar um app PBS em perfil prometeu-app, abrir janela, rodar a 30 Hz e acessar uma API minima de janela/input/disco.
Opcao H - VM comum com stdlib/capabilities por perfil
Manter a mesma VM e linguagens afins para jogos e apps system, mas declarar uma fronteira forte no nivel de perfil:
-
perfil
game: stdlib de jogo comFrameComposer,Gfx,Input, frame sync de jogo e persistencia tipo memory card/save slots; -
perfil
system-app: mesma VM/bytecode quando possivel, mas stdlib propria para janela, componentes, eventos, lifecycle, logs e filesystem de app; -
manifest.jsondeclaraapp_mode: Gameouapp_mode: System, reaproveitando o contrato existente; -
o compiler usa
app_modepara resolver/injetar a stdlib correta; -
o Studio usa
app_modepara UX, templates, validacao e informacao de capacidades; -
servicos comuns so entram quando o contrato for realmente transversal, como talvez
Logs, sempre com fonte/capacidade/quotas por perfil; -
fsdeixa de ser uma abstracao unica: jogos continuam no modelo portavel de saves/memory card, apps system recebem uma superficie diferenciada, cujo contrato detalhado pertence a agenda especifica de filesystem. -
Pro: reaproveita VM, compilador, linguagem e tooling sem herdar a semantica de jogo.
-
Pro: impede que APIs de render/input de jogo contaminem o modelo de UI do sistema.
-
Pro: permite que apps system tenham armazenamento e lifecycle coerentes com software de sistema.
-
Pro: torna o perfil visivel no projeto fonte e no Studio, nao apenas no loader/runtime.
-
Contra: exige manifest/perfil, resolucao de imports por perfil e matriz de capacidades.
-
Contra: cria duas stdlibs que precisam ser documentadas e testadas sem parecerem plataformas desconectadas.
-
Contra:
fsainda depende de outra agenda para fechar o contrato minimo de System.
Estimativa: 1 a 2 semanas para fechar contrato e implementar o primeiro corte se o escopo for perfil/imports/capabilities basicas; mais se incluir FS completo, empacotamento e multitarefa.
Opcao I - Pipeline System interno antes da ABI publica
Tratar janelas, UI e apps System como dominio interno proprio do Runtime/Hub antes de qualquer exposicao publica para PBS, mas sem tentar construir o WindowManager completo nesta agenda:
-
separar o pipeline de
Systemdo pipeline de jogo; -
manter o pipeline de jogo intocado;
-
encaminhar apps
Systempara um caminho do Runtime/Hub orientado aoWindowManager; -
usar o modelo Android como inspiracao: ambiente de apps/janelas gerenciado pelo sistema, nao loop de jogo em janela;
-
manter tudo como contrato interno enquanto o desenho ainda estiver mudando;
-
quando o modelo estiver estavel, publicar uma ABI de perfil
Systeme uma stdlib/framework PBS; -
permitir que a ABI publica use syscalls como transporte, mas sem confundir syscall com o contrato conceitual;
-
manter a ABI de jogos separada, com
Gfx,Input, banks, sprites e memory cards fora do perfilSystem. -
Pro: permite evoluir o modelo operacional do Hub sem congelar ABI prematura.
-
Pro: separa claramente pipeline de jogo e pipeline de sistema.
-
Pro: reduz a primeira fatia para a fronteira arquitetural que hoje esta errada.
-
Pro: cria base real para apps System antes de expor promessas a devs PBS.
-
Contra: adia apps PBS de System publicos ate o Runtime/Hub provar o modelo.
-
Contra: nao entrega ainda WindowManager completo, arvore de componentes rica ou lifecycle final.
-
Contra: exige disciplina para nao deixar detalhes internos virarem contrato acidental.
Estimativa: 3 a 5 dias para separar e rotear o pipeline System internamente, assumindo que o WindowManager existente e usado como destino inicial. Mais tempo so entra quando formos amadurecer componentes, lifecycle, invalidacao rica e transicoes.
Sugestao / Recomendacao
Comecar pela separacao de modos e pelo territorio-pipeline do Runtime/Hub, nao por tween nem por ABI publica:
- Definir
game modecomo pipeline de cartucho/jogo, com frame loop e alvo 60 Hz. - Definir
system modecomo ambiente do Hub, com pacing proprio e UI de sistema. - Definir
prometeu app modecomo PBS/VM comum quando possivel, rodando em userland do Hub, nao no pipeline de jogo. - Definir stdlib/capabilities por perfil:
system-appnao recebeFrameComposer,GfxouInput; recebe APIs de sistema para janela/componentes/eventos/lifecycle. - Reaproveitar
app_mode/AppModeemmanifest.jsoncomo discriminante de autoria/build:GameouSystem. - Fazer o compiler e o Studio resolverem stdlib/capabilities a partir desse
app_mode. - Separar armazenamento por perfil: jogos usam memory card/save slots; apps system nao usam mem cards de jogo e terao contrato de filesystem proprio, definido em agenda especifica.
- Separar primeiro o pipeline interno de
Systemno Runtime/Hub, roteando esse caminho para o dominio doWindowManagere mantendo o pipeline de jogo intocado. - Amadurecer
WindowManager, componentes, lifecycle, invalidacao e transicoes em etapas posteriores, sobre esse pipeline ja separado. - So depois expor uma ABI publica de perfil
Systeme stdlib/framework PBS; syscalls futuras serao transporte, nao o contrato conceitual. - Depois disso, tratar tween como componente do toolkit de UI do sistema ou como biblioteca de jogo, conforme o modo.
A recomendacao atual passa a ser uma combinacao das Opcoes G, H e I: userland de apps Prometeu dentro do Hub, sobre a mesma VM/languages quando isso for util, com stdlib/capacidades diferentes do perfil de jogo, e com pipeline System separado antes de virar ABI publica. Isso evita duplicar a maquina de execucao, impede que apps system sejam apenas "jogos em janelas", e evita congelar uma API PBS antes do modelo operacional existir.
Para Logs, a recomendacao e separar autoria de implementacao: internamente o runtime pode usar o mesmo servico de log, mas a API que o dev enxerga vem da stdlib do perfil. Assim o Studio pode apresentar contrato e ergonomia de Game e System separadamente sem forcar duplicacao interna prematura.
A Opcao E so deve virar decisao quando houver uma decisao anterior sobre apps do Prometeu: o que sao, como rodam, que permissoes tem e se compartilham ou nao o mesmo empacotamento de cartuchos. Essa decisao agora parece necessaria antes de tratar tween/UI como trabalho de implementacao, porque o lugar correto do tween depende do userland de apps.
Modelo sugerido para a primeira fatia:
- identificar o ponto atual em que
AppMode::Systementra no mesmo tick/pipeline de jogo; - criar caminho separado para
Systemno Runtime/Hub; - manter
GameRunningStepe o pipeline de jogo sem alteracao conceitual; - rotear execucao/eventos/renderizacao de
Systempara o dominio doWindowManager; - bloquear uso de
FrameComposer,Gfx,Input, banks e mem cards no perfilSystem; - deixar componentes, lifecycle rico, invalidacao detalhada e transicoes como evolucao posterior;
- nao publicar ABI PBS de System nesta fase.
Se o objetivo for expor System UI para PBS, a agenda deve virar decisao e plano primeiro; a decisao deve deixar claro que a exposicao publica vem depois da maturacao interna do Runtime/Hub.
Perguntas em Aberto
- O alvo inicial e apenas a UI do sistema PrometeuHub ou tambem APIs para cartuchos? Direcao atual: primeira fatia interna ao Runtime/Hub; nada de API publica PBS/cartucho agora.
- Quais propriedades precisam ser animadas no primeiro uso: posicao, tamanho, alpha/fade, cor, camera, sprites? Direcao atual: animacoes/transicoes sao detalhe interno de System UI e nao entram como contrato publico inicial.
- A animacao deve sobreviver a troca/remocao de janela ou deve ser cancelada junto com o elemento? Direcao atual: isso pertence ao lifecycle interno de janela/componente, nao a ABI publica agora.
- Precisamos de easing nominal estavel no contrato agora, ou curvas podem ser internas enquanto estiver no hub? Direcao atual: internas enquanto estiver no Hub.
- Existe requisito de serializacao/replay/debug para inspecionar tweens ativos? Direcao atual: nao para esta decisao; pode aparecer depois como tooling/debug interno.
- Apps do Prometeu devem declarar um perfil PBS proprio no manifesto? Direcao atual: sim, via
manifest.json app_mode: System. - Quais syscalls/capacidades sao permitidas para apps do Prometeu em comparacao com jogos? Direcao atual: nao congelar syscalls publicas agora; System tera ABI propria depois, sem
Gfx,Input, banks, sprites e mem cards. - O hub e os apps compartilham exatamente o mesmo toolkit de UI ou o hub tem privilegios/componentes internos adicionais? Direcao atual: primeiro amadurecer toolkit interno do Hub; exposicao para apps System vem depois como ABI/framework de perfil.
- Apps Prometeu usam a mesma VM/runtime de jogos com outro scheduler, ou um runtime/userland separado sobre a mesma VM? Direcao atual: mesma VM/languages quando possivel, mas userland/pipeline/stdlib/capabilities de System separados.
- Como o manifest distingue jogo, app Prometeu e possiveis servicos/background tasks? Direcao atual:
app_mode: Gameouapp_mode: System; servicos/background ficam fora desta agenda. - Apps system devem usar a mesma VM/languages ou uma VM separada? Direcao atual: mesma VM/languages quando possivel, com perfil separado.
- Apps system devem herdar a stdlib dos jogos? Direcao atual: nao; sem
FrameComposer,GfxeInput. - Qual e a forma exata de resolver/importar stdlib por perfil no manifesto/tooling? Direcao atual:
manifest.jsonja declaraapp_mode: Gameouapp_mode: System; compiler injeta stdlib porapp_mode; Studio consome o mesmo campo. Logssera servico transversal ou API separada por perfil? Direcao atual: runtime pode usar o mesmo servico internamente; autoria/Studio usam stdlib de perfil.- O contrato minimo de filesystem para app system deve ser fechado nesta agenda? Direcao atual: nao; agenda especifica de
fsfecha detalhes, esta agenda fixa apenas a separacao Game/System. - Qual e o nome final do modo de sistema no manifest? Direcao atual: usar o
AppMode::Systemexistente. - O discriminante de perfil tambem deve existir no pacote/manifest compilado, ou apenas no projeto fonte e metadados de build? Direcao atual: ja existe no
manifest.jsoncomoapp_mode. - Qual e o conjunto minimo de APIs de System para substituir banks/Gfx/Input/mem cards? Direcao atual: esta agenda nao define API publica; primeira fatia separa o pipeline e aponta
Systempara o dominio doWindowManager. - O pacing de apps deve ser fixo, como 30 Hz/24 Hz, ou dirigido por invalidacao com limite maximo? Direcao atual: a primeira decisao exige dominio System separado e invalidacao interna; pacing exato fica para plano/implementacao.
- Apps podem rodar em paralelo com o Hub e entre si, ou o MVP permite apenas um app focado? Direcao atual: nao bloqueia a decisao de separacao; MVP pode ser definido no plano.
- Como isolamento, permissoes e quota de recursos sao expressos para apps? Direcao atual: nao bloquear esta agenda; deve ser tratado junto da ABI publica System e do contrato de capacidades.
Resolucao Proposta
A agenda esta pronta para virar decisao com o seguinte territorio:
GameeSystemsao perfis distintos do Prometeu Runtime, discriminados pelomanifest.json app_mode/AppModeexistente.- Apps
Systempodem usar a mesma VM/languages que jogos quando isso for util, mas nao herdam a stdlib/ABI de jogo. - A ABI de jogo continua dona de
FrameComposer,Gfx,Input, banks, sprites e memory cards. - O dominio
Systempertence ao Runtime/Hub e deve ter pipeline proprio antes de amadurecer o WindowManager completo. - A primeira fatia segmenta o pipeline atual:
Gamecontinua no caminho de jogo existente;Systempassa para um caminho especifico do Runtime/Hub orientado aoWindowManager. - Syscalls futuras para PBS
Systemsao apenas transporte; o contrato publico real sera uma ABI especifica do perfilSystem. - A ABI publica e a stdlib/framework PBS de
Systemso devem ser abertas depois que o modelo interno do Runtime/Hub provar que funciona. Logspode compartilhar implementacao runtime, mas deve ser exposto por stdlib de perfil.fsdeSystemfica fora desta decisao detalhada; esta agenda fixa apenas queSystemnao usa mem cards deGamee que o contrato de filesystem pertence a agenda propria.- A primeira fatia de trabalho deve ser interna ao Runtime/Hub, limitada a separacao de pipeline, e nao deve congelar API publica PBS.
Criterio para Encerrar
A agenda pode virar decisao quando estiver claro:
- se o escopo e framework de jogos, UI interna do hub, ou toolkit exportado para apps do Prometeu;
- se apps PBS terao perfil de execucao separado do perfil de jogo;
- se apps Prometeu terao userland proprio dentro do Hub;
- se apps system terao stdlib/capabilities separadas da stdlib de jogos;
- se
manifest.json app_modesera o discriminante deGamevsSystempara compiler e Studio; - se a agenda de
fssera referenciada como dona do contrato detalhado de filesystem de System; - se a primeira fatia sera interna ao Runtime/Hub, sem ABI publica PBS e sem construir o WindowManager completo;
- se syscalls futuras serao tratadas como transporte para ABI System, nao como contrato conceitual;
- se o pipeline de jogo deve ficar intocado enquanto
Systemganha caminho proprio inspirado no modelo Android; - qual evidencia de teste sera exigida.
Estimativa Resumida
- Separacao normativa dos modos jogo/sistema/app: 1 a 2 dias para decisao bem fechada.
- Spike vertical de pipeline de app Prometeu separado: cerca de 1 semana.
- Userland minimo de apps Prometeu dentro do Hub: 2 a 4 semanas.
- MVP interno no hub: 1 a 2 dias.
- Servico interno reutilizavel: 3 a 5 dias.
- Framework de UI/tween para jogos sem syscall nova: 2 a 4 dias para primeira versao pequena.
- API publica/runtime ABI para jogos: nao recomendada agora; se insistirmos, 1 a 2 semanas.
- Toolkit exportavel para apps do Prometeu: 1 a 2 semanas, dependendo do modelo de app.
- Perfil PBS de app/hub com pacing proprio e ambiente UI compartilhado: 1 a 2 semanas para o primeiro contrato minimo.
- Userland minimo de apps Prometeu dentro do Hub: 2 a 4 semanas; spike vertical reduzido em torno de 1 semana.
- VM comum com stdlib/capabilities por perfil: 1 a 2 semanas para contrato inicial e primeiro corte de imports/capabilities.
- Primeira fatia interna de separacao do pipeline System no Runtime/Hub: 3 a 5 dias para segmentar o caminho e rotear para o dominio do WindowManager; mais tempo so para evoluir WindowManager, componentes, lifecycle e transicoes.