Antes de tudo: leia
CLAUDE.md(arquitetura) eAKITA_RULES.md(constituição). Este projeto opera 100% sob SDD (Spec-Driven Development) + Protocolo AKITA. Sem spec, sem trabalho. Sem harness, sem spec. Sem exceção.
- Existe spec aprovada? Se não → cria spec primeiro em
specs/<categoria>/SPEC-XXX-<nome>.mdusando o gerador correto emspecs/generators/. - Existe harness no mesmo PR? (Regra 0) Toda spec entrega um teste/script executável que valida o que afirma. Se a spec diz "X passa Y", existe
tests/specs/SPEC-XXX.test.js(ou equivalente) que prova. - CI verde local?
npm run lint && npm test && npm run build
Se as 3 são "sim" → abre PR. Senão → não abre.
# 1. SDD gate
spec-check.sh "minha feature X"
# exit 1 → escreve spec usando specs/generators/code.md
# exit 0 → segue
# 2. Branch por SPEC
git checkout -b spec/SPEC-XXX-nome-curto
# 3. Implementa + harness
# - Código em src/engine/ (zero React) ou src/components/ (zero lógica)
# - Harness em tests/specs/SPEC-XXX.test.js
# 4. Gates locais (Mandamento #6)
npm run lint
npm test
npm run build
# 5. Commit Akita
git commit -m "AKITA-XXX: SPEC-XXX — descrição curta"
# (pre-commit hook valida format)
# 6. PR linkado à SPEC, com checklist preenchido
gh pr create# 1. Issue
gh issue create --template bug_report.md
# Cria BUG-XXX
# 2. Branch
git checkout -b bug/BUG-XXX
# 3. Regression test PRIMEIRO (red)
# tests/regression/BUG-XXX.test.js
# 4. Fix (green)
# 5. Atualiza BUGS.md (entry com arquivo + fix + teste)
# 6. PR linkado à issue (Closes #N)
# Os 3 artefatos têm que estar presentes ou PR é rejeitado:
# - Issue BUG-XXX
# - tests/regression/BUG-XXX.test.js
# - Fix em código + entrada no BUGS.mdAtalho:
npm run bug:full # Akita workflow runner (scripts/debug-bug.sh)- Refactors maiores moram em
specs/refactor/SPEC-XXX-*.md. - Sem mudança de comportamento → testes existentes devem continuar passando.
- Golden master (
tests/characterization/engine-golden.test.js) é o oráculo: se quebra, ou o refactor está errado, ou foi mudança intencional e precisa regenerar golden + justificar na PR.
- Zero React. Sem
useState,useEffect, sem DOM, semwindow. - OOP onde faz sentido. Entidades complexas (torneios, sistemas) são classes. Arrays soltos só para listas simples.
- Headless rodável.
npx tsx src/engine/simulate_season.jsdeve simular temporada inteira sem browser. - RNG determinístico. Tudo aleatório passa por
src/engine/rng.jscom seed. Reprodutibilidade > "ah é random".
- Read-only. Componente lê do
GameContexte desenha. Zero cálculo de tabela, OVR, partida. - Bridge é
src/context/. Engine fala com React via context, nunca direto.
- Arquivos:
PascalCase.jspara classes/sistemas,camelCase.jspara utilitários. - Specs:
SPEC-XXX-kebab-case.md. XXX = ID único, sequencial por área. - Bugs:
BUG-XXX. - Commits:
AKITA-XXX: SPEC-XXX|BUG-XXX — descrição(pre-commit hook valida).
Já vem no template .github/PULL_REQUEST_TEMPLATE.md. Linha mestre:
- SPEC-XXX ou BUG-XXX linkado
- Harness no mesmo PR (Regra 0)
-
npm run lint0 erros -
npm testpassa -
npm run build0 erros -
BUGS.md/CHANGELOG.mdatualizados quando relevante - Forbidden cases da spec não introduzidos
- Abrir PR sem spec linkada ("vou criar a spec depois" — não cria).
- Spec sem harness ("os testes vêm na próxima PR" — Regra 0 proíbe).
- Mexer em
src/engine/importando React. - Calcular tabela / OVR / partida em componente React.
- Mergear com testes vermelhos ou build quebrado.
- Pull
--rebasesobre commits compartilhados sem alinhar com o owner. - Usar
https://api.anthropic.comcom API key em qualquer script (Mandamento #7). - Adicionar dep nova sem registrar em
CLAUDE.mde justificar na PR.
- Arquitetura:
CLAUDE.md - Mandamentos:
AKITA_RULES.md - SDD:
specs/SPEC-RULES.md - SDD vivo (o que está implementado):
docs/SDD_OléFUT_RPG.md - Bug aberto:
BUGS.md - Roadmap:
specs/ROADMAP-NARRATIVE-MASTER.md
Owner: Dudu — dudujarra@corapost.com