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 |
|
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
Gameresidentes/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
Gameresidente/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
Gameresidentes/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.