Pular para conteúdo

AUR-541: fixtures de modelo dos testes e2e passam pelo gate de evidencia

O que foi medido

Todo tests/e2e/*.sh que referencia AURUMCODE_LLM_FIXTURE foi executado via .board/bin/go-shared exec contra o worktree deste card. Para cada um, registramos: o exit code antes e depois, quantos achados simulados o gate de escopo e evidencia (internal/review/scope.go::filterModelIssues) descarta e por que, se o cenario do teste depende do achado chegar ao resultado, e a promessa do card de origem (.board/cards/done/AUR-NNN.md).

O gate tem quatro motivos de descarte: fora de linhas alteradas no diff (OutsideAddedLines -- comportamento intencional, fora do escopo deste card), sem evidencia, sem impacto, sem verificacao. Este card so corrige os ultimos tres; o primeiro e um comportamento correto e preexistente do gate.

Script Exit antes Exit depois Achados descartados (antes) Motivo Cenario depende do achado? Card de origem / promessa
AUR-430 0 0 0 fixture ja usa known-problem-response.json, que ja tem evidence/impact/verification sim, e ja passa AUR-430: review contra git-demo fixture, --base obrigatorio
AUR-431 1 (gate_did_not_fire:exit:0) 0 1 de 1 (fixture_error), 1 de 1 (fixture_info) sem evidencia/impacto/verificacao sim -- o --fail-on high so fecha o gate se o achado error sobreviver AUR-431: --fail-on fecha o pipeline de CI
AUR-432 1 (header_not_redacted_on_stdout) 0 1 de 1 sem evidencia/impacto/verificacao sim -- a asserção de redacao olha o achado publicado no stdout AUR-432: redacao de credenciais no prompt e no stdout
AUR-433 0 (passava, mas vacuamente) 0 (passa pelo motivo certo agora) 1 de 1 sem evidencia/impacto/verificacao sim, mas a asserção antiga (grep -Fq 'config/demo-tokens.txt') tambem casava com o nome do arquivo no diagrama de arquivos tocados, que aparece mesmo sem nenhum achado sobrevivendo -- falso positivo corrigido pela fixture, nao pela asserção AUR-433: orcamento/--limite de custo por chamada
AUR-434 1 (missing_grounded_finding) 0 3 de 3 (mixed_fixture) sem evidencia/impacto/verificacao no achado fundamentado; os outros dois sao propositalmente sem rule_id -- isso e o proprio ponto do card (gate de citacao de regra) sim -- o achado fundamentado precisa sobreviver para provar que so os ungrounded caem AUR-434: gate de citacao de regra (rule gate)
AUR-435 1 (base-quality-missing) 0 1 de 1 sem evidencia/impacto/verificacao sim -- prova a separacao quality/security AUR-435: secao de qualidade so aparece com --seguranca? (separacao de secoes)
AUR-436 0 (passava, mas vacuamente) 0 (passa pelo motivo certo agora) 1 de 1 sem evidencia/impacto/verificacao sim, mesmo falso positivo do AUR-433 (nome do arquivo no diagrama) AUR-436: selecao de --modelo
AUR-438 1 (missing_inline_finding) 1 (missing_general_finding) -- NAO RESOLVIDO 2 de 2 achado inline: sem evidencia (corrigido); achado geral (docs/notas.md:99, fora das linhas alteradas de proposito): descartado por OutsideAddedLines, nao por evidencia sim para os dois, mas o achado "geral" nunca pode sobreviver ao gate como ele existe hoje AUR-438: publicacao de comentario geral (fora da linha) em PR -- gap encontrado, nao corrigido, ver secao abaixo
AUR-439 0 0 (sem mudanca) 1 de 3 fixtures tem achado descartado (fixture_general_only, por OutsideAddedLines) fora de linhas alteradas -- intencional, nao e sobre evidencia nao -- o teste passa sem depender desse achado especifico AUR-439: publicacao de comentarios de PR (grave/clean/general)
AUR-441 1 (behavior-missing) 0 1 de 1 sem evidencia/impacto/verificacao sim -- prova reuso de cache do prompt AUR-441: cache de prompt por arquivo
AUR-442 0 0 (sem mudanca) fixture principal usa known-problem-response.json (ja valido); 1 achado adicional e descartado de proposito por OutsideAddedLines intencional nao -- o teste ja prova a exclusao correta AUR-442: aplicacao do catalogo de regras de seguranca
AUR-443 1 (help_missing_docs) 1 (sem mudanca -- fora do escopo) 0 relacionado ao gate de evidencia (usa known-problem-response.json e uma fixture vazia) n/a nao AUR-443: falha preexistente e nao relacionada (docs de --help); nao tocado
AUR-448 1 (no_provider_wrong_exit:0) 1 (mesmo ponto) -- NAO RESOLVIDO mixed_fixture corrigida (achado fundamentado agora tem evidencia); all_discarded_fixture e intencionalmente sem evidencia achado fundamentado: corrigido; os outros dois do mixed_fixture e o unico do all_discarded: sem rule_id, intencional (gate de citacao) sim para o achado fundamentado (corrigido); o script nunca chega la nesta worktree AUR-448: discard nunca e silencioso -- bloqueado por uma falha preexistente e anterior ao gate de evidencia (cenario "sem provedor" retorna exit 0), nao corrigido
AUR-449 1 (no-seguranca-no-provider-must-still-fail:0) 1 (sem mudanca -- fora do escopo) n/a (nao chega a usar a fixture com achado antes de falhar) mesma falha preexistente do AUR-448 nao avaliavel nao tocado -- mesmo bloqueio do AUR-448
AUR-450 0 0 (sem mudanca) 0 -- usa known-problem-response.json, ja valido n/a sim, e ja passa AUR-450: fluxo completo com --modelo + provedor
AUR-451 1 (seguranca_only_wrong_post_count) 1 (sem mudanca -- nao investigado a fundo no prazo) nao confirmado que seja sobre o gate de evidencia nao confirmado nao avaliado falha preexistente, nao tocado; ver gap abaixo
AUR-459 79 (infra: missing-input:cmd/regenerate-docs) 79 (sem mudanca) nao executavel nesta worktree gap arquitetural: a fixture usa o formato line_comments, cujo lineComment (internal/prompt/parser.go) nao tem campos evidence/impact/verification -- um achado convertido de line_comments nunca pode sobreviver ao gate sem mudar o parser (fora do escopo deste card) sim, mas inviavel de corrigir sem tocar codigo de produto AUR-459: conversao de line_comments pelo gate de --fail-on -- gap encontrado, nao corrigido
AUR-461 1 (catalog-id-gate-exit:0) 0 1 de 1 (catalog-id.json); invented-id.json tambem recebeu evidencia para que o descarte dele seja feito pelo gate de regra (motivo certo: unknown rule_id), nao pelo gate de escopo sem evidencia/impacto/verificacao sim -- prova resolucao de rule_id contra o catalogo embutido AUR-461: catalogo de regras embutido
AUR-467 0 (ja corrigido pelo AUR-540) 0 0 n/a ja corrigido AUR-467: classificacao prosa-vs-codigo (controle de nao-regressao)
AUR-475 1 (no-regression-gate-exit:0) 0 1 de 1 sem evidencia/impacto/verificacao -- mesma forma exata que o AUR-467 tinha antes do AUR-540 sim AUR-475: controle de nao-regressao equivalente ao AUR-467

Scripts que so fazem env -u AURUMCODE_LLM_FIXTURE / unset ... AURUMCODE_LLM_FIXTURE (AUR-458, AUR-460, AUR-462, AUR-466, AUR-473, AUR-481, AUR-486) nunca alimentam um achado de modelo real: nao ha nada para o gate descartar. Marcados N/A.

Fixtures corrigidas (evidence/impact/verification adicionados)

tests/e2e/AUR-431.sh, AUR-432.sh, AUR-433.sh, AUR-434.sh (so o achado fundamentado do mixed_fixture), AUR-435.sh, AUR-436.sh, AUR-438.sh (os dois achados -- o inline passou a se sustentar; o geral continua bloqueado, ver gap), AUR-441.sh, AUR-448.sh (so o achado fundamentado do mixed_fixture), AUR-461.sh (os dois achados), AUR-475.sh. O texto de evidence/impact/ verification e prosa plausivel em portugues ou ingles (seguindo o idioma do script) que nao repete nenhuma string que a propria asserção grep -Fq do script usa -- evita o casamento vazio que AUR-433/AUR-436 tinham.

Scripts que testam o descarte de proposito (achados sem rule_id ou com rule_id inventado, usados para provar o gate de citacao de regra do AUR-434) ganharam um comentario # AUR-541: expect-gate-discard: ... no proprio arquivo: tests/e2e/AUR-434.sh e tests/e2e/AUR-448.sh.

Gaps encontrados e NAO corrigidos (fora do escopo deste card ou do prazo)

  1. AUR-438 (achado "geral", fora da linha): o achado plantado em docs/notas.md:99 e deliberadamente fora das linhas alteradas, para provar que aurumcode publica um comentario geral de PR quando o achado nao ancora numa linha do diff. Mas filterModelIssues descarta QUALQUER achado fora das linhas alteradas antes mesmo de chegar na logica de classificacao inline/geral -- isso nao tem relacao com evidencia, impacto ou verificacao (que este card corrigiu), e consertar exigiria mudar internal/review/scope.go, o que e um nao-objetivo explicito deste card. Achado: o recurso de comentario geral de PR pode estar inalcancavel em producao hoje, ja que todo achado fora do diff e descartado antes de chegar na etapa de publicacao. Recomenda-se um card novo para decidir se o gate deve ter uma excecao para achados classificados como "gerais".
  2. AUR-448 / AUR-449 (cenario "sem provedor"): nesta worktree, rodar review com AURUMCODE_LLM_FIXTURE, LLM_API_KEY e LLM_BASE_URL todos explicitamente desativados (env -u ...) ainda retorna exit 0 em vez do exit 1 esperado (errNoProviderConfigured), antes mesmo do script chegar nas fixtures que o gate de evidencia afetaria. Reproduzido de forma consistente em duas execucoes isoladas (nao e um artefato de cache entre execucoes). Causa raiz nao identificada dentro do prazo deste card -- nao parece relacionada ao gate de escopo/evidencia. Recomenda-se investigacao separada.
  3. AUR-459 (conversao de line_comments): bloqueado nesta worktree por missing-input:cmd/regenerate-docs (esse diretorio existe em main mas nao neste worktree -- provavel materializacao parcial do checkout). Independentemente do bloqueio de infra, ha uma lacuna arquitetural real: o tipo lineComment (internal/prompt/parser.go) nao carrega evidence, impact nem verification, entao todo achado convertido de line_comments e descartado pelo gate de escopo/evidencia por construcao. Esta fixture nao pode ser corrigida sem alterar o parser (fora do escopo deste card: "Non-goals: Mudar o gate de evidencia").
  4. AUR-451: falha hoje em seguranca_only_wrong_post_count, nao confirmado dentro do prazo se tem relacao com o gate de evidencia ou se e uma falha preexistente e nao relacionada. Nao investigado a fundo; nao tocado.
  5. AUR-443: falha hoje em help_missing_docs, claramente nao relacionada ao gate de evidencia (fixtures usadas ja sao validas). Nao tocado.

Verificacao automatizada (tests/acceptance/AUR-541.sh)

Modelado em tests/acceptance/AUR-540.sh. Builda um go shim que fica na frente do PATH: ele deixa toda chamada passar para o go real, exceto que depois de um go build -o X ... com sucesso, move X para X.aur541real e escreve em X um wrapper que roda o binario real, repassa seu stdout/stderr inalterados, e tambem acrescenta qualquer linha de descarte por evidencia/ impacto/verificacao faltante (NAO por OutsideAddedLines, que e comportamento intencional preexistente) a um arquivo de log com caminho fixo -- preservando a linha mesmo quando o script e2e redireciona o stderr do binario para um arquivo temporario que apaga ao sair.

Selectors: all, AC-001 (roda todo tests/e2e/*.sh que atribui um valor real a AURUMCODE_LLM_FIXTURE e falha se algum reportar descarte por evidencia/impacto/verificacao sem um comentario # AUR-541: expect-gate-discard no proprio arquivo), AC-002 (os scripts que este card corrigiu de fato -- AUR-431/432/433/434/435/436/441/461/475 -- continuam saindo 0), AC-001-MUT-001 (copia em stage de tests/e2e/AUR-461.sh com os campos evidence/impact/verification removidos de volta da fixture catalog-id.json -- o detector do AC-001 deve reportar o descarte). Selector desconhecido sai 64; falha de infraestrutura sai 79.

Limitacao conhecida, documentada no proprio script: a declaracao expect-gate-discard e por arquivo, nao por achado ou por motivo -- um script com o comentario silencia qualquer descarte que ele reporte. Por isso o MUT-001 usa AUR-461.sh (que nao tem esse comentario) em vez de AUR-434.sh ou AUR-448.sh.

Non-goals respeitados

Nenhuma linha de internal/review/scope.go ou de qualquer outro pacote de produto foi alterada. Nenhuma promessa de card foi mudada -- so os dados de fixture (evidence/impact/verification) foram adicionados, com prosa que nao repete as strings que as asserções dos proprios scripts verificam.