- Rust 95.5%
- Shell 4.5%
|
All checks were successful
ci/woodpecker/push/pipelines Pipeline was successful
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 |
||
|---|---|---|
| .cargo | ||
| .githooks | ||
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| .mutants-teto | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
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.