ChaosSQL

Interface

Manual Completo da CLI, Subcomandos & Flags

Guia definitivo de uso da interface de linha de comando do ChaosSQL: subcomandos, parâmetros posicionais, códigos de saída e a tabela de flags de execução e exportação.

Arquitetura e Filosofia da CLI

A interface de linha de comando do ChaosSQL foi projetada para engenheiros de sistemas que exigem feedback rápido, controle granular e integração transparente com scripts de automação e pipelines de CI/CD. Baseada na biblioteca Cobra e formatada pelo framework Lipgloss, a CLI oferece saída rica em terminal ANSI, cores tonais suaves do Design System do Studio Bregalda e geração de relatórios padronizados (SARIF, JUnit, HTML, OTEL, Mermaid).

Flags de Execução e Exportação

Flags aceitas por run e demo. --seed, --workers, --iterations e --fail-on valem só para o run; as três primeiras sobrescrevem os valores da spec. O jitter é definido na spec (engine.jitter_ms); o proxy tem flags próprias de jitter, barreira de commit e profundidade PCT (chaossql proxy --help). Os demais subcomandos documentam suas flags abaixo.

Flag Tipo Padrão Subcomandos Descrição
--seed uint64 0 (lê a spec) run Semente determinística do PRNG. Sobrescreve engine.seed; a mesma spec com a mesma semente repete o mesmo agendamento.
--workers int 0 (lê a spec) run Número de goroutines workers concorrentes. Sobrescreve a spec.
--iterations int 0 (lê a spec) run Total de operações a executar. Sobrescreve a spec.
--driver string "" (lê a spec) run, demo Driver do banco: sqlite, postgres, mysql ou mock. Trocar de motor descarta o DSN da spec; um nível de isolamento da spec que o motor não suporta cai para o padrão dele, com um aviso.
--dsn string "" (lê a spec) run, demo String de conexão do banco. Sobrescreve a spec.
--isolation string "" (lê a spec) run, demo READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ ou SERIALIZABLE (read-committed também funciona). O SQLite só oferece SERIALIZABLE, o padrão, que executa as transações uma de cada vez, e READ_UNCOMMITTED.
--fail-on string violation run O que retorna 1: violation (qualquer violação de invariante), regression (só uma regressão do ChaosSQL Cloud contra a baseline da branch padrão; exige --cloud-token) ou never.
--json bool false run, demo Imprime o resultado como JSON estruturado no stdout.
--export-repro bool false run, demo Grava a reprodução mínima como um teste Go independente (repro_test.go).
--export-mermaid bool false run, demo Grava o diagrama de sequência da execução em Mermaid (trace.mermaid).
--export-html path "" run, demo Grava um relatório HTML interativo independente.
--export-otel path "" run, demo Grava o trace da execução em OpenTelemetry OTLP JSON.
--export-junit path "" run, demo Grava o resultado em JUnit XML. Uma violação aparece como falha de teste.
--export-summary path "" run, demo Grava um GitHub Step Summary em Markdown.
--export-sarif path "" run, demo Grava os achados em OASIS SARIF 2.1.0 para o GitHub Code Scanning.
--export-result path "" run, demo Grava um artefato JSON versionado que o chaossql replay --verify consegue reexecutar.
--ui bool false run, demo Abre o visualizador local de traces após a execução.
--cloud-token string $CHAOSSQL_CLOUD_TOKEN run, demo Token da API do ChaosSQL Cloud. Quando definido, a execução é publicada no Cloud.
--cloud-url string $CHAOSSQL_CLOUD_URL run, demo URL base da API do ChaosSQL Cloud.
--cloud-fail-fast bool false run, demo Faz o comando falhar quando a publicação no Cloud falha, em vez de apenas registrar o erro.
--github-token string $GITHUB_TOKEN run, demo Token do GitHub usado para publicar o comentário no pull request.
--pr-comment bool true run, demo Publica o relatório de concorrência como comentário no pull request quando roda no CI.

Referência dos Subcomandos

Os subcomandos mais usados estão abaixo. proxy, engine, swarm, mutate e server são cobertos em seus próprios capítulos ou com chaossql <comando> --help.

1. chaossql run <chaos.yaml>

Executa a bateria de testes de concorrência contra o arquivo de especificação informado:

