2.4 KiB
2.4 KiB
PR-006: CLI Preserve Child Exit Status
Briefing
O wrapper prometeu despacha para outros binarios do ecossistema. Hoje, se o processo filho terminar sem exit code convencional, o CLI usa unwrap_or(0) e pode reportar sucesso mesmo quando houve abort, sinal ou encerramento anormal.
Este PR corrige a propagacao de status do processo filho para tornar o CLI confiavel em automacao, CI e uso por scripts.
Problema
status.code()pode retornarNone.unwrap_or(0)transforma falha anormal em sucesso.- Isso mascara erros reais em
run,debug,buildeverify.
Escopo
- Preservar corretamente o resultado do processo filho.
- Melhorar a mensagem de erro quando nao houver codigo numerico.
- Cobrir o comportamento com testes.
Fora de Escopo
- Reestruturar todo o dispatcher.
- Implementar subcomandos ainda nao existentes.
- Alterar o protocolo entre CLI e bins filhos.
Abordagem
- Remover
unwrap_or(0)no ponto de saida. - Tratar dois casos:
- filho retorna exit code numerico: repassar exatamente;
- filho termina sem codigo numerico: encerrar com codigo nao-zero e mensagem clara.
- Se necessario, extrair a traducao de
ExitStatuspara uma funcao pequena e testavel.
Algoritmo
Entrada: ExitStatus do processo filho.
Passos:
- Chamar
status.code(). - Se retornar
Some(code):- encerrar o wrapper com
code.
- encerrar o wrapper com
- Se retornar
None:- escrever mensagem de erro indicando encerramento anormal;
- encerrar o wrapper com
1.
Criterios de Aceite
- Se o processo filho sair com
0, o wrapper sai com0. - Se o processo filho sair com codigo nao-zero, o wrapper replica o mesmo codigo.
- Se o processo filho terminar sem codigo numerico, o wrapper sai com codigo nao-zero.
- O comportamento fica coberto por teste unitario.
Tests
- Extrair funcao pura ou quase pura para mapear
ExitStatus -> i32e testá-la. - Cobrir:
0;1;- outro codigo nao-zero;
- status sem code numerico quando a plataforma permitir criar esse caso em teste.
- Se o caso
Nonedepender de plataforma:- encapsular sob
cfg(unix)oucfg(windows)conforme apropriado; - manter ao menos o contrato da funcao testado por unidade.
- encapsular sob
- Rodar:
cargo test -p prometeu-clicargo test --workspace
Risco
Muito baixo. A mudanca corrige semantica operacional do CLI e tende a melhorar observabilidade sem alterar a logica de dispatch.