AUR-456 — O repositório não carrega cópia morta nem promessa falsa
Documento histórico do board. Pode descrever componentes removidos; para uso atual, consulte o guia do produto.
O que este card entrega
A auditoria de 2026-08-14 (.board/cards/ready/AUR-456.md, seção "Achados
medidos") encontrou catorze caminhos sem importador em lugar nenhum do
repositório, ou divergentes da versão que o binário realmente embute. Este
card remove cada um, com prova de ausência de importador registrada abaixo,
e prova que os dois artefatos vivos que precisam sobreviver continuam
funcionando.
Apagado, com a prova de ausência de importador
Cada comando abaixo foi executado nesta árvore antes de qualquer remoção.
.aurumcode/rules/(performance.yml,quality.yml,security.yml) — intocado desde o primeiro commit; a versão viva éinternal/review/rules/*.yml, embutida viago:embed rules/*.yml(internal/review/rules.go:24).diff .aurumcode/rules/security.yml internal/review/rules/security.ymlmostra divergência real: a cópia morta declarasecurity/hardcoded-secrets(plural) sem nenhuma chavepattern:; a versão viva declarasecurity/hardcoded-secret(singular) compattern:real para as regras que o AUR-442 casou.grep -rn "go:embed" internal/review/confirma que nada no código lê.aurumcode/rules— o únicogo:embedda árvore de review aponta pararules/*.yml, relativo ao próprio pacote..aurumcode/prompts/*.md(seis arquivos, tudo excetodocumentation/welcome-page.md) —internal/prompt/builder.go:14declara//go:embed templates/*.md, seu próprio conjunto de templates.grep -rn '"\.aurumcode/prompts"' --include="*.go" .mostra que as duas únicas referências de código a esses seis caminhos (internal/prompt/builder.go:371,internal/prompt/builder_test.go) são comentários explicando que o template foi copiado deles em tempo de build (verdocs/specs/AUR-430.md), nunca uma leitura em runtime. Exceção viva confirmada antes de apagar qualquer coisa nesta pasta:internal/documentation/welcome/generator.go:17declaradefaultPromptPath = ".aurumcode/prompts/documentation/welcome-page.md"e o comentário na linha 22 documenta que é um override opcional lido de verdade. Mantido.configs/(default-config.yml,.aurumcode/config.example.yml) —grep -rn '\bconfigs\b' --include="*.go" .não encontra nenhuma referência de código. As únicas menções em texto são o card canceladoAUR-335(.board/cards/cancelled/AUR-335.md) e seu acceptancetests/acceptance/AUR-335.sh, que verifica um MANIFESTO de caracterização (tests/characterization/legacy/config-yaml/manifest.tsv) contendo essas strings de path — não o filesystem real —, então a remoção não afeta esse acceptance (confirmado lendo o script: ele fazgrep -Fq "$path" "$manifest", nunca[[ -f "$path" ]]).index.mde_config.ymlda RAIZ (não os de.aurumcode/) —cmd/aurumcode/docs.go:104ecmd/regenerate-docs/main.go:548mostram que o diretório de saída padrão do gerador é.aurumcode, nunca.(raiz).grep -n 'index\.md\|_config\.yml' scripts/*.sh .github/workflows/*.ymlfoi conferido linha a linha, não só por inferência: toda ocorrência resolve contra uma variável de saída (scripts/build-docs-site.sh:44,scripts/action-entrypoint.sh:70escripts/generate-enhanced-docs.sh:46defaultAURUMCODE_OUTPUT_DIRa.aurumcode;scripts/build-docs-site.sh:113'sindex.md) continue ;;é um filtro por nome-base dentro de um loop sobre arquivos já copiados, não uma referência à raiz; a linha emdemo-external-usage.yml:57é comentário). Nenhum gerador lê ou escreveindex.md/_config.ymlna raiz. Conteúdo (title: AurumCode Documentation, "QA Testing", "Docker Hub") descreve uma plataforma que o código não tem —internal/pipeline/qa_pipeline.gonão existe (ver item 5)._api/(index.md,llm.md,pipeline.md,review.md) —_api/index.mdcitainternal/pipeline/review_pipeline.go,docs_pipeline.goeqa_pipeline.go.ls internal/pipeline/mostra apenasextractor_pipeline.goe seu teste — nenhum dos três arquivos citados existe.grep -rln "_api/" --include="*.go" .só encontra_api/como STRING LITERAL em fixtures sintéticas de teste do normalizador (internal/documentation/normalizer/*_test.go, ex.FilePath: "_api/example.md"), nunca uma leitura do diretório real. 5b. Único gerador que poderia escrever em_api/, e por que não conta como importador:scripts/generate-code-docs.sh:23defineOUTPUT_DIR="_api"e escreveria_api/index.mdse executado. Esse script, porém, não é referenciado por nenhum workflow,Makefileou outro script (grep -rln "generate-code-docs" --include="*.yml" --include="*.sh" --include="Makefile" --include="Dockerfile" .só encontra menções emtests/acceptance/{AUR-368,AUR-312,AUR-001}.sh, todas listas de inventário/caracterização, nunca uma chamada). Mais: o card canceladoAUR-368(.board/cards/cancelled/AUR-368.md,tests/acceptance/AUR-368.sh) já caracterizou esse script comocommands_executed=0— nunca executado — contra um manifesto selado por sha256. Este card não tocascripts/generate-code-docs.sh(fora depaths), então esse selo permanece intacto; a existência do script não torna_api/um diretório com importador ativo..github/actions/aurumcode-docs/(action.ymlEREADME.md) —action.ymlé uma segunda definição de Action com inputs incompatíveis com aaction.ymlreal da raiz.grep -rn "uses:" .github/workflows/*.ymlnão mostra nenhum workflow usando./.github/actions/aurumcode-docs. Decisão de escopo: o card e a auditoria citam nominalmente sóaction.yml, masREADME.mdnessa mesma pasta documenta EXCLUSIVAMENTE como consumir esseaction.ymlinexistente (uses: Mpaape/AurumCode/.github/actions/aurumcode-docs@...repetido a cada exemplo). Apagar só oaction.ymle deixar oREADME.mdtrocaria uma cópia morta por uma promessa ativa nova — umREADMEdescrevendo uma Action reusável num caminho semaction.yml—, o que viola o Outcome do próprio card ("nenhum arquivo... afirma capacidade que o código não tem").pathsdeclara o diretório.github/actionsinteiro, não só o arquivo; a pasta inteira é removida.pages-fix.md,test-jekyll.sh— sem importador. Lido antes de apagar:test-jekyll.shfazcat > Gemfile <<'GEMS', ou seja, sobrescreve oGemfileda RAIZ (não.aurumcode/Gemfile) se executado a partir da raiz. EsseGemfilede raiz, por sua vez, também não é o usado pelo workflow real de Pages —.github/workflows/documentation.ymlroda Ruby/Bundler comworking-directory: .aurumcode, então é.aurumcode/Gemfile(mantido, fora do escopo de apagar deste card) que o Pages realmente consome. Nenhum workflow referencia oGemfileda raiz pelo nome.test-jekyll.shem si não é referenciado por nenhum workflow, script ou Makefile.
Mantido, verificado vivo (as duas provas que o aceite exige)
- Override do welcome-page:
.aurumcode/prompts/documentation/welcome-page.mdcontinua existindo einternal/documentation/welcome/generator.go:17continua nomeando esse caminho exato comodefaultPromptPath(tests/integration/AUR-456.go::IntegrationAUR456, dentro do container —internal/documentation/welcomeestá emread_paths). - ENTRYPOINT do Dockerfile:
Dockerfilenão está empathsnem emread_pathsdo card, então o profilebootstrap-readonly-v1(que só materializapaths+read_paths, ver.board/bin/oci-run) nunca o disponibiliza dentro do container — um aceite que o lesse falharia comentrypoint_missing/infraestrutura em vez de produzir um resultado real. Esta é PROVA HOST-RUN, feita nesta árvore antes do commit:grep -n "ENTRYPOINT" Dockerfile→ENTRYPOINT ["/bin/bash", "/app/scripts/action-entrypoint.sh"].scripts/action-entrypoint.shestá emread_paths(scripts) e sua presença/não-vazio É verificada dentro do container (tests/e2e/AUR-456.sh). - Accept do AUR-002:
tests/acceptance/AUR-002.shetests/characterization/legacy-baseline/não estão empathsnemread_pathsdeste card, então também são PROVA HOST-RUN, não container-run. Resultado bruto registrado na seção "Aceites dos irmãos" abaixo.
Fora do container: por que estas duas provas não podem ser asserções do oci-run
bootstrap-readonly-v1 materializa exclusivamente os caminhos declarados em
paths e read_paths do card (.board/bin/oci-run, função de
materialização em torno de git ls-files -z --cached -- "$allowed_root").
Dockerfile, tests/acceptance/AUR-002.sh e
tests/characterization/legacy-baseline/ não aparecem em nenhuma das duas
listas. Uma asserção dentro do container contra esses caminhos falharia
sempre com entrypoint_missing/infraestrutura — nunca um resultado de
comportamento real — então a prova de que eles continuam funcionando é
feita nesta árvore, pelo builder, antes do commit, e registrada aqui e na
seção "Aceites dos irmãos".
Gap explícito do briefing vs. o card: .env copy.example
A auditoria (achados medidos) e o briefing do builder citam .env
copy.example como lixo avulso, mas o paths do próprio card
(.board/cards/ready/AUR-456.md) NÃO inclui esse caminho, e
forbidden_paths inclui .env (embora o regex de selo do próprio
tests/acceptance/AUR-001.sh:65, ^(\.git|\.env|credentials|secrets|
\.board/cards)(/|$), não bata em .env copy.example por causa da âncora
(/|$)). A razão que importa é mais simples: .env copy.example está fora
de paths, e o Postcondition do card é explícito — "Fora de paths,
nenhum byte muda". Este builder NÃO apaga esse arquivo. Isso é um gap real
entre o briefing recebido e o card autoritativo, registrado aqui em vez de
resolvido silenciosamente numa direção ou outra.
Baseline pré-existente do AUR-001 (não introduzido por este card)
Antes de qualquer mudança deste card, nesta mesma árvore:
$ bash tests/acceptance/AUR-001.sh AC-001
AUR-001/AC-001/unmapped-tracked-file: inventory omits 621 of 1420 sealed tracked files, first: .board/AGENT_PLAYBOOK.md
EXIT=1
.board/research/legacy-files.tsv (fora de paths/read_paths deste
card, portanto fora do alcance de correção aqui) já estava 621 arquivos
atrás do índice real do Git antes de qualquer commit deste card — uma
dívida de sincronização pré-existente, não uma regressão deste card. Este
card TAMBÉM torna algumas das linhas que já existiam em
legacy-files.tsv (as que citam os catorze caminhos apagados) em
stale-path — a mesma classe de falha em espécie, apenas uma segunda causa
somada a uma execução que já falhava sozinha. Reproduzido depois da
remoção nesta mesma árvore:
$ bash tests/acceptance/AUR-001.sh AC-001
AUR-001/AC-001/stale-path: inventory contains an untracked path: .aurumcode/prompts/changelog-generation.md
EXIT=1
Como esperado: a mesma classe de falha (exit 1, aceite do AUR-001
vermelho) continua, agora pela razão adicional de que
.board/research/legacy-files.tsv ainda lista linhas para os catorze
caminhos que este card apaga — o inventário não foi atualizado porque está
fora de paths/read_paths deste card. Nenhuma correção a
.board/research/legacy-files.tsv foi feita.
Comando (verificação estática do aceite)
O aceite roda offline, sem executar aurumcode nem regenerate-docs, e sem
rede — é verificação de existência de arquivo (ausência dos catorze
caminhos mortos, presença dos dois artefatos vivos) mais leitura de texto
direta (grep) sobre os read_paths declarados no card.
# Dentro do profile pinado, cwd no worktree do candidato:
ulimit -v 8388608
export GOMEMLIMIT=2GiB GOFLAGS='-mod=mod -p=1'
bash tests/acceptance/AUR-456.sh AC-001
oci-run não passa seletor, então AC-001 (o default do script) é
exatamente o que o aceite selado executa. O script, nesse caminho:
- Confirma a ausência dos catorze caminhos mortos listados acima
(Unit,
tests/unit/AUR-456.go::TestAUR456). - Confirma, por leitura direta do código (não por outro grep sobre os
caminhos apagados), que os dois artefatos vivos têm lastro:
internal/documentation/welcome/generator.gonomeia exatamente.aurumcode/prompts/documentation/welcome-page.md; einternal/review/rules/security.ymldeclara o id singularsecurity/hardcoded-secretcom uma chavepattern:real, e NÃO declara o id plural mortosecurity/hardcoded-secrets(Integration,tests/integration/AUR-456.go::IntegrationAUR456). - Roda a mesma verificação a partir do binário de shell
(
tests/e2e/AUR-456.sh::E2EAUR456), no mesmo processo do AC-001.
AC-001 sozinho NÃO reproduz o MUT-001: essa mutação é uma invocação
separada, bash tests/acceptance/AUR-456.sh MUT-001, provada manualmente
durante a construção deste card (nunca automática dentro de oci-run,
mesma convenção de AUR-428/AUR-440/AUR-445). Essa invocação estagia uma
cópia descartável SEPARADA em /tmp (nunca o caminho rastreado, que já
está apagado), reintroduz os bytes exatos de
.aurumcode/rules/security.yml só nessa cópia, exporta
AUR456_MUTATION=MUT-001 para que o Unit e o E2E distingam a mutação
deliberada do RED natural (que produziria a mesma presença de arquivo, mas
sem o marcador), e confirma que a saída capturada de cada camada carrega o
rótulo AUR-456/AC-001/MUT-001 antes de aceitar a falha como a mutação
detectada. A cópia é descartada ao final.
Exit codes
| Código | Contexto | Significado |
|---|---|---|
0 |
AC-001 |
Os catorze caminhos mortos estão ausentes e os dois artefatos vivos têm lastro no código. |
0 |
MUT-001 |
A mutação de ceticismo (reintroduzir .aurumcode/rules/security.yml só na cópia descartável) foi detectada corretamente pelas camadas Unit e E2E. |
1 (rotulado AUR-456/AC-001/behavior-missing) |
AC-001 sobre uma árvore não corrigida (RED), ou MUT-001 sem o marcador AUR456_MUTATION |
Um caminho morto sobrevive, ou um artefato vivo perdeu seu lastro. |
1 (rotulado AUR-456/AC-001/MUT-001) |
Dentro da invocação MUT-001 |
A camada (Unit ou E2E) recusou a cópia mutada, como esperado. |
64 |
Seletor desconhecido (erro de uso do script). | |
69 |
Falha de infraestrutura (ex.: go ausente do PATH), nunca contada como aceite. |
Exemplo executável, sem segredo
cd /caminho/para/AurumCode
ulimit -v 8388608
GOMEMLIMIT=2GiB GOFLAGS='-mod=mod -p=1' bash tests/acceptance/AUR-456.sh AC-001
echo "exit: $?"
Saída esperada em GREEN: uma linha JSON
{"card":"AUR-456","scenario":"AC-001","result":"pass",...} e exit 0.
Diagnóstico de falha
AUR-456/AC-001/behavior-missing:dead copy still present: <caminho>— o caminho morto nomeado ainda existe; releia a seção "Apagado" acima e a auditoria original no card.AUR-456/AC-001/behavior-missing:...(variantes degenerator.go/security.yml) — a checagem cruzada contra o código falhou; o código mudou sem a remoção acompanhar, ou vice-versa.AUR-456/AC-001/MUT-001— esperado apenas durante a própria execução da mutação de ceticismo; fora dela, indica que a cópia morta de.aurumcode/rules/security.ymlvoltou a existir na árvore rastreada.- Exit
69— infraestrutura (Go ausente,mktempfalhou); nunca conta como prova de comportamento.
Nota sobre os nomes dos seletores no card
A seção "TDD proof" do card nomeia os seletores TestAUR445,
IntegrationAUR445 e E2EAUR445 — resíduo do template copiado de
AUR-445 (mesmo office, mesmo formato de card). Esses símbolos já existem
em tests/unit/AUR-445.go e tests/integration/AUR-445.go, no mesmo
pacote (unit, integration); declará-los de novo em
tests/unit/AUR-456.go / tests/integration/AUR-456.go colidiria e
quebraria go build ./... / go vet ./... sobre esses pacotes — o mesmo
problema que o próprio AUR-445 documentou contra seu resíduo de template
AUR-428 (docs/specs/AUR-445.md, seção final). Este card usa os nomes
correspondentes ao seu próprio ID — TestAUR456, IntegrationAUR456,
E2EAUR456 — mantendo o mesmo padrão de nomenclatura que todo outro card
do office já segue.
Aceites dos irmãos (host-run, nesta árvore, antes do commit)
Ambiente usado para as quatro execuções abaixo:
PATH=/home/paape/go-sdk/bin:$PATH, GOPATH=/home/paape/go (necessário
para que go run/go test resolvam github.com/gorilla/mux e
gopkg.in/yaml.v3 sem rede — GOPROXY=off neste sandbox), mais
ulimit -v 8388608, GOMEMLIMIT=2GiB, GOFLAGS='-mod=mod -p=1'.
| Card | Comando | Exit bruto |
|---|---|---|
| AUR-002 | bash tests/acceptance/AUR-002.sh AC-001 |
1 — AUR-002/AC-001/baseline-drift: legacy command behavior drift (integration exit 1): AUR-002: expected one generated document, got 2 |
| AUR-424 | bash tests/acceptance/AUR-424.sh AC-001 |
0 |
| AUR-442 | bash tests/acceptance/AUR-442.sh AC-001 |
0 |
| AUR-444 | bash tests/acceptance/AUR-444.sh AC-001 |
0 |
AUR-002 não fecha em 0 nesta árvore, e isso é pré-existente, não
introduzido por este card. tests/integration/AUR-002.go,
cmd/regenerate-docs e internal/pipeline estão fora de paths e
read_paths deste card — não podem ser corrigidos aqui. Prova de
pré-existência, reproduzida byte-a-byte em três árvores diferentes com o
mesmo ambiente:
$ git archive 6f80d6a | tar -x -C /tmp/aur456-base # base_sha exato deste worktree
$ cd /tmp/aur456-base && bash tests/acceptance/AUR-002.sh AC-001
AUR-002/AC-001/baseline-drift: legacy command behavior drift (integration exit 1): AUR-002: expected one generated document, got 2
EXIT=1
$ cd /home/paape/repos/AurumCode && bash tests/acceptance/AUR-002.sh AC-001 # checkout principal, não tocado
AUR-002/AC-001/baseline-drift: legacy command behavior drift (integration exit 1): AUR-002: expected one generated document, got 2
EXIT=1
Mesma falha, mesma mensagem, no base_sha exato deste card (antes de
qualquer commit do AUR-456) e no checkout principal não relacionado. A causa
provável é deriva de um card já integrado depois do AUR-002 original
(provavelmente o AUR-424, que trocou gomarkdoc por go/parser da
biblioteca padrão para Go — ver docs/specs/AUR-445.md — mudando quantos
documentos a pipeline legada gera por rodada); investigar e corrigir essa
deriva pertence a um card próprio, com internal/pipeline e
cmd/regenerate-docs em paths, não a este.