Pular para conteúdo

AUR-614: POC em camadas e tutorial camadas

O que entrega

  • demo/do-zero: a POC "do zero" passa a nascer em três repositórios, um por time: security-policy (segurança: gate obrigatório, idioma, ignore, regra IA-001 e o lugar das exceções), devops-policy (engenharia: skills PAD-001 e QA-001 e os analistas padroes e qa) e o serviço assistente, cujo workflow aponta para os dois (policy_repository/policy_ref e standards_repository/standards_ref, fixados na SHA da main de cada um). Doze passos no roteiro guiado; o modo ia cria as duas camadas e prepara só o serviço, com o servidor MCP já recebendo AURUMCODE_POLICY e AURUMCODE_STANDARDS.
  • Modo mock: os três são repositórios bare em .estado/remotos/, servidos pelo GitHub falso de demo/tutoriais/_lib; a revisão da PR monta a main de cada repositório central fora da árvore do serviço (az_exporta_main) e deriva --politica/--padroes do que o próprio workflow da main declara. Modo real só montado: --mostrar imprime, sem rede e sem gh, os nomes (NOME-security-policy, NOME-devops-policy, NOME), os comandos gh repo create/gh secret set/gh variable set e, com --privado, os tokens AURUMCODE_POLICY_TOKEN/AURUMCODE_STANDARDS_TOKEN (fine-grained, Contents: read nos dois centrais). Nenhum repositório é criado no GitHub por este card.
  • Evidência do roteiro: run.sh --modo mock --auto grava out/roteiro-mock.log (valores voláteis normalizados: caminho absoluto, chave da demonstração, SHAs, ids de achado) e out/.imagem; run.sh --check confere expected/roteiro-mock.txt e a imagem, sem docker, com o mesmo _lib/tutorial.sh dos tutoriais.
  • Tutorial executável demo/tutoriais/camadas com três repositórios de exemplo (security-policy/, devops-policy/, servico/ e variantes) e quatro casos: tres-camadas, servico-nao-afrouxa, mesmo-nome e a falha padroes-com-gate; página docs/tutorials/camadas.md (blocos idênticos aos arquivos, saídas literais do out/, capturas), índices (docs/tutorials/README.md, docs/index.md; o nav do site é injetado por scripts/docs/hooks.py), tests/fixtures/tutorials/mapa.tsv, docs/tutorials/instalacao-ia.md citando a camada de padrões.
  • tests/acceptance/AUR-614.sh: all, AC-001..AC-005, MUT-001, MUT-002; seletor desconhecido sai 64; infraestrutura 79.

Decisões

  • O produto, não um simulacro. O roteiro e o tutorial rodam /app/aurumcode da imagem construída do Dockerfile da raiz, sem rede, com o provedor falso (AURUMCODE_LLM_FIXTURE). A camada de padrões entra pelas mesmas flags que o workflow passa (--politica /github/policy --padroes /github/standards).
  • Seletores diferentes por camada. Uma skill da política com o mesmo seletor (languages/paths) de uma skill de baixo faz a de baixo não ser enviada ao modelo (regra do catálogo de skills). A skill ia da segurança usa languages: [python] e a time da engenharia paths: ["**/*.py"]; sem isso os achados PAD-001/QA-001 não existiriam (foi o primeiro defeito da primeira execução real).
  • A correção mantém as linhas. etapas/correcao.py ganha um comentário na linha 10 (onde o defeito tinha a chave fixa) para --executar continuar nas linhas 32 e 34: o fixture do modelo cita as mesmas linhas nas duas rodadas, e o parecer aprovado mostra as observações da engenharia no lugar certo.
  • A legenda é conclusão do roteiro. "De onde veio cada achado" é impressa lendo os repositórios clonados (a skill cujo nome prefixa a regra); só linhas arquivo:linha do parecer entram nela, nunca as linhas do gate.
  • Evidência versionada, como nos tutoriais. O sealed não tem docker, git nem python3; o aceite prova o roteiro pela gravação (--check), o modo real pelo --mostrar e limpar por execução. As mutações têm dois níveis: com docker, python3 e a imagem gravada, a mutação roda de verdade; sem eles, a mesma prova sobre a evidência.

Provas

