Skip to content

[P1][Windows] simplicio-loop progress falha em cp1252 com UnicodeEncodeError #465

Description

@wesleysimplicio

Problema observado

Em 2026-07-17, em Windows/PowerShell com simplicio-loop 3.36.1 (shim local reportando Version 0.0.0.0), a execução de progresso falha antes de renderizar o estado quando a saída usa o renderer padrão:

simplicio-loop progress --run run-20260717-044710-lemslobz
UnicodeEncodeError: 'charmap' codec can't encode characters
... encodings/cp1252.py ...

O mesmo run possui estado persistido válido em .simplicio/loop-runs/run-20260717-044710-lemslobz/state.json, mas a observabilidade fica indisponível no terminal Windows. O problema não altera diretamente o estado do run, porém impede o operador de acompanhar a execução e transforma uma checagem read-only em falha.

Reprodução passo a passo

  1. Usar Windows PowerShell com o code page/encoding padrão cp1252.
  2. Criar ou localizar um run do simplicio-loop com estado persistido.
  3. Executar:
    simplicio-loop progress --run <run-id>
  4. Observar UnicodeEncodeError: 'charmap' codec can't encode characters no renderer/progress.py.
  5. Repetir com PYTHONIOENCODING=utf-8 ou saída ASCII e confirmar que a falha depende da codificação/renderer, não da ausência do state.json.

Impacto

  • Operadores Windows não conseguem acompanhar phases, receipts, blockers e coverage.
  • A falha degrada o requisito de evidência e pode induzir diagnóstico incorreto de run parado.
  • Automação/CI que captura progress pode falhar mesmo quando o run está íntegro.
  • O contrato deve preservar caracteres Unicode quando o terminal suporta UTF-8, mas possuir fallback seguro quando não suporta.

Diagnóstico atual

  • Ambiente: Windows, PowerShell, Python 3.14, cp1252.
  • Comando: simplicio-loop progress --run run-20260717-044710-lemslobz.
  • Erro: UnicodeEncodeError em encodings/cp1252.py.
  • O run chegou a phase=mapping e possui events.jsonl, state.json e task-contract.json; a falha é especificamente na apresentação do progresso.
  • Não foi feita alteração no pacote do Loop nesta execução.

Plano de correção

  1. Identificar todos os caminhos de saída do comando progress (ansi, plain, json e --once).
  2. Detectar encoding de stdout/stderr de forma portável no Windows.
  3. Preferir UTF-8 reconfigurável quando seguro e aplicar fallback ASCII/escape quando a codificação não aceitar os símbolos.
  4. Garantir que erro de renderização nunca esconda o estado persistido nem derrube o processo.
  5. Adicionar testes unitários parametrizados para cp1252, UTF-8 e stream não reconfigurável.
  6. Adicionar smoke test Windows para progress --run com caracteres de fase/estado.
  7. Documentar o comportamento e incluir receipt do comando em modo --json/plain.

Critérios de aceite

  • simplicio-loop progress --run <id> retorna exit 0 em PowerShell/cp1252 quando o run/state é válido.
  • A saída Unicode é preservada em terminal UTF-8.
  • Em cp1252 ou stream incompatível, existe fallback determinístico sem UnicodeEncodeError.
  • --fmt json produz JSON válido e não contém texto ANSI.
  • --once e modo contínuo cobrem o mesmo estado sem exceções de encoding.
  • Testes cobrem cp1252, UTF-8, ASCII, stream sem reconfigure e símbolos fora de cp1252.
  • O comando continua reportando phase, next_action, receipts, blockers e completion tag.
  • O fix não altera o state machine nem permite declarar verified sem receipt.
  • CI Windows executa o smoke test e registra comando, exit code e tail da saída.
  • PR inclui link desta issue, teste focado e evidência em ambiente Windows.

Relações

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingwindows

    Projects

    Status
    In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions