AUR-584: cmd/aurumcode por responsabilidade, textos em catálogo, perfis em YAML
Medido antes (base 2b8ca078, mais o merge do AUR-588 em 155a6dc5)
cmd/aurumcode/main.go970 linhas (doc de pacote de 138 linhas que era changelog de cards),pr.go1092,passes.go611; 16 arquivos de produção com doc de pacote citando card (// AUR-515: ...etc.).reviewCopycom 37 campos de texto por idioma em Go (reviewCopyFor), e ramoslanguage == "pt-BR" || language == "pt"com literais próprios empasses.go(2),scanner_pass.go,provider_failure.go,pr_history.go,checkout_identity.go(5 ramos) epr.go(HasPrefix(language, "pt"));internal/render/summary.goechangelog.gocom os seus.internal/prompt/parser.go924 linhas com 14regexp.MustCompilepor chamada.- Perfis built-in de
internal/reviewprofilecomo[]Specliteral em Go;team.godecodificava o YAML do time com a sua própria cópia do scan de cláusulas recusadas. selectProvidereselectProviderForModelrepetiam a leitura deAURUMCODE_LLM_FIXTUREe deLLM_API_KEY/LLM_BASE_URL.- Funções exportadas com parâmetro
bool:render.BuildSARIFLog,render.WriteSARIF(executionSuccessful),render.BuildAuditRecord(complete); fora depaths:gate.ReuseOrStoreGateVerdict. - Um
SKILL.mdmalformado no repositório derrubava todos os skills do repositório (skills.LoadSourceparava no primeiro erro).
O que mudou
cmd/aurumcode:main.go(316) fica com a entrada,fix, a seleção de provider com um leitor único do ambiente (providerFromEnv) eprintFindings; saíramfix_suggestions.go,severity.go,local_diff.go,security_output.go,exit_codes.go,provider_selection.go.pr.go(245) fica com as opções, o status do check, o cliente e a origem do changelog do PR; saírampr_remote.go,pr_diff_filters.go,pr_inline_format.go,pr_summary_format.go,review_memory.go,review_copy.go.passes.go(186) fica com o changelog e a nota de cobertura; saíramreview_coverage.go,local_report.go,codebase_context.go. Cada arquivo tem um doc de conceito curto, sem número de card.internal/i18n:catalog.ymlembutido (pt-BR e en, 63 chaves: os 37 textos dereviewCopy, os avisos decmde os rótulos de resumo e changelog deinternal/render),Text/Format,LocaleOf,Parseque recusa locale ausente, chave só num idioma e verbos de formatação diferentes. O catálogo é lido no primeiro uso; um catálogo inválido para o processo no primeiro texto, nunca publica revisão meio traduzida. Os textos foram extraídos dos literais Go por script, conferidos byte a byte contra a fonte.- Escolha de idioma unificada em
i18n.LocaleOf:ptoupt-*(sem diferenciar caixa) é português, o resto inglês. Para os valores que chegam ao produto (config.NormalizeReviewLanguagesó devolveptept-BRentre os portugueses) a saída é a mesma de antes; para entradas fora da lista (pt-PTdireto numa função) os ramos exatos decmdresponderiam inglês e agora respondem português, comointernal/rendereformatInlineIssueForLanguagejá faziam. internal/reviewprofile:builtin.ymlembutido, decodificado pordecodeProfiles(o mesmo deLoadTeam: scan de cláusulas recusadas,KnownFields), compilado porcompileSpeccomo antes.internal/prompt:parser.go(197) só comParseReviewResponse; saíramparse_error.go,parser_degraded.go,parser_json.go,parser_line_comments.go,parser_validate.go,parser_text.go, e os padrões emparser_patterns.go(o deParseTestResponsedepende da linguagem: cache por linguagem, compilado uma vez por processo, mesmo padrão de antes).internal/render:BuildSARIFLog(toolVersion, findings, inconclusiveReason)eWriteSARIF(..., inconclusiveReason, filter)(motivo vazio = execução bem-sucedida, a regra que o único chamador já usava);BuildAuditRecord(..., coverage AuditCoverage).- Fechamento (a):
skills.LoadSourceSkippingMalformeddescarta só oSKILL.mdmalformado do repositório com o avisorepository skill <caminho>/SKILL.md unavailable, the other skills still apply: <erro>; a política central continua emLoadSourcee falha fechado nomeando o arquivo.docs/tutorials/skills.mddiz que globs vão entre aspas. - Fechamento (b): comentários em
policygate.go,review_cache.goeaur513_test.goapontam paraconfig.BuildContextBlockWithWarningse o bloco de contexto na evidência do prompt. - Fechamento (c):
docs/architecture.mdem português; a seção## Layerse a sua tabela ficaram byte a byte; os pontos de extensão em negrito foram traduzidos earchitecture_doc_test.goos procura em português.
Guardas (cmd/aurumcode/structure_test.go)
TestProductionFilesStayShort (400 linhas), TestPackageDocNamesNoCard,
TestNoBoolParameterInExportedFunction (cmd, i18n, prompt, render,
reviewprofile, context), TestNoLanguageBranchOutsideCatalog (literal de
etiqueta portuguesa em cmd ou render), TestEveryCatalogKeyUsedExists.
Em internal/prompt: TestParserCompilesPatternsOnce. Em internal/i18n:
TestEveryKeyExistsInEveryLocale, TestCatalogMissingKeyIsRefused,
TestCatalogVerbMismatchIsRefused, TestLocaleOf.
AC-003: digest fixo
TestAUR584BuiltinProfilesKeepThePromptDigest fixa o sha256 das assinaturas
e prefixos de prompt dos quatro built-ins, medido na árvore antes da mudança:
f7c22d8d6452d8b8de3c36ccf8e9844aa19741156373570d7e02f3ff1841f2bd. O mesmo
valor sai do YAML.
Âncoras de aceites concluídos
Nenhuma âncora de mutação de aceite concluído mudou de arquivo: cada linha
que um script edita ficou, uma vez, no arquivo que o script nomeia
(AUR-431, 436, 439, 443, 448, 450, 473, 476, 489, 499, 500, 502, 504, 505,
543, 565, 468, 572, 577). Duas formas de prova:
- edição aplicada a uma cópia e
go vetno pacote, na árvore final: AUR-431, 436, 439, 443, 450, 476, 489 (MUT-003), 499 (2), 500 (3), 502, 504, 505 (2), 543, 572, 577 compilam (oerrNoProviderConfigurede a origem do changelog do PR ficaram emmain.goepr.goporque as mutações do AUR-436 e AUR-504 removem o último uso deerrorsdesses arquivos); - seletores executados na árvore final: AUR-473 MUT-001/002
rejected, AUR-542 AC-001-MUT-001pass, AUR-513 AC-004-MUT-001pass, AUR-489 MUT-001pass, AUR-576 AC-001..003 e MUT-001/002pass; AUR-565, 572, 579 e 583allpassam.
Resultados iguais no main (b0407773), portanto anteriores a este card:
AUR-448 AC-001-MUT-001 not-rejected, AUR-489 MUT-002/003
mutation-not-detected, AUR-513 AC-001/AC-003-MUT-001
mutation-anchor-missing, AUR-576 AC-004 go-test-failed (o teste de
git repack abaixo). Âncoras já ausentes na base: AUR-438, 449, 451, 453,
455, 458, 490, 513 (main.go), 515. O oci-run --card AUR-576 termina em
infraestrutura (no space left on device ao linkar os testes).
Fora do escopo dos paths
- Seleção de provider em
internal/llm:internal/llmnão está empaths; a duplicação foi removida dentro decmd/aurumcode(providerFromEnv). internal/gate/exceptions.goainda escolhe o idioma com literal próprio, egate.ReuseOrStoreGateVerdictrecebebool;internal/gatenão está empaths.
Falhas pré-existentes do ambiente
TestAUR536PackedRepositoryWithoutGitIsUnverifiable (cmd/aurumcode) e
TestOpenRepo_GitBinary_PackedObjects (internal/analyzer) falham no
container compartilhado também na base 2b8ca078 (git repack com git
2.54.0); não são deste card.
Provas
Todas no container compartilhado, em série, sobre a árvore final:
bash tests/acceptance/AUR-584.sh all:AUR-584/AC-001/pass,AC-002/pass,AC-003/pass,AC-004/pass(e2e, fechamento de skills e--checkdos 18 tutoriais),AUR-584/all/pass.MUT-001:passes.go:28:17: language tag "pt-BR" outside the internal/i18n catalog/--- FAIL: TestNoLanguageBranchOutsideCatalog/AUR-584/MUT-001/red.MUT-002:i18n: catalog: key "notice.history_unavailable" exists in en but not in pt-BR/--- FAIL: TestEveryKeyExistsInEveryLocale/AUR-584/MUT-002/red.MUT-003:built-in profile prompt digest = 9c6562e3..., want f7c22d8d.../--- FAIL: TestAUR584BuiltinProfilesKeepThePromptDigest/AUR-584/MUT-003/red.AUR-583.sh all,AUR-579.sh all,AUR-565.sh all,AUR-572.sh all,AUR-561..564.sh all: exit 0.AUR-576.sh all: sóTestAUR536PackedRepositoryWithoutGitIsUnverifiablefalha (pré-existente, acima).- Tutoriais: imagem
aurum-tutoriais:aur584construída desta árvore, os 18run.sh allcom exit 0,--checkok em todos,expected/sem edição. bash scripts/docs/capturas.sh(229 imagens) eAUR-588.sh all:AUR-588/all/pass;scripts/docs/build.sh: 0 avisos.go vet ./...limpo;go test -p 1 ./...: só as duas falhas pré-existentes do ambiente.