No description
  • Rust 95.5%
  • Shell 4.5%
Find a file
Jonatas Oliveira 70e68e3544
All checks were successful
ci/woodpecker/push/pipelines Pipeline was successful
fix(hooks): reprovar quando o teste de mutação não gera mutante nenhum
Um teto sobre zero mutantes aprova sem medir. Foi o que aconteceu no
battleship-client: as exclusões do .cargo/mutants.toml cobriam o crate
inteiro, o cargo-mutants dizia "Found 0 mutants" e a checagem imprimia
`sobreviventes=0 teto=0` -- que se lê como perfeição e significa silêncio.
O hook levava 2 segundos e não verificava nada.

Agora, se a soma de caught, missed, unviable e timeout for zero, a etapa
falha e diz o que fazer: encolher as exclusões ou remover o
.mutants-teto. Um portão que aprova sem medir é pior do que portão
nenhum, porque dá a impressão de cobertura que não existe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PhdPjHUuVhXaitwT4mG53t
2026-09-08 07:01:31 +02:00
.cargo ci: give this crate a pipeline of its own 2026-09-03 13:28:26 +02:00
.githooks fix(hooks): reprovar quando o teste de mutação não gera mutante nenhum 2026-09-08 07:01:31 +02:00
.woodpecker ci: tirar a mutação do pipeline e rodar o CI inteiro no pre-commit 2026-09-05 07:47:06 +02:00
src test: guard the terrain and movement code, and record its ceiling 2026-09-02 11:29:43 +02:00
tests test: guard the terrain and movement code, and record its ceiling 2026-09-02 11:29:43 +02:00
.gitignore ci: give this crate a pipeline of its own 2026-09-03 13:28:26 +02:00
.mutants-teto test: guard the terrain and movement code, and record its ceiling 2026-09-02 11:29:43 +02:00
Cargo.toml ci: give this crate a pipeline of its own 2026-09-03 13:28:26 +02:00
LICENSE build: inherit package metadata from the workspace 2026-09-01 22:20:49 +02:00
README.md ci: tirar a mutação do pipeline e rodar o CI inteiro no pre-commit 2026-09-05 07:47:06 +02:00

tatic_lib

As regras do RPG ASCII Tático: tabuleiro, ações, condição de vitória, pathfinding e IA.

É a fonte única da verdade do jogo — o servidor e o cliente dependem dela para concordar sobre o que aconteceu no tabuleiro, e nenhum dos dois reimplementa regra nenhuma.

cargo test
cargo test --test spider   # propriedades (proptest)
cargo mutants              # teto de sobreviventes em .mutants-teto

tests/spider é onde moram as leis do domínio: ir e voltar é a identidade, a distância de Manhattan é uma métrica, todo caminho do BFS é contíguo e mínimo, e nenhuma sequência de ações faz unidade aparecer do nada. tests/mutantes existe porque o cargo mutants apontou defeitos que a suíte não percebia — os limites de Coord::orthogonal_neighbors, chamada por todo lado mas com os vizinhos das bordas nunca conferidos.

Onde ele se encaixa

Este repositório contém só a biblioteca e é compilável sozinho. Ele também entra como submódulo no repositório tactic, que junta os três crates num workspace — é lá que se roda o jogo inteiro.

Verificações antes do commit

O .githooks/pre-commit roda aqui o que o Woodpecker roda no servidor. Ele é gerado a partir do .woodpecker/pipelines.yml deste repositório, então os comandos não podem divergir do CI. Ative uma vez por clone -- o hook é versionado, a configuração que aponta para ele não é:

git config core.hooksPath .githooks

Roda tudo a cada git commit, do mais barato ao mais caro, e para no primeiro que falhar: lint do pipeline, cargo fmt --check, clippy com -D warnings, build, testes, cobertura (piso 95%) e auditoria de dependências.

O teste de mutação só existe aqui. Ele saiu do pipeline: mutação recompila o crate uma vez por mutante, e no runner isso eram dezenas de minutos por push, num passo que ninguém acompanha enquanto espera. O teto continua em .mutants-teto, versionado -- a regra não afrouxou, mudou de lugar. É de longe a etapa mais lenta; para pular só ela:

PRE_COMMIT_SEM_MUTACAO=1 git commit ...

Para pular tudo, git commit --no-verify. Um hook que não se pode pular é um hook que todo mundo desativa.

Licença

GPL-3.0-or-later. Veja LICENSE.