Seshat

Contrato de UI

Este contrato define a saida humana do Seshat Rust. O modo JSON e tratado separadamente em 018-json-mode-contract.md.

Modos

  • Non-TTY: saida simples, previsivel e sem ANSI por padrao.
  • TTY: pode usar ANSI e molduras ASCII para destacar mensagens.
  • Rich forcado: ui.force_rich: true em .seshat ou FORCE_COLOR=1, CLICOLOR_FORCE=1, SESHAT_FORCE_COLOR=1.
  • Rich desativado: ui.force_rich: false desativa a renderizacao rica mesmo em TTY.
  • NO_COLOR desativa rich automatico, mas nao sobrepoe ui.force_rich: true.

Configuracao .seshat

ui:
  force_rich: false
  icons:
    info: "[info]"
    success: "[ok]"
    warning: "[warn]"
    error: "[err]"
    step: ">"

Suporte atual:

  • force_rich: aplicado em commit, fix e flow.
  • icons: aplicado quando rich esta ativo.
  • theme: reservado para evolucao futura; o Rust usa uma paleta ANSI interna por enquanto.

Componentes

ComponenteNon-TTYRich
titletitulo e subtitulo em linhas simplespainel ASCII colorido
sectionlinha em branco + titulolinha em branco + titulo colorido
step> mensagemicone configuravel + cor neutra
infomensagem simplesicone configuravel + cor informativa
successmensagem simplesicone configuravel + verde
warningAviso: mensagem em stderricone configuravel + amarelo em stderr
errormensagem em stderricone configuravel + vermelho em stderr
summarytitulo + pares chave: valormesmo contrato textual; pode receber rich futuramente
tabletitulo, cabecalho e linhas separadas por barras verticaismesmo contrato textual
file_listtitulo com contagem e itensmesmo contrato textual
result_bannertitulo + statspainel ASCII colorido
statusno-op visualatualizacoes simples coloridas
progressno-op visuallinhas [atual/total] mensagem
render_tool_outputtexto da ferramenta intactoprefixo visual por status
display_code_reviewtexto de review intactopainel ASCII colorido

Status de ferramentas

render_tool_output usa status textuais no prefixo:

  • success: verde
  • warning: amarelo
  • error: vermelho
  • skipped: cinza escuro RGB 108,108,108 (\x1b[38;2;108;108;108m)

O status skipped e usado quando o runner nao encontra arquivos relevantes para o check atual, por exemplo:

[skipped] cargo-test (test) - Nenhum arquivo relevante para test

Garantias

  • Saida non-TTY nao usa ANSI sem configuracao explicita.
  • warning escreve em stderr.
  • error escreve em stderr.
  • render_tool_output em non-TTY preserva exatamente o texto recebido.
  • summary, table, file_list e result_banner tem formatação testada por unidade.

Decisao de implementacao

Nao foi adicionada dependencia como rich, console ou owo-colors. O Rust usa uma abstracao propria pequena para manter estabilidade de output e reduzir risco nesta etapa da migracao.