AUR-446 — Os specs entregues descrevem o comportamento entregue
Documento histórico do board. Pode descrever componentes removidos; para uso atual, consulte o guia do produto.
Outcome
Cada spec de card entregue descreve o que o codigo faz hoje, e nao o estado
do dia em que foi escrito. Este card corrige seis afirmacoes desatualizadas
medidas na auditoria de 2026-08-13 e entrega o mecanismo que prova que elas
continuam corrigidas: uma verificacao estatica, offline, por grep -F sobre
o texto literal dos specs corrigidos.
O comando
bash tests/acceptance/AUR-446.sh AC-001
Dentro do profile pinado bootstrap-readonly-v1, o mesmo comando roda via:
./.board/bin/oci-run --profile bootstrap-readonly-v1 --card AUR-446
O comando nao aceita entrada de rede nem chamada de modelo: e uma verificacao
puramente textual sobre arquivos ja materializados por paths/read_paths.
O que o comando verifica
Para cada um dos seis specs corrigidos, o comando confirma, por grep -F
(correspondencia literal, nao regex), que:
- A afirmacao desatualizada (ancora negativa) esta ausente do arquivo.
- A afirmacao corrigida (ancora positiva) esta presente no arquivo.
| Spec | Afirmacao desatualizada removida | Afirmacao corrigida |
|---|---|---|
docs/specs/AUR-424.md |
"Dentro do sandbox ela sai 69" (E2E sempre sai 69 por paths fora do contrato) | "O accept selado sai 0" (paths/read_paths foram ampliados; o card esta done) |
docs/specs/AUR-425.md |
"No aurumcode docs subcommand exists" |
"subcommand delivered by AUR-426 (cmd/aurumcode/docs.go...)" |
docs/specs/AUR-428.md |
"Os demais exemplos ... (code-review, qa-testing, all-pipelines) continuam pinados por SHA" | "code-review.yml não está mais nesse grupo: o AUR-440 o repinou para a tag v1" |
docs/specs/AUR-429.md |
"No aurumcode docs subcommand exists" |
"docs subcommand from AUR-426 (cmd/aurumcode/docs.go)" |
docs/specs/AUR-437.md |
(nenhuma ancora negativa; a afirmacao original nao era falsa, so incompleta) | "Reproduzido em internal/git/githubclient/client.go:795-802" (caso residual do ultimo " b/" documentado) |
docs/specs/AUR-440.md |
"pelo AUR-437 e ainda nao foi executado" | "AUR-438 esta done: cmd/aurumcode ja publica --pr, --repo, --publicar e --na-linha" |
A correcao de docs/specs/AUR-437.md nao remove nenhuma afirmacao (a
descricao original do defeito 4 e da correcao continuam verdadeiras para o
caso que ela cobre); ela acrescenta a divulgacao do caso residual que a
correcao nao fecha. Por isso essa linha nao tem ancora negativa: o
comando so verifica a presenca da ancora positiva para este spec.
O caso residual de AUR-437.md e verificado de duas formas independentes:
por ancora textual (grep -F) e por comportamento real, atraves da API
publica de internal/git/githubclient (TestAUR446 em
tests/unit/AUR-446.go), que prova empiricamente que
extractFilePath("diff --git a/foo b/bar.go b/foo b/bar.go") retorna
"bar.go" em vez de "foo b/bar.go" — nao apenas que a prosa do spec diz
isso.
Sexto achado, incorporado apos reparo de paths: docs/specs/AUR-428.md
A auditoria original (achado 5) tambem cobre docs/specs/AUR-428.md:123-125,
que afirmava que os "demais exemplos" (code-review.yml incluido) "continuam
pinados por SHA" — falso para code-review.yml desde o AUR-440, que o
repinou para a tag v1 (ref: v1 no passo "Checkout the AurumCode release"
de .github/workflows/examples/code-review.yml); ainda verdadeiro para
qa-testing.yml e all-pipelines.yml, que continuam pinados por SHA
6f584b5987c12399bc7a85571dad4a81e28005c8.
Na primeira passagem deste card, docs/specs/AUR-428.md ficou fora do
escopo gravavel: nem paths nem read_paths do card AUR-446
(frontmatter em .board/cards/ready/AUR-446.md) listavam esse arquivo —
paths listava docs/specs/AUR-446.md duas vezes em vez de uma vez
AUR-428.md e uma vez AUR-446.md. Esse gap foi relatado em vez de
contornado silenciosamente (o mesmo padrao que docs/specs/AUR-424.md
documenta para o candidato original do AUR-424), o coordenador corrigiu o
frontmatter do card para listar docs/specs/AUR-428.md e a duplicata
sumiu, e a correcao real agora vive em docs/specs/AUR-428.md, seção "Fora
de escopo / notas" — nao mais nesta seção.
Exit codes
Rotulos exatos, tal como os quatro arquivos (tests/acceptance/AUR-446.sh,
tests/e2e/AUR-446.sh, tests/unit/AUR-446.go, tests/integration/AUR-446.go)
realmente emitem — nao uma paráfrase:
| Exit | Significado | Rotulo(s) exatos |
|---|---|---|
0 |
As cinco verificacoes passam nas tres lanes (Unit, Integration, E2E). | {"result":"pass",...} |
1 |
Ancora positiva ausente (a afirmacao corrigida nao esta no spec). | AUR-446/AC-001/behavior-missing:<spec>:missing:<ancora> (E2E e Go); AUR-446/AC-001/entrypoint_missing:<path> (arquivo deste card ausente, checado por tests/acceptance/AUR-446.sh antes de estagiar) |
1 |
MUT-001: ancora negativa (afirmacao desatualizada) foi reintroduzida. | AUR-446/AC-001/MUT-001/<spec>:stale-claim-present:<ancora> (E2E); AUR-446/AC-001/MUT-001:<spec>:stale-claim-present:<ancora> (Go, dois-pontos em vez de barra) |
1 |
Saida nao-deterministica entre as duas passagens do E2E. | AUR-446/AC-001/nondeterministic-output:<digest1>:<digest2> |
1 |
Uma lane Go falhou por um motivo que o grep de detalhe do orquestrador nao capturou. | AUR-446/AC-001/selector-exit:<pacote>:<rc> |
64 |
Seletor desconhecido. | AUR-446/AC-001/unknown-selector |
79 |
Infraestrutura: go, tr, grep ou sha256sum ausente, ou um dos read_paths (cmd/aurumcode, internal/git/githubclient, .github/workflows/examples/code-review.yml) nao esta materializado — nunca uma aprovacao nem uma reprovacao comportamental. |
AUR-446/AC-001/infrastructure/<motivo> (missing_go, missing_tr, missing_grep, missing_sha256sum, read_path_not_materialized:<path>, repo_root) |
Exemplo executavel (sem segredo)
$ bash tests/acceptance/AUR-446.sh AC-001
...
{"card":"AUR-446","scenario":"AC-001","result":"pass","specs_checked":5,"anchors_verified":9}
Nenhuma variavel de ambiente com segredo e lida por este comando; ele nao abre socket nem faz chamada de rede.
Diagnostico de falha
AUR-446/AC-001/MUT-001/docs/specs/AUR-425.md:stale-claim-present:...(ouAUR-429.md): a ancora negativaNo \aurumcode docs` subcommand exists:` voltou a aparecer no arquivo — este e exatamente o MUT-001 deste card.AUR-446/AC-001/behavior-missing:docs/specs/AUR-424.md:missing:...: a ancora positivaO accept selado sai **0**sumiu do arquivo.AUR-446/AC-001/MUT-001/docs/specs/AUR-424.md:...: a ancora negativaDentro do sandbox ela sai 69voltou.AUR-446/AC-001/behavior-missing:docs/specs/AUR-437.md:missing:...: a ancorainternal/git/githubclient/client.go:795-802sumiu do spec.- A subtest Go
AUR-437 residual...truncation is real code behaviourfalha sem nenhum rotulobehavior-missingde spec: o proprio codigo parou de reproduzir o truncamento (extractFilePathfoi corrigido para o caso residual) — nesse caso a divulgacao do caso residual emAUR-437.mdpassou a superclamar um bug que nao existe mais, e precisa ser corrigida na direcao oposta. AUR-446/AC-001/behavior-missing:docs/specs/AUR-440.md:missing:...: a ancora positivaAUR-438 esta done: \cmd/aurumcode` ja publica` sumiu.AUR-446/AC-001/MUT-001/docs/specs/AUR-440.md:...: a ancora negativarestaurado pelo AUR-437 e ainda nao foi executadovoltou.- exit
79com rotuloinfrastructure/read_path_not_materialized:<dir>:cmd/aurumcode,internal/git/githubclientou.github/workflows/examples/code-review.ymlnao esta presente no checkout — nunca tratado como reprovacao comportamental. - exit
79com rotuloinfrastructure/missing_tr(oumissing_grep,missing_sha256sum,missing_go): uma ferramenta que o script depende esta ausente doPATH. Checado explicitamente antes de qualquer verificacao para nao colapsar em falso RED sobset -euo pipefail. - exit
1com rotuloAUR-446/AC-001/nondeterministic-output:<d1>:<d2>: as duas passagens detests/e2e/AUR-446.shsobre os mesmos arquivos reais produziram transcritos diferentes — a clausula de repeticao do AC-001 falhou.
TDD proof
- Test:
tests/acceptance/AUR-446.sh::AC-001. - Red: antes das correcoes acima,
docs/specs/AUR-425.mdedocs/specs/AUR-429.mdcontinhamNo \aurumcode docs` subcommand exists:(ancora negativa presente) e nenhum dos cinco specs continha sua ancora positiva correspondente; o aceite falhava emitindo, para cada spec, tantoAUR-446/AC-001/MUT-001/:stale-claim-present:... (ancora negativa presente) quantoAUR-446/AC-001/behavior-missing::missing:... (ancora positiva ausente) — reproduzido diretamente restaurandodocs/specs/AUR-425.mda partir degit show HEAD:docs/specs/AUR-425.md(a versao pre-correcao) e rodandotests/acceptance/AUR-446.sh AC-001` sobre ela antes deste card ser aceito. Falha de compilacao, imagem, loader ou rede nao conta como RED. - Green: as edicoes de prosa acima em
docs/specs/AUR-424.md,docs/specs/AUR-425.md,docs/specs/AUR-429.md,docs/specs/AUR-437.mdedocs/specs/AUR-440.md. - Refactor: preservar as ancoras exatas, os exit codes e o formato de saida.
- Unit:
tests/unit/AUR-446.go::TestAUR446. - Contract: not-applicable — nenhum port novo e publicado.
- Integration:
tests/integration/AUR-446.go::IntegrationAUR446. - E2E:
tests/e2e/AUR-446.sh::E2EAUR446.
Nota de nomenclatura: o card .board/cards/ready/AUR-446.md cita os
seletores TestAUR428/IntegrationAUR428/E2EAUR428 na clausula "TDD
proof" — um residuo de copia do template de AUR-428 (a mesma origem do
titulo duplicado de AC-001 e da duplicata docs/specs/AUR-446.md em
paths). Todo tests/unit/AUR-*.go existente neste repositorio nomeia sua
funcao apos o proprio numero do card, sem excecao (verificado por varredura
completa de tests/unit/AUR-4*.go); este card segue essa convencao
(TestAUR446/IntegrationAUR446/E2EAUR446) e tests/acceptance/AUR-446.sh
aceita TestAUR428/IntegrationAUR428/E2EAUR428 como aliases do seletor
para quem invocar com o nome literal do card.
Security and privacy
- Data flow: repositorio ->
grep -Fsobre arquivos ja materializados -> saida sanitizada de uma linha. - Secrets: o canario
AURUM_SECRET_CANARYnao aparece em stdout, stderr, cache ou evidencia; nenhum passo le variavel de ambiente com segredo. - Least privilege: nenhum processo externo e iniciado alem de
go test(para as lanes Unit/Integration) egrep; rede, socket, mounts de host, devices e capabilities permanecem negados pelo profile.
Compatibility, migration, rollback
- Compatibility: nenhum comando ou formato ja publicado por outro card muda.
- Migration: not-applicable.
- Rollback: reverter somente os arquivos em
paths; nenhum estado externo e publicado por este card.