AUR-561: tutoriais executáveis de revisão, skills de convenção e política central
O que entrega
demo/tutoriais/_lib/tutorial.sh: framework comum (fases,out/<caso>.log,--checkporgrep -Fde cada linha deexpected/<caso>.txt, imagem do produto por Dockerfile, provedor falsoAURUMCODE_LLM_FIXTURE,--network none, repositórios descartáveis em.estado/). Como criar um tutorial novo:demo/tutoriais/README.md(para os cards 562 a 564).- Três tutoriais em
docs/tutorials/(pt-BR), com índice emdocs/tutorials/README.md, e as demonstrações emdemo/tutoriais/<tutorial>/(run.shcom uma fase por caso,expected/,out/da última execução real). tests/acceptance/AUR-561.sh:all,AC-001..AC-004,AC-002-MUT-001; seletor desconhecido sai 64.
Decisões
- O produto, não um simulacro. Cada caso roda
/app/aurumcodeda imagem construída doDockerfileda raiz, sem rede, com o provedor falso. A fase de PR é conferência do workflow, não revisão de PR (ver "Limites"). - Blocos literais. O texto marca
<!-- arquivo: PATH -->antes do bloco; o aceite compara byte a byte. Saídas esperadas marcam<!-- saida: caso -->; cada linha do bloco tem de existir emout/<caso>.log(AC-002). - Saída copiada, não escrita.
expected/guarda só linhas que provam o caso; o texto só mostra linhas presentes noout/. .gitignore. O.gitignoreda raiz ignora*.log;demo/tutoriais/.gitignorereabreout/para os tutoriais (oout/é evidência versionada).- Texto de rede omitido, declaradamente. Só em
politica-central/analysis-data, o detalhe do erro de rede (varia por ambiente) é trocado por<detalhe de rede omitido do registro>porTUT_SED, documentado norun.sh.
Achados sobre o produto (honestidade do tutorial)
- Seleção por linguagem e apelidos não estão ligados ao
review..aurumcode/skills/<nome>/SKILL.mdcomlanguages: [...](internal/context/skills, AUR-468/AUR-559) é biblioteca: só testes (tests/unit/AUR-468.go,internal/context/skills/aur559_test.go) chamamskills.Providers. A CLI usareview.context.skills(lista explícita) e.aurumcode/instructions/*.mdcomapplyTo(escopo por caminho). O tutorial de skills prova o negativo (selecao-por-linguagem) e usa o escopo por caminho como seletor funcional. O bloco### Skill selection warnings(apelido desconhecido) só existe na biblioteca; teste que o cobre, rodado no go-shared nesta execução:TestAUR559AliasResolvesAndUnknownIsDeclaredPASS. - Skill ausente no repositório é aviso, não erro.
continuing without that context, e achados que citam os ids dessa skill são descartados; o parecer pode sairApprove. Na política central é erro de carga (exit 1). O tutorial registra isso. fiximprime um patch sem contexto (@@ -6,1 +6,1 @@):git applyexige--unidiff-zero(odocs/getting-started.mdmostragit applysem a flag).- Cobertura parcial sem gate sai 0 com veredito
Comment; só comgate.inconclusive: blockreprova (exit 1,partial_coverage). analysis_datadeclarado numa política faz o review consultar o GitHub: sem rede é inconclusivo (analysis_data_unavailable).
Limites
- Não há runner do GitHub nem servidor GitHub reutilizável fora dos testes Go
(os falsos de
cmd/aurumcode/*_test.gosãohttptestem Go); então o caso "revisão de PR" prova só a coerência do workflow do chamador com.github/workflows/review.yml(inputs, secrets, permissões,policy_*). Oreview --prnão é executado. AURUMCODE_PROMPT_CAPTURE(observação do prompt) é variável interna de observação, usada só para mostrar o que chegou ao modelo.AURUMCODE_CACHE_DIRnão é definido: o avisogate verdict reuse unavailableaparece nos logs e é esperado.
Entradas de nav (o coordenador acrescenta ao mkdocs.yml do AUR-560)
mkdocs.yml não existia neste worktree; não foi criado. Entradas sob a seção
Tutoriais:
nav:
- Tutoriais:
- Índice: tutorials/README.md
- Revisão de código: tutorials/revisao.md
- Skills de convenção: tutorials/skills.md
- Política central: tutorials/politica-central.md
(docs/tutorials/revisao.md, docs/tutorials/skills.md,
docs/tutorials/politica-central.md.) O AC-001 exige essas três entradas em
mkdocs.yml quando ele existir.
Execução real
Execução real, em container, com a imagem aurum-tutoriais:local construída do
Dockerfile do worktree (docker build -q -t aurum-tutoriais:local .), sem
rede e com o provedor falso. Comandos: bash demo/tutoriais/<t>/run.sh all
(os três terminaram com exit 0) e run.sh --check. A saída completa de cada
caso é demo/tutoriais/<t>/out/<caso>.log (551 linhas no total).
revisao
revisao/primeira-revisao: exit_code(s) 0; primeira revisao concluida sem achadosrevisao/sem-provedor: exit_code(s) 3; sem provedor, a analise deterministica achou o segredo e reprovourevisao/com-provedor: exit_code(s) 3; achado do modelo citando security/hardcoded-secret reprovourevisao/modelo-pondera(AUR-579): exit_code(s) 0; o relatorio mostra a origem ao lado da avaliacao do modelo (contestado e confirmado), sem gate nada muda de contagemrevisao/achado-refutado(AUR-603): exit_code(s) 0,3; refutado com citacao literal: o achado deixa de bloquear e fica marcado | citacao inexistente: a refutacao e descartada e o achado reprovarevisao/fix: exit_code(s) 0,1; fix imprimiu o patch (nada foi escrito no repositorio) | sugestao velha recusada, sem patchrevisao/pr-workflow: exit_code(s) n/a (conferencia, sem aurumcode)revisao/falha-nao-revisado: exit_code(s) 0,1; sem gate, exit 0 mas o veredito nao e Approve | com gate.inconclusive: block, cobertura parcial reprova
caso primeira-revisao: ok
caso sem-provedor: ok
caso com-provedor: ok
caso fix: ok
caso pr-workflow: ok
caso falha-nao-revisado: ok
CHECK OK
skills
skills/skill-do-repo: exit_code(s) 0; o achado cita a secao da skill como regra; sem gate o exit e 0skills/seletor-por-caminho: exit_code(s) 0; revisao feitaskills/selecao-por-linguagem: exit_code(s) 0; revisao feitaskills/repo-vs-politica: exit_code(s) 0,3; sob politica, a secao da skill do repo nao entra no gate | a secao da skill da politica reprovaskills/regra-citavel: exit_code(s) 3,3; o gate compara o MAIOR entre a severidade do modelo e a da secao | a secao nova ja e citavel e reprovaskills/falha-skill-inexistente: exit_code(s) 0,1; localmente a skill ausente e avisada e a revisao continua | politica com skill inexistente falha o comando
caso skill-do-repo: ok
caso seletor-por-caminho: ok
caso selecao-por-linguagem: ok
caso repo-vs-politica: ok
caso regra-citavel: ok
caso falha-skill-inexistente: ok
CHECK OK
politica-central
politica-central/politica-local: exit_code(s) 0,3; sem politica nao ha gate | a politica reprova o achado que cita a skill delapolitica-central/policy-repository: exit_code(s) n/a (conferencia, sem aurumcode)politica-central/precedencia-por-secao: exit_code(s) 0; revisao feita sob politicapolitica-central/analysis-data: exit_code(s) 0; analysis_data da politica indisponivel e inconclusivo (warn), nunca aprovadopolitica-central/repo-afrouxa: exit_code(s) 0,3; o gate do proprio repositorio aceita o warning | o repositorio nao consegue afrouxar o gate da politicapolitica-central/falha-politica-invalida: exit_code(s) 1; politica invalida falha antes de qualquer chamada ao modelo
caso politica-local: ok
caso policy-repository: ok
caso precedencia-por-secao: ok
caso analysis-data: ok
caso repo-afrouxa: ok
caso falha-politica-invalida: ok
CHECK OK
Aceite
bash tests/acceptance/AUR-561.sh all (offline; AC-003 usa .bin/aurumcode ou
go build no sandbox). Selecionadores: AC-001..AC-004, AC-002-MUT-001.
Selecionador desconhecido sai 64. Sealed: ./.board/bin/oci-run --profile
go-unit-offline-v1 --card AUR-561.
Revisão de rigor (pós-aprovação)
- Linhas
RESULTADO:/prompt:/conferências de workflow estão marcadas no texto como conclusão do script, com a condição testada. - Novos casos executados:
revisao/sem-provedorcom--exigir-qualidade(exit 1) e a ordem política-primeiro emskills/repo-vs-politica(prompt capturado). - Afirmações sem lastro marcadas "não demonstrado aqui" (
warninconclusivo, 403,supply_chainmantido). - O container roda com
--user "$(id -u):$(id -g)"(_lib/tutorial.sh); nada com dono root emout/. Osout/dos três tutoriais foram regravados com execução real.
Site (AUR-560 integrado)
git merge --no-ff main trouxe o site; o hook injeta a aba Tutoriais a partir de docs/tutorials/README.md e docs/tutorials/*.md (o mkdocs.yml não foi editado). bash scripts/docs/build.sh, exit 0, strict, 0 warnings; páginas geradas: tutorials/, tutorials/revisao/, tutorials/skills/, tutorials/politica-central/.
INFO - Cleaning site directory
INFO - Building documentation to directory: /docs/site
INFO - Documentation built in 2.95 seconds