Pular para conteúdo

Desenvolvimento e QA

Todo Go roda em container:

make build
make test
make test-race
make lint

O alvo lint verifica formatação de todo o repositório; existem fixtures históricas não formatadas. Confira os arquivos apontados antes de fazer uma reescrita em massa.

Site de documentação

O site de documentação é gerado por MkDocs Material em container, numa imagem fixada por digest (scripts/docs/build.sh, com --strict). A publicação usa o workflow docs.yml, a partir de main, sem branch extra e sem regeneração via LLM. O guia interativo antigo continua em docs/site/, apenas como arquivo.

A verificação de navegador em container cobre desktop, mobile, links locais, geração de configuração, cópia para clipboard e carregamento do workflow:

docker run --rm --ipc=host \
  -v "$PWD:/src:ro" -w /src \
  mcr.microsoft.com/playwright:v1.58.2-noble \
  sh -c 'npm install --prefix /tmp/qa playwright@1.58.2 && NODE_PATH=/tmp/qa/node_modules node tests/docs/site.test.cjs'

O exemplo baixável em docs/site/workflow.yml deve ser igual ao de .github/workflows/examples/code-review.yml.

Testes do agente

A suíte verifica montagem de prompts, contexto, parsing, filtros de achados e publicação com respostas controladas. Fixtures validam integração; não medem a precisão de um modelo real. A avaliação com LLM exige PRs de código e análise dos resultados entre rodadas.

TestPRJourneyCarriesConversationAndPublishesDeletionAtBase percorre três rodadas pela CLI de review: remoção de proteção, correção com resposta do autor e mudança em outro arquivo. Exercita os modos comments e review, captura o prompt real e os requests de publicação, verifica LEFT/numeração antiga e remoção de um segredo do histórico. O modelo é controlado: o teste prova o transporte da conversa e da resposta, não que um LLM sempre julgará corretamente.

Os testes do cliente verificam paginação, atribuição, cancelamento e falhas sem histórico parcial apresentado como completo. Links de paginação e redirects não podem encaminhar o token para outro destino. Os testes de escopo rejeitam linhas intactas, arquivo alheio e confusão entre numeração antiga e nova.

A próxima avaliação semântica deve repetir PRs rotulados com um modelo real e registrar falsos positivos, defeitos perdidos, repetição de cobranças e rodadas até encerramento. Ainda não há resultado medido que justifique afirmar redução de ruído do modelo em produção.

O histórico de aceitação da reconstrução permanece no board e em docs/specs. Não confunda scripts históricos com a suíte atual de produto.

QA no repositório consumidor (AUR-512)

O self-review deste repositório não prova o produto instalado. O QA do consumidor roda o AurumCode, pinado por SHA, num repositório separado, com a imagem real, PRs de código e falhas observáveis. Os cenários estão em tests/consumer/cenarios.json:

Cenário O que prova
comments-inline Workflow reutilizável, modo comments, parecer em português, comentário na linha do achado bloqueante, gate reprovando; o commit de correção limpa o bloqueio. A sugestão aplicável (bloco suggestion) é medida, não exigida (AUR-617).
review-formal O mesmo no modo review.
acao-direta Action direta pinada, status aurumcode/review igual ao resultado.
modelo-ausente, modelo-inconclusivo Sem credencial ou com o modelo inalcançável a revisão falha fechada, com diagnóstico.
sem-permissao Token só de leitura: a publicação falha e o diagnóstico diz permissão.
ci-falhando O CI do consumidor falha e o parecer cita a falha concluída.
pr-de-fork Manual (precisa de uma segunda conta): sem secrets, falha fechada; a configuração vem da base. Sem evidência fornecida, fica nao_medido.
changelog-ausente, changelog-valido O changelog obrigatório bloqueia a PR sem entrada e passa a entrada válida.
rodada-repetida Rodar de novo no mesmo SHA não multiplica os comentários.

Preparação, uma vez: a main do consumidor recebe, por PR, o conteúdo de tests/consumer/fixtures/base (config com review.language: pt-BR, gate e changelog_check.mode: required), os secrets LLM_API_KEY e LLM_BASE_URL e a variável LLM_MODEL (a mesma do repositório do AurumCode). Cadastre os secrets num terminal interativo: gh secret set LLM_API_KEY --repo OWNER/CONSUMIDOR pede o valor sem mostrá-lo; rodado sem terminal (um atalho de agente, um script com a entrada fechada), o gh grava um valor vazio e o job de revisão para em "AurumCode sem provedor de modelo" em toda PR. A main não pode ter outro workflow do AurumCode além do que o QA instala por PR (um code-review.yml antigo apareceria na medição como job review).

Rodada, no host do dono (git, gh autenticado e jq; nenhum Go):

tests/consumer/run.sh --repo OWNER/CONSUMIDOR --sha <SHA completo do AurumCode> --evidencia qa-evidencia

O script cria uma branch e uma PR por cenário, instala o workflow do cenário com o SHA sob teste, commita com a identidade git já configurada (nunca define uma), espera o run, coleta status, checks, comentários, review, sugestões inline e o log de falha e grava qa-evidencia/<cenario>.json com repo, SHA, id e URL do run. Run que não conclui (billing, fila) vira "medido": false com a limitação. Depois, no container:

.board/bin/go-shared up
.board/bin/go-shared exec -w "$PWD" env AURUMCODE_QA_EVIDENCIA="$PWD/qa-evidencia" go test ./tests/consumer -count=1 -run TestAUR512

O verificador reprova evidência sem repo, SHA ou run, cenário negativo que passou (um produto sem o gate de changelog ou de qualidade) e rodada repetida que dobrou comentários; nao_medido nunca conta como aprovado. O site só cita resultado de uma evidência dessas, com repo, SHA e run.