prometeu-runtime/discussion/workflow/agendas/AGD-0047-hub-suspended-game-kill-affordance.md

4.4 KiB

id ticket title status created resolved decision tags
AGD-0047 hub-suspended-game-kill-affordance Hub Suspended Game Kill Affordance accepted 2026-07-05
hub
lifecycle
game
ui

Contexto

A troca entre cartridges agora mata a VM do jogo anterior quando outro jogo e carregado. Ainda assim, voltar para o Hub via Home/ESC pode deixar um jogo residente/suspenso, pronto para retomar pelo fluxo existente.

Hoje o Hub nao comunica esse estado de forma clara. O usuario pode estar no Hub sem saber que ha um jogo suspenso mantendo task, sessao de VM, estado de pausa/audio e possivelmente recursos associados. A proposta e exibir o nome do jogo suspenso no canto inferior direito, dentro de uma caixa vermelha, e permitir que um clique nessa caixa feche/mate esse jogo.

Problema

Precisamos decidir se esse elemento e apenas um indicador visual ou tambem um controle destrutivo de lifecycle. Se ele mata o jogo, a acao precisa ter contrato explicito: qual entidade e encerrada, quais estados sao limpos, como o Hub atualiza a UI, e se ha confirmacao para evitar kill acidental.

Pontos Criticos

  • Fato: o jogo suspenso/residente e uma entidade de lifecycle, nao apenas uma linha visual no Hub.
  • Fato: iniciar outro jogo ja mata a VM anterior; esta proposta adiciona um caminho manual para a mesma intencao sem carregar outro cartridge.
  • Risco: um clique acidental em uma caixa vermelha pode perder progresso/estado sem aviso.
  • Risco: matar somente a task sem limpar sessao/render/audio/assets deixaria estado residual parecido com os bugs recentes de troca de jogo.
  • Tradeoff: confirmacao protege o usuario, mas adiciona friccao a um controle que parece operacional/debug.
  • Hipotese: limitar o controle a jogos Game residentes/suspensos evita misturar shell/system apps no mesmo affordance.

Opcoes

Opcao A - Indicador com kill imediato

  • Abordagem: mostrar uma caixa vermelha no canto inferior direito somente quando houver jogo residente/suspenso; um clique mata imediatamente esse jogo e remove o indicador.
  • Pro: simples, rapido, combina com a proposta original.
  • Contra: risco de perda acidental de estado.
  • Manutencao: baixa complexidade, mas exige testes fortes de cleanup.

Opcao B - Indicador com confirmacao em dois passos

  • Abordagem: primeiro clique arma a acao ou muda o texto/estado visual; segundo clique confirma kill.
  • Pro: reduz kill acidental sem exigir modal.
  • Contra: mais estado no Hub e precisa de feedback visual claro.
  • Manutencao: moderada; adiciona timeout/estado armado se quisermos evitar confirmacao persistente.

Opcao C - Apenas indicador, sem kill

  • Abordagem: mostrar o jogo suspenso, mas matar continua ocorrendo apenas ao carregar outro jogo ou por controles futuros.
  • Pro: menor risco destrutivo.
  • Contra: nao resolve a necessidade declarada de fechar/matar o jogo pelo Hub.
  • Manutencao: baixa, mas provavelmente incompleta.

Sugestao / Recomendacao

Seguir com a Opcao A se aceitarmos que o Hub atual e uma superficie operacional/dev e que a caixa vermelha comunica suficientemente a natureza destrutiva da acao. O contrato recomendado:

  • aparece somente para jogo Game residente/suspenso;
  • mostra somente o nome do jogo;
  • fica no canto inferior direito;
  • usa vermelho como indicativo de encerramento;
  • clique mata a task/sessao residente e limpa o estado relacionado;
  • apos o kill, o Hub permanece no Hub e o indicador desaparece.

Se a prioridade for evitar perda acidental de estado, promover para Opcao B antes da decision.

Perguntas em Aberto

  • O indicador deve aparecer somente para jogos Game residentes/suspensos?
  • O clique vermelho deve matar imediatamente ou exigir confirmacao?
  • O kill manual deve reutilizar exatamente o mesmo caminho de encerramento usado antes de carregar outro cartridge?
  • O kill deve limpar assets/compositor imediatamente ou apenas task/session/render/audio?
  • Deve haver evento/log explicito para "resident game killed from Hub"?

Criterio para Encerrar

A agenda pode virar decision quando concordarmos em:

  • quando o indicador aparece;
  • qual texto e posicao minima ele usa;
  • se a acao e imediata ou confirmada;
  • qual contrato de cleanup o kill manual deve cumprir;
  • quais testes provam que o jogo suspenso foi morto e nao pode ser retomado.

Resolution

Ainda em aberto.

Next Step

Responder as perguntas em aberto e entao aceitar a agenda para escrever a decision.