Execução real em 2026-10-13, nesta árvore, com a imagem aurum-tutoriais:90bbf1e4c39d construída do Dockerfile da raiz:

prova comando resultado
POC mock de ponta a ponta bash demo/do-zero/run.sh --modo mock --auto exit 0; 36 s na primeira execução (com o docker build), 6 s com a imagem pronta; PR #1 "Bloqueado: 2 problemas" com [perfil seguranca], [perfil padroes] [padrões de engenharia], [perfil qa] [padrões de engenharia] e analysis/hardcoded-secret; passo 10 com os dois avisos "a política central decide sozinha" e o mesmo bloqueio; correção "Aprovado com 2 observações que não bloqueiam o merge."
POC --check bash demo/do-zero/run.sh --check CHECK OK
modo real montado bash demo/do-zero/run.sh --modo real --mostrar --repo loja --privado nomes, comandos gh e tokens impressos; gh/docker nunca chamados (AC-003 usa falsos que registram a chamada)
tutorial bash demo/tutoriais/camadas/run.sh all e --check 4 casos em 5 s; CHECK OK; casos camadas/tres-camadas, camadas/servico-nao-afrouxa, camadas/mesmo-nome, camadas/padroes-com-gate
capturas AURUM_CAPTURAS_SO=camadas,tutorials-camadas bash scripts/docs/capturas.sh 7 capturas do tutorial + página desktop/mobile; scripts/docs/capturas-check.sh ok
aceite bash tests/acceptance/AUR-614.sh all AC-001..AC-005 ok; MUT-001 e MUT-002 rejected no nível com docker (mutação executada)
id prova última linha
AC-001 --check do roteiro; três remotos; achado de cada camada identificado no parecer publicado e na legenda; aprovado depois do bloqueado; README diz quem mantém AUR-614/AC-001/ok
AC-002 avisos de gate e ignore descartados e exit_code=3 logo depois; afrouxa.yml declara os dois AUR-614/AC-002/ok
AC-003 --mostrar com --privado e com dono/NOME público; modelo do workflow com os quatro inputs e os dois secrets; refs fixadas por rev-parse main AUR-614/AC-003/ok
AC-004 limpar apaga .estado/ e o projeto marcado do modo ia; preserva out/, expected/, camadas/ e um destino sem a marca AUR-614/AC-004/ok
AC-005 estrutura da página, 4 fases, --check, saídas literais, blocos idênticos, índices, mapa.tsv, flags contra --help (go build quando não há binário), domínios reservados AUR-614/AC-005/ok
MUT-001 sem standards_repository no modelo do workflow, o roteiro mutado roda e os achados da engenharia somem do parecer da PR; --check da cópia diverge nomeando a camada AUR-614/MUT-001/rejected
MUT-002 a versão da engenharia da skill nomes posta na política (e vice-versa): o caso 3 sai 0 em vez de 3 e --check diverge em caso=mesmo-nome AUR-614/MUT-002/rejected

Achados sobre o produto (honestidade da demonstração)

  1. O aviso de seletor igual entre camadas sai em inglês e chama a camada de padrões de "repository skill" (policy skill "ia" (...) overrides repository skill "time" (standards/...)). A POC evita o caso por seletor; a mensagem é do catálogo de skills (internal/context/skills), fora deste card.
  2. As mensagens da camada de padrões (skill ignorada por nome, config.yml recusado) mudaram entre o commit revisado do AUR-613 e a ergonomia dele; expected/mesmo-nome.txt, expected/padroes-com-gate.txt e os blocos <!-- saida: --> correspondentes em docs/tutorials/camadas.md seguem o texto da árvore desta execução. Quando o AUR-613 fechar, run.sh all regrava out/ e esses arquivos precisam acompanhar o texto final.

Limites

  • O modo real nunca foi executado por este card (criaria repositórios na conta de quem roda); --mostrar é o que o aceite prova. O ensaio real é operação do dono.
  • O aceite selado (go-unit-offline-v1) não tem docker, git nem python3: as mutações rodam ali no nível da evidência. O nível executado está registrado acima, nesta máquina.
  • O GitHub falso não guarda o parecer anterior: a edição "no lugar" aparece como um comentário novo na segunda rodada (o texto do roteiro diz isso).