AUR-586: tutoriais e aceites sem valores volateis nem copias enumeradas
Medido antes
docs/tutorials/operacao.mdedemo/tutoriais/operacao/out/entrega-e-evidencia.logtraziamboard valid: 585 atomic cards;dados-de-analise.mde oout/traziamanalysis_data.tag: analysis-data/20261002T134230Z,generated_at: 2026-10-02T13:42:30Zeis 30.0 days old. Outro dia ou outro estado do board divergia de AUR-563/564 (blocos == demo).tut_checkso faziagrep -Fdeexpected/emout/(nao exigia queout/viesse da imagem desta arvore) etut_imagereaproveitavaaurum-tutoriais:localde qualquer arvore.- Os oito aceites (430, 432, 434, 435, 459, 461, 467, 475) copiavam pacotes enumerados
(
internal/documentation/*,cmd/regenerate-docs,internal/pipelinenao existem mais) eAUR-430/432/467tinham alvo de mutacao quebrado por uma troca em massa deinternal/review/reviewer.gopor uma lista de cinco arquivos.
O que mudou
demo/tutoriais/_lib/normaliza.sed(novo): regrassed -Eque reduzem os valores volateis a forma:board valid: <N> atomic cards,analysis-data/<timestamp>,<timestamp>,is <duracao> days old,idade: <duracao>.tut_checknormalizaout/com elas antes dogrep -F; AUR-563/564 AC-002 fazem o mesmo antes de comparar os blocos do texto. Um valor fora da forma (board valid: abc atomic cards) nao e normalizado e reprova. Documentado em_lib/tutorial.sh,demo/tutoriais/README.mdedocs/tutorials/README.md._lib/tutorial.sh:TUT_TREE= sha256 dego.mod,go.sume dos arquivos de producao (sem*_test.go) decmd internal pkg, so por sha256 de arquivos (sem git e sem docker: o mesmo valor no host e no container selado; ogit ls-filesfoi descartado porque o container selado nao tem git). ODockerfilenao e materializado no container selado (nao esta empathsnemread_pathsdos cards 561..564 e 586), entao fica fora deTUT_TREEe entra emTUT_DOCKERFILE, conferido sempre que o arquivo existe (no host). A tag da imagem eaurum-tutoriais:<12 hex de sha256(TUT_TREE+TUT_DOCKERFILE)>(AURUMCODE_TUT_IMAGEcontinua sobrescrevendo). Cada execucao gravaout/.imagem(tree=,dockerfile=eimage=comdocker image inspect --format '{{.Id}}').--checkfalha com motivo quandoout/.imagemfalta ("out/.imagem ausente") ou foi gravado por outra arvore ("outra arvore"); com docker e a imagem local o digest tambem precisa bater ("imagem conferida"); sem docker so a arvore e conferida ("imagem nao conferida (sem docker)").expected/e blocos deoperacao.mdedados-de-analise.mdagora usam a forma. Os 15 tutoriais foram reexecutados (run.sh all) com a imagem desta arvore eout/.imagemesta versionado. Transparencia: depois dos 15run.sh all, a formula da identidade mudou (Dockerfile saiu detree, ver acima) e os 15out/.imagemforam regravados por script a partir da mesma imagem (image=sha256:4ad57c18...real, fontes identicas), sem reexecutar os casos; o proximorun.sh allregrava cada um normalmente.- Os aceites 563/564 passam a normalizar o
out/antes de comparar os blocos. AUR-586.sh: AC-001..004 e MUT-001/002.
Decisao por aceite (430, 432, 434, 435, 459, 461, 467, 475)
Todos passaram a copiar cmd internal pkg go.mod go.sum inteiros (459 ja o fazia). Cada um foi
rodado no container (go-shared, em serie, todos os seletores).
| Aceite | Resultado com a copia inteira | Decisao |
|---|---|---|
| AUR-430 | todos os seletores 0, apos consertar o alvo da mutacao (reviewer.go; a mutacao agora zera result.Issues antes de applyGates e a asserção olha a mensagem e [error], porque o relatorio sempre lista os arquivos tocados) |
mantido, verde |
| AUR-432 | AC-001 published-format-drifted; Test e Integration vermelhos |
aposentado (exit 69) |
| AUR-434 | AC-001 behavior-missing (gate de escopo/evidencia descarta os achados da fixture); Test e Integration vermelhos |
aposentado (exit 69) |
| AUR-435 | AC-001 base-quality-missing; Integration vermelho |
aposentado (exit 69) |
| AUR-459 | AC-001, Test, Integration e E2E vermelhos (enumeracao ja corrigida antes; o vermelho e de comportamento) | aposentado (exit 69) |
| AUR-461 | Test (TemplateCitesOnlyRealRules) e Integration (EveryOfferedRuleSurvivesTheGate) vermelhos |
aposentado (exit 69) |
| AUR-467 | AC-001, Test, Integration, E2E, MUT-001 e MUT-002 0 | mantido, verde |
| AUR-475 | Integration (ArithmeticConsistencyAcrossBudgets) vermelho |
aposentado (exit 69) |
Aposentar e explicito (modelo AUR-309): imprime o motivo e sai 69; nao e passe nem rejeicao funcional. Reescreve-los seria reescrever o comportamento que provaram, fora do escopo.
Prova de cada AC e MUT
Veja a secao "Execucao real" abaixo: cada comando e a ultima linha real.
Fora do escopo deste card
O workflow noturno (.github) nao e path deste card: AUR-563 e AUR-564 devem entrar nele (AUR-583/584
ou o proximo card de CI). Como out/.imagem depende dos fontes de cmd internal pkg, todo card que
altera o produto precisa reexecutar os tutoriais (run.sh all) para o --check voltar a passar:
isso e o comportamento pedido (a prova nao envelhece em silencio).
Execucao real
Execucao real no HOST (docker, imagem aurum-tutoriais:bf5c6ca887c0, tag derivada da arvore;
AURUMCODE_TUT_REBUILD=1 no primeiro revisao; os demais com a imagem ja construida desta
arvore): run.sh all de revisao, operacao, dados-de-analise, gate, skills, politica-central,
qualquer-linguagem, excecoes, auditoria-sarif, reaproveitamento, sast, xbom, assinatura, benchmark
e sbom-dependency-track, todos com exit 0. Depois, bash demo/tutoriais/<t>/run.sh --check nos 15:
imagem conferida: aurum-tutoriais:bf5c6ca887c0 sha256:4ad57c18... (arvore 9844a95730d3)
CHECK OK
(operacao, dados-de-analise, gate e revisao incluidos; o out/.imagem de cada um esta
versionado: tree=9844a957... e image=sha256:4ad57c18....)
Execucao real no container (go-shared exec, em serie, cwd no worktree):
AUR-561 all rc=0 AUR-561/AC-002-MUT-001/ok (sem a linha que prova o caso, --check diverge em todos os casos)
AUR-562 all rc=0 AUR-562/AC-002-MUT-001/ok (sem a linha que prova o caso, --check diverge em todos os casos)
AUR-563 all rc=0 AUR-563/AC-002-MUT-001/ok (sem a linha que prova o caso, --check diverge em todos os casos)
AUR-564 all rc=0 AUR-564/AC-002-MUT-001/ok (sem a linha que prova o caso, --check diverge em todos os casos)
AUR-586 all rc=0 AUR-586/all/pass
No container nao ha docker: o --check imprime imagem nao conferida (sem docker) e confere a
arvore. Aceites 430 e 467 no container: AUR-430.sh (AC-001, TestAUR430, IntegrationAUR430,
E2EAUR430, AC-001-MUT-001) e AUR-467.sh (AC-001, Test, Integration, E2E, MUT-001, AC-003-MUT-002)
saem 0; os demais, como na tabela acima.
Prova por criterio (AUR-586.sh):
- AC-001:
AUR-586/AC-001/ok (563 e 564 AC-002 verdes com outro N e outra data; valor fora da forma reprova). A copia selada temboard valid: 4242 atomic cards, taganalysis-data/20310101T000000Z,2031-01-01T00:00:00Zeis 11.5 days oldnoout/;board valid: abc atomic cardsreprova 564. - AC-002:
AUR-586/AC-002/ok (...): semout/.imagema saida dizout/.imagem ausente; comtree=zerado dizoutra arvore; alterarcmd/aurumcode/main.gona copia tambem reprova; o gravado passa. - AC-003:
AUR-586/AC-003/ok (os oito aceites: 6 aposentados com motivo, ...); a execucao de cada um no container esta na tabela acima. - AC-004:
AUR-586/AC-004/ok (nenhum expected/ nem bloco de saida com data, tag gerada ou contagem do board literais). - MUT-001:
AUR-586/MUT-001/rejected(literalboard valid: 585de volta emoperacao.mdreprova AC-004 e AUR-564 AC-002). - MUT-002:
AUR-586/MUT-002/rejected(tut_check_imagemdesligado: o--checkpassa semout/.imageme a sonda fica vermelha).
bash scripts/docs/build.sh: 0 warnings.
Selado: .board/bin/oci-run --profile go-unit-offline-v1 --card AUR-586 com cwd no worktree: exit_code 0, AUR-586/all/pass (o selado nao materializa o Dockerfile nem todo demo/: por isso a identidade da arvore exclui o Dockerfile e o clone do aceite copia so demo/tutoriais).