AUR-547: aceites de cards done nao copiam pacotes removidos do produto
O que foi medido
AUR-542 (done) ja tinha medido, para tests/e2e/*.sh, que cmd/regenerate-docs,
internal/pipeline e internal/documentation/* foram removidos do produto
pelo commit 670c7f6 ("Focus AurumCode on code review", 2026-09-12) -- um
pivo de produto deliberado e anterior, que o registro de entrega do AUR-490
(done) ja trata como fato assentado. Este card estende a mesma auditoria e a
mesma correcao para tests/acceptance/AUR-443.sh, AUR-448.sh, AUR-449.sh,
AUR-458.sh, AUR-466.sh e AUR-481.sh, e para tests/integration/AUR-449.go
e tests/unit/AUR-449.go (AC-003).
Metodo: para cada script, a lista de pacotes copiados em stage_source()
foi substituida pela resposta real de go list -deps ./cmd/aurumcode
(rodado no container go-shared contra este worktree), filtrada aos pacotes
github.com/Mpaape/AurumCode/internal/* e arredondada ao diretorio dono --
a mesma tecnica e a mesma lista final que o AUR-542 ja usou em
tests/e2e/AUR-459.sh:
internal/analysis internal/analyzer internal/apply internal/changelog
internal/config internal/context internal/git internal/llm internal/memory
internal/prompt internal/render internal/review internal/reviewprofile
internal/security internal/testgen
Isso remove cmd/regenerate-docs, internal/documentation/* e
internal/pipeline (que nao existem mais -- ls internal neste worktree
confirma) e acrescenta pacotes que faltavam na lista original de cada script
(internal/analysis, internal/apply, internal/changelog, internal/context,
internal/memory, internal/render, internal/reviewprofile, internal/testgen),
que o binario de hoje tambem importa e que a lista antiga, escrita antes
desses pacotes existirem, nunca cobriu -- a materializacao estava incompleta
nos dois sentidos, nao só excedente.
Cada script foi executado isolado, sem edicao, para medir a causa antes de qualquer correcao; depois de cada candidata, reexecutado para confirmar o novo resultado -- nunca inferido.
Por script
AUR-443: infraestrutura corrigida; AC-001 fica vermelho por tests/unit/AUR-443.go e tests/integration/AUR-443.go, fora dos paths deste card
Causa. Alem dos pacotes obsoletos, nominal_case() (dentro do proprio
tests/acceptance/AUR-443.sh, portanto nos paths deste card) ainda testava o
subcomando docs (removido com cmd/regenerate-docs) e esperava exit 1/stdout
vazio para review --base sem provedor (revogado pelo AUR-490, done,
integrado depois do AUR-443). Corrigido com a mesma logica que o AUR-542 ja
aplicou a tests/e2e/AUR-443.sh: docs removido das asserções; "sem provedor"
agora exit 0; o contrato "zero achados -> No issues found." passa a comparar
so a ULTIMA linha (tail -n1), porque o AUR-490 antepõe incondicionalmente o
bloco de resumo/diagrama, mais uma checagem de que nenhuma linha no formato
<arquivo>:<linha>: [<severidade>] aparece em lugar nenhum do stdout.
Depois disso, nominal_case, e2e_case (que reusa o tests/e2e/AUR-443.sh
ja corrigido pelo AUR-542) e mutation_case (MUT-001 proprio do AUR-443, com
a mesma remocao de docs na checagem de restauracao) passam. unit_case e
integration_case continuam vermelhos: chamam tests/unit/AUR-443.go e
tests/integration/AUR-443.go, que NAO estao nos paths deste card
(.board/cards/backlog/AUR-547.md so lista tests/integration/AUR-449.go e
tests/unit/AUR-449.go), e esses dois arquivos ainda afirmam o docs
subcommand e o exit 1 incondicional pre-AUR-490.
Decisao. Teste desatualizado contra o AUR-490 e o pivo 670c7f6, exatamente
como o AUR-542 ja decidiu para o tests/e2e/AUR-443.sh irmao -- mas os dois
arquivos que ainda falham (tests/unit/AUR-443.go, tests/integration/AUR-443.go)
ficam fora dos paths deste card. Nao corrigidos aqui; reportado para reabertura
do card de origem ou para um card de escopo dedicado a esses dois arquivos.
Antes -> Depois. Antes: AUR-443/AC-001/infrastructure/missing_input:...
(parava na materializacao). Depois: nominal_case, e2e_case e
mutation_case passam; AC-001 completo para
AUR-443/AC-001/selector:TestAUR443:exit:1 -- vermelho medido, causa em
arquivo fora dos paths, documentado aqui, nao mascarado.
B1 (revisao independente) -- cenario 7. A asserção original (tail -n1
mais um grep ancorado no formato exato de achado) deixava passar uma linha
vazada arbitraria entre o diagrama e "No issues found.", provado
adicionando essa linha em cmd/aurumcode/main.go::printFindings e vendo o
cenario 7 continuar verde. Trocado por after_diagram() (ver secao AUR-448
abaixo para o detalhe da funcao): tudo depois da ULTIMA cerca de mermaid
precisa ser EXATAMENTE "No issues found.", sem excecao. Reproduzido com a
mesma mutacao do revisor: AC-001 agora falha em
review-contract-leaked-finding, dentro de nominal_case, antes mesmo de
chegar no unit_case ja vermelho por outro motivo.
B3 (revisao independente) -- selectores individuais medidos e fixados em
tests/acceptance/AUR-547.sh::detail_checks, nao mais inferidos pela tag
grosseira de AC-001:
| selector (AUR-443) | exit medido | tag/causa |
|---|---|---|
TestAUR443 (unit, fora dos paths) |
1 | selector:TestAUR443:exit:1 -- 4 subtestes falham dentro de tests/unit/AUR-443.go (fora dos paths): top-level_--help_lists_subcommands... (ainda exige docs no --help), docs_--help_is_still_on_stdout..., no_provider_configured:... (ainda exige exit 1) e review_--base's_published_contract_is_untouched... (AUR-443.go:529, ainda exige stdout igual a so "No issues found.", sem o bloco de resumo/diagrama do AUR-490) |
IntegrationAUR443 (fora dos paths) |
1 | selector:IntegrationAUR443:exit:1 -- um subteste falha: a_valid_ref_still_resolves_and_reviews_normally_on_both_backends (AUR-443.go:298), mesma causa (compara contra o stdout pre-AUR-490) |
E2EAUR443 (fora dos paths, ja corrigido pelo AUR-542) |
0 | E2EAUR443/ok |
AC-001-MUT-001 (mutation_case, proprio deste script) |
0 | MUT-001/rejected |
AUR-448: infraestrutura corrigida; AC-001 fica vermelho por um gate de evidencia mais novo que a propria fixture do script nao satisfaz
Causa. Depois de corrigir a materializacao e o cenario 1 (mesma causa do
AUR-443/AUR-490: "sem provedor" agora exit 0, stdout nao mais vazio -- a
mensagem completa continua presente, impressa como segunda linha pelo
conserto do AUR-542 em cmd/aurumcode/main.go) e os cenarios 2 e 4 (a
comparacao exata de stdout precisa ser so da ULTIMA linha, pelo mesmo motivo
do AUR-443), o script avanca e falha no cenario 3 (mixed.json, descarte
misto): medido diretamente, a resposta do motor hoje e
aurumcode review: 3 finding(s) descartado(s) pelo gate de escopo e evidencia:
3 sem evidencia concreta -- em portugues, descartando TODOS os 3 achados,
inclusive o grounded com rule_id valido -- em vez de
aurumcode review: 2 finding(s) discarded: 1 with no rule_id, 1 citing an
unknown rule_id (security/definitely-not-a-rule). O gate que o AUR-448
testava (so citacao de rule_id, em internal/review.enforceRuleCitations)
foi superado por um gate mais novo e mais estrito (internal/review/scope.go,
"gate de escopo e evidencia", que exige Evidence/Impact/Verification em
todo achado -- o mesmo gate que o AUR-542 ja documentou investigando
tests/e2e/AUR-459.sh). A fixture mixed.json do proprio AUR-448.sh nao
carrega esses campos, entao hoje e descartada por inteiro.
Decisao. Isto NAO e so uma desatualizacao contra o AUR-490: e um gate de
produto mais novo e mais estrito que invalida a premissa da fixture do
AUR-448, nao so o texto da mensagem. internal/review/scope.go nao esta nos
paths deste card (so leitura), e decidir se a fixture deveria ganhar
evidencia/impact/verification para voltar a sobreviver ao gate -- ou se o
card de origem (AUR-448) precisa ser reaberto para essa decisao de produto --
e maior do que este card deveria assumir sozinho, pelo mesmo motivo que o
AUR-542 recusou tocar internal/review/scope.go para o AUR-438/AUR-459. Fica
vermelho, com a causa medida acima, nao mascarado.
Antes -> Depois. Antes: AUR-448/AC-001/infrastructure/missing_input:....
Depois: cenarios 1 e 2 corrigidos contra o AUR-490; AC-001 continua
vermelho, agora com tag unica e precisa por asserção
(s1-*/s2-*/s3-*/s4-*, nao mais o rotulo generico behavior-missing
que uma unica revisao independente apontou como capaz de mascarar qualquer
asserção nova). AC-001 para hoje em AUR-448/AC-001/s3-grounded-finding-missing
no cenario 3 -- o gate de evidencia descarta ate o achado fundamentado antes
mesmo do cenario 4 ser alcancado.
Correcao da secao anterior desta mesma spec (revisao independente, B2):
a frase "cenarios 1, 2 e 4 corrigidos" estava errada -- o cenario 4 nunca
chega a rodar dentro de AC-001 porque o cenario 3 falha primeiro. O
cenario 4 TEM seu proprio conserto (ver B1 abaixo), mas isso so fica provado
rodando os outros selectores do script isoladamente, nao pelo AC-001
inteiro. Medido e fixado em tests/acceptance/AUR-547.sh::detail_checks:
| selector (AUR-448) | exit medido | tag/causa |
|---|---|---|
TestAUR448 (unit, fora dos paths) |
1 | selector:TestAUR448:exit:1 -- tests/unit/AUR-448.go tambem colide com o gate de evidencia (discard_warning vem vazio onde o teste esperava texto) |
IntegrationAUR448 (fora dos paths) |
1 | selector:IntegrationAUR448:exit:1 -- mesma causa, em tests/integration/AUR-448.go |
E2EAUR448 (fora dos paths, ja corrigido pelo AUR-542) |
0 | E2EAUR448/ok -- este, sim, continua verde |
AC-001-MUT-001 (mutation_case, propria deste script) |
1 | MUT-001/not-rejected -- a mutacao que suprime o aviso de descarte (Fprintf -> _ = warning) nao e mais a UNICA fonte de texto em stderr: o gate de evidencia mais novo escreve sua propria mensagem por um caminho diferente, que a mutacao nao toca, entao stderr continua nao-vazio e a asserção final do mutation_case falha -- nao porque a mutacao sobreviveu como PASS, mas porque o proprio mutation_case hoje e vermelho por uma causa colateral ao gate de evidencia, nao ao que ele pretende testar |
B1 (revisao independente): tail -n1 + grep por formato de achado deixava vazar uma linha arbitraria
Causa. A revisao independente provou, adicionando
fmt.Fprintln(stdout, "LEAKED discarded finding -- config/demo-tokens.txt line 4: hardcoded secret DEMO_API_TOKEN")
antes de "No issues found." em cmd/aurumcode/main.go::printFindings, que
tests/acceptance/AUR-443.sh (cenario 7) e tests/acceptance/AUR-448.sh
(cenario 4 e seu mutation_case) ficavam verdes mesmo com essa linha vazada:
tail -n1 ve so a ULTIMA linha (ainda "No issues found."), e o grep de
"zero achados" so cobria o formato exato <arquivo>:<linha>: [<severidade>],
que a linha vazada nao tem.
Decisao e conserto. As duas asserções foram trocadas por uma funcao
after_diagram() (awk) que pega TUDO depois da ULTIMA linha que e exatamente
a cerca do mermaid (```) e exige igualdade EXATA com "No issues found."
-- qualquer linha extra, de qualquer formato, quebra a igualdade. Reproduzido
com a mesma mutacao do revisor: tests/acceptance/AUR-443.sh AC-001 agora
falha em review-contract-leaked-finding (nominal_case, antes mesmo de
chegar no unit_case) e o cenario 4 isolado de AUR-448.sh (testado
diretamente contra o binario mutado, fora da sequencia de AC-001 que para
no cenario 3) tambem passa a rejeitar a linha vazada.
AUR-449: corrigido por completo -- AC-001 sai 0
Causa. Alem da materializacao, tres pontos colidiam com cards aprovados e integrados depois do AUR-449:
review --basesem--segurancae sem provedor: o AUR-490 removeu a exigencia&& *segurancadeste mesmo guarda emcmd/aurumcode/main.go-- hoje sai 0 (nao mais 1 incondicional) e a nota de skip aparece mesmo sem--seguranca(nao mais nunca).- Um provedor configurado errado (
AURUMCODE_LLM_FIXTUREpara um arquivo que nao existe) com--seguranca: o AUR-458 (done, tambem integrado depois do AUR-449) decidiu que esse caminho ainda entrega os achados de seguranca ja computados (nunca descarta trabalho ja feito), em vez de falhar antes de qualquer saida -- medido diretamente contra o binario. - O pin de sha256 do stdout completo com um provedor configurado parou de bater porque o AUR-490 passou a antepor incondicionalmente o bloco de resumo/diagrama nesse mesmo caminho.
Decisao. Os tres sao realinhamentos contra cards aprovados e integrados
(AUR-490, AUR-458), nunca enfraquecimento do que o AUR-449 proprio provou: o
invariante que o AUR-449 realmente possui -- a nota exata "quality review
skipped" nunca aparece para um provedor configurado errado (so para "nada
configurado") -- continua testado e passando; o pin de sha256 do stdout
completo foi trocado por uma checagem do byte-a-byte da SECAO DE SEGURANCA
(contagem exata de citacoes), o unico pedaco que o AUR-449 proprio publicou.
tests/unit/AUR-449.go (linhas 182, 212, 244 antes da edicao) e
tests/integration/AUR-449.go (linha 213 antes da edicao) tiveram exatamente
essas asserções atualizadas, pela mesma razao -- AC-003 deste card.
Antes -> Depois. Antes: AUR-449/AC-001/infrastructure/missing-input:....
Depois: nominal_case, unit_case, integration_case, e2e_case e
mutation_case (MUT-001 proprio do AUR-449, anchor atualizado para o texto
atual do guarda pos-AUR-490, asserções finais restritas ao que esta mutacao
realmente testa) todos passam. AUR-449/AC-001/ok.
AUR-458: infraestrutura corrigida; AC-001 fica vermelho por tests/e2e/AUR-458.sh, fora dos paths deste card
Causa. Depois de corrigir a materializacao e o pin de sha256 do stdout
completo (mesma causa do AUR-449: trocado por checagem da secao de seguranca
sozinha), nominal_case() passa por completo. AC-001 deste script tambem
roda tests/e2e/AUR-458.sh (nao esta nos paths deste card -- so
tests/acceptance esta) e falha ali:
AUR-458/E2E/pr-path-must-refuse-the-flag:want-2-got-1 -- o caminho --pr
com uma flag que deveria ser recusada (exit 2) hoje sai 1. Separadamente, os
selectores TestAUR458/IntegrationAUR458 (fora do AC-001 deste script,
so acessiveis por selector direto) mostram que tests/unit/AUR-458.go
(tambem fora dos paths) falha em dois casos ("provider absent, quality
review demanded": exit 0, esperava 1; "--exigir-qualidade recusado no
caminho --pr": exit 1, esperava 2) -- tests/integration/AUR-458.go passa.
Decisao. As tres causas vivem em arquivos fora dos paths deste card
(tests/e2e/AUR-458.sh, tests/unit/AUR-458.go). Nao investigado a fundo se
sao desatualizacao contra AUR-490/AUR-458 ou um gap real do caminho --pr --
essa investigacao e essa correcao pertencem a um card com mandato sobre esses
arquivos. Reportado, nao mascarado.
Antes -> Depois. Antes: AUR-458/AC-001/infrastructure/missing-input:....
Depois: nominal_case passa por completo; AC-001 completo fica
AUR-458/AC-001/e2e-failed (pr-path-must-refuse-the-flag:want-2-got-1) --
vermelho medido, causa em arquivos fora dos paths, documentado aqui.
B3 (revisao independente). A chamada original a tests/e2e/AUR-458.sh
dentro do case "$selector" descartava a saida em /dev/null, entao um
e2e-failed generico nao distinguia essa causa de qualquer outra. Corrigido
capturando a saida e anexando sua ultima linha ao tag: a tag completa, medida
e agora pinada em tests/acceptance/AUR-547.sh::expected_tag, e
e2e-failed:AUR-458/E2E/pr-path-must-refuse-the-flag:want-2-got-1.
AUR-466: infraestrutura corrigida; AC-001 fica vermelho por tests/integration/AUR-466.go, fora dos paths deste card
Causa. Alem da materializacao, a contagem de achados do cenario Python
(AC-003 do proprio AUR-466) contava [error] no stdout INTEIRO, e o AUR-490
passou a imprimir uma linha [error] extra (a do passe de analise
deterministica, que agora roda sempre em review --base) antes da secao de
seguranca -- medido diretamente. Corrigido escopando a contagem a secao de
seguranca (depois do cabecalho), igual ao cenario node_repo alguns pontos
acima no mesmo script. Depois disso nominal_case passa.
integration_case continua vermelho: tests/integration/AUR-466.go (fora
dos paths deste card) ainda compara o stdout inteiro contra o formato
pre-AUR-490.
Decisao. Realinhamento contra o AUR-490 dentro do que este card possui
(tests/acceptance/AUR-466.sh); tests/integration/AUR-466.go fica fora dos
paths, vermelho, reportado.
Antes -> Depois. Antes: AUR-466/AC-001/infrastructure/missing-input:....
Depois: nominal_case passa; AC-001 completo fica
AUR-466/AC-001/selector:IntegrationAUR466:exit:1 -- vermelho medido, causa
em arquivo fora dos paths, documentado aqui.
B3 (revisao independente). O subteste que falha em IntegrationAUR466
e medido e nominal: AUR-466.go:182, "expected exactly one finding on the
Python vuln fixture" -- o mesmo efeito do AUR-490 (linha [error] extra da
analise deterministica) que nominal_case ja corrigiu, so que
tests/integration/AUR-466.go fica fora dos paths deste card. O selector
E2EAUR466 (tambem fora dos paths) foi rodado isoladamente e confirmado
verde (AUR-466/AC-001/e2e-ok) -- nao e so inferido pelo AC-001 geral.
Ambos fixados em tests/acceptance/AUR-547.sh::detail_checks.
AUR-481: infraestrutura corrigida; AC-001 fica vermelho por tests/integration/AUR-481.go, fora dos paths deste card
Causa e decisao identicas ao AUR-466 (mesmo script-irmao, mesma fixture
Python, mesma linha [error] extra do passe de analise deterministica do
AUR-490): a contagem do cenario Python foi escopada a secao de seguranca da
mesma forma. integration_case continua vermelho por
tests/integration/AUR-481.go, fora dos paths deste card.
Antes -> Depois. Antes: AUR-481/AC-001/infrastructure/missing-input:....
Depois: nominal_case passa; AC-001 completo fica
AUR-481/AC-001/selector:IntegrationAUR481:exit:1 -- vermelho medido, causa
em arquivo fora dos paths, documentado aqui.
B3 (revisao independente). Mesma medicao do AUR-466: AUR-481.go:172,
"expected exactly one finding on the Python vuln fixture". E2EAUR481
(fora dos paths) rodado isoladamente e confirmado verde
(AUR-481/AC-001/e2e-ok). Ambos fixados em
tests/acceptance/AUR-547.sh::detail_checks.
AC-002: nenhum aceite listado copia pacote que nao existe mais
Confirmado por grep nos seis scripts: nenhuma ocorrencia de
cmd/regenerate-docs, internal/pipeline ou internal/documentation resta
em stage_source()/required_inputs de nenhum dos seis. tests/acceptance/AUR-547.sh::AC-002
verifica isso automaticamente a cada execucao.
AC-003: tests/unit/AUR-449.go e tests/integration/AUR-449.go
Ver a secao "AUR-449" acima. As asserções que afirmavam "o aviso de qualidade
pulada nao aparece sem --seguranca" (revogado pelo AUR-490) foram atualizadas
para a regra atual (a nota aparece sempre que nada esta configurado, com ou
sem --seguranca); a asserção sobre um provedor configurado errado foi
atualizada para refletir a entrega do AUR-458 (achados de seguranca ainda
aparecem; so o invariante proprio do AUR-449 -- nunca a nota exata de skip --
continua garantido); a asserção com provedor valido nao mudou de
comportamento, so ganhou um comentario explicando por que continua correta.
Revisao independente (REQUEST_CHANGES) -- resolucao
- B1 (bloqueante, resolvido):
tail -n1mais um grep ancorado ao formato de achado deixava vazar uma linha arbitraria antes de"No issues found."emtests/acceptance/AUR-443.sh(cenario 7) etests/acceptance/AUR-448.sh(cenario 4 e seumutation_case). Reproduzido com a mutacao exata do revisor emcmd/aurumcode/main.go::printFindings(nunca commitada -- so usada para medir, depois revertida) e corrigido comafter_diagram(), que exige igualdade EXATA de tudo apos a ultima cerca de mermaid. Ver as secoes "B1" dentro de AUR-443 e AUR-448 acima. - B2 (bloqueante, resolvido): a tag generica
behavior-missingdoAUR-448.shfoi substituida por uma tag unica por asserção (s1-*/s2-*/s3-*/s4-*); a frase falsa "cenarios 1, 2 e 4 corrigidos" foi corrigida (so 1 e 2; o 4 nunca roda dentro deAC-001porque o 3 falha primeiro);TestAUR448,IntegrationAUR448,E2EAUR448eAC-001-MUT-001foram medidos e documentados individualmente (tabela na secao AUR-448 acima) e fixados emtests/acceptance/AUR-547.sh::detail_checks. - B3 (bloqueante, resolvido): as tags grosseiras de
AUR-458(e2e-failed, saida descartada em/dev/null),AUR-443(selector:TestAUR443:exit:1) eAUR-466/AUR-481(selector:IntegrationAUR4NN:exit:1) agora tem a causa interna pinada (nome do subteste ou ultima linha do e2e, ver as secoes por script acima), etests/acceptance/AUR-547.shroda, selector por selector, cada um dos 12 pares (script, selector) listados emdetail_checks, provando cada green reivindicado (E2EAUR443,AC-001-MUT-001do AUR-443,E2EAUR448,E2EAUR466,E2EAUR481) em vez de inferi-lo doAC-001grosseiro.
Non-goals respeitados
Nenhum pacote de produto foi alterado. internal/review/scope.go (gate de
evidencia que explica o AUR-448) nao foi tocado -- fica vermelho, documentado,
fora do escopo deste card, pelo mesmo motivo que o AUR-542 recusou tocar o
mesmo arquivo para AUR-438/AUR-459. Nenhum arquivo fora de
tests/acceptance, tests/integration/AUR-449.go, tests/unit/AUR-449.go,
tests/acceptance/AUR-547.sh ou este documento foi editado.
Recomendacao
Abrir um card dedicado com mandato sobre tests/unit/AUR-443.go,
tests/integration/AUR-443.go, tests/integration/AUR-466.go,
tests/integration/AUR-481.go, tests/e2e/AUR-458.sh e tests/unit/AUR-458.go
para o mesmo realinhamento contra AUR-490/AUR-458 que este card aplicou aos
scripts de aceite; e um card com mandato sobre internal/review/scope.go
(ou sobre a fixture do AUR-448) para decidir o gate de evidencia que deixa
tests/acceptance/AUR-448.sh vermelho.