# Execução padrão
chaossql run specs/banking_lost_update.yaml

# Execução com override de semente, workers e geração completa de relatórios
chaossql run specs/banking_lost_update.yaml \
  --seed=42 \
  --workers=8 \
  --iterations=50 \
  --export-sarif=reports/audit.sarif \
  --export-html=reports/report.html \
  --export-junit=reports/junit.xml \
  --export-repro \
  --ui

2. chaossql demo [cenário]

Executa uma das 10 demonstrações embutidas de anomalias de concorrência com terminal visual e delta-debugging:

chaossql demo banking       # P4 Lost Update
chaossql demo inventory     # A3 Inventory Oversell
chaossql demo hospital      # A5B Hospital Write Skew
chaossql demo financial     # A5A Financial Read Skew
chaossql demo auction       # G0 Auction Dirty Write
chaossql demo crypto        # G1c Circular Information Flow
chaossql demo flash_crash   # G1a Flash Crash Dirty Read
chaossql demo ticket        # G2 Anti-Dependency Cycle
chaossql demo deadlock      # G-DL Mutual Lock Deadlock
chaossql demo fk            # Foreign Key Cascade Deadlock

3. chaossql ui <trace.json>

Inicializa o servidor HTTP local para inspecionar um trace gravado previamente:

chaossql ui trace_dump.json --port=8090 --no-open
  • --port int: Porta do servidor HTTP local (padrão 8090).
  • --no-open bool: Não abre automaticamente o navegador padrão do sistema.

4. chaossql diff <spec.yaml>

Executa fuzzing diferencial cruzado comparando o comportamento de dois motores distintos com o mesmo workload e semente:

chaossql diff specs/lost_update.yaml \
  --driver-a=sqlite --dsn-a=":memory:" \
  --driver-b=postgres --dsn-b="postgres://user:pass@localhost:5432/testdb" \
  --seed=42

Cada motor roda no nível de isolamento da spec quando o suporta, e no próprio padrão caso contrário (o resumo informa). --fail-on-divergence retorna 1 quando os motores divergem; o chaossql swarm aceita a mesma flag.

5. chaossql replay <result.json>

Exibe o swimlane cronológico de eventos com marcações de microssegundos no terminal:

chaossql replay result.json --max-events=100

6. chaossql bench

Executa microbenchmarks de vazão do PRNG determinístico e do detector de ciclos Adya:

chaossql bench --duration=3s --workers=8 --json

A vazão depende da máquina; rode no seu próprio hardware e compare os resultados ao longo do tempo, não contra um número publicado.

7. chaossql validate <chaos.yaml>

Linter estático que valida o esquema YAML, compila expressões dinâmicas de invariantes e verifica integridade referencial dos scripts SQL antes da execução:

chaossql validate specs/hospital_write_skew.yaml

8. chaossql init <caminho>

Gera o scaffolding inicial de um novo cenário com arquivos pré-configurados:

chaossql init novo_cenario --driver=postgres --name=auditoria_saldo --force

9. chaossql matrix

Gera uma matriz empírica completa baseada na taxonomia Hermitage (Martin Kleppmann), testando o banco alvo contra todas as 9 anomalias formais:

chaossql matrix --driver=postgres --dsn="postgres://user:pass@localhost:5432/testdb" --markdown

Códigos de Retorno do Processo (Exit Codes)

  • 0: Nada para reprovar. Todas as invariantes se mantiveram, ou o --fail-on não selecionou o achado (--fail-on never; o demo sempre retorna 0, porque mostrar o bug é o papel dele).
  • 1: Achado. Uma invariante foi violada (o padrão, --fail-on violation), o ChaosSQL Cloud apontou uma regressão (--fail-on regression), ou os motores divergiram com --fail-on-divergence (diff, swarm). Todos os relatórios pedidos são gravados antes.
  • 2: Sem resposta confiável. Flags ou spec inválidas, falha de conexão do driver, erro de execução, execução encerrada como inconclusiva ou cancelada, ou --fail-on regression sem veredito do Cloud.

Assim, uma violação reprova o job de CI sozinha, e a GitHub Action reprova o step (input fail-on, padrão violation). Para reprovar só problemas novos enquanto os conhecidos são corrigidos, use --fail-on regression com o ChaosSQL Cloud, que compara cada pull request com a branch padrão.