AUR-607 — Saída em pt-BR de ponta a ponta
Com review.language: pt-BR, as frases que a revisão mostra a uma pessoa
(terminal, linhas e status do gate, linhas de publicação do parecer, aviso de
arquivo pulado, achado de segredo e próximo passo do MCP) saem do catálogo
internal/i18n/catalog.yml. Com en (ou sem language), a saída fica igual
à anterior byte a byte: os textos em inglês foram copiados para o catálogo e
os testes conferem o texto antigo literal.
Textos migrados (antes → depois em pt-BR)
| onde | antes (en, mantido) | depois (pt-BR) |
|---|---|---|
internal/gate/verdict.go |
gate verdict reuse unavailable (AURUMCODE_CACHE_DIR not set): … |
reaproveitamento do veredito do gate indisponível (AURUMCODE_CACHE_DIR não definido): … |
review_base_analysis.go |
no LLM provider configured: quality review skipped; running deterministic analysis only |
nenhum provedor de modelo configurado: revisão por modelo não executada; rodando só a análise determinística |
review_base_analysis.go |
texto longo de errNoProviderConfigured (uma linha) |
seis linhas curtas: o que definir para o provedor, o formato do fixture offline, rule_id obrigatório, exemplo |
review_base_analysis.go |
--exigir-qualidade: the quality review did not run, so this run is not a clean review |
--exigir-qualidade: a revisão por modelo não rodou, então esta execução não é uma revisão completa |
review_base_publish.go |
LLM quality review did not run. The following report covers deterministic analysis only. |
A revisão por modelo não rodou. O relatório abaixo cobre só a análise determinística. |
review_gate.go (só a linha do --fail-on) |
1 finding(s) at severity error or above (--fail-on error) |
1 achado com severidade error ou maior (--fail-on error) / 3 achados … |
review_batches.go |
the diff did not fit one prompt; reviewed in N batches … |
o diff não coube em um só prompt; revisado em N lotes por diretório … |
pr.go |
could not understand the model's response (…), degrading to deterministic analysis; … |
não foi possível entender a resposta do modelo (…), voltando à análise determinística; a revisão por modelo ficou inconclusiva |
internal/render/no_findings.go |
No issues found. |
Nenhum problema encontrado. |
internal/analyzer (aviso) |
binary file, skipped: x, generated file, skipped: x |
arquivo binário, não revisado: x, arquivo gerado, não revisado: x |
internal/gate/policy.go |
review inconclusive (partial_coverage) |
revisão inconclusiva — parte do diff ficou fora da revisão [partial_coverage] |
internal/gate/scanner.go |
SAST (…) inconclusivo (sast_unavailable) |
SAST (…) inconclusivo (análise estática habilitada, mas o Semgrep não está instalado [sast_unavailable]) |
dtrack.go, analysisdata.go, dependencies.go, aviso de scanner e deps.notice.inconclusive |
… revisão inconclusiva (dtrack_secret_missing): … (código cru) |
… revisão inconclusiva (falta a chave de acesso ao Dependency-Track [dtrack_secret_missing]): … |
cmd_sbom.go |
aurumcode sbom: policy gate: review inconclusive (sbom_generation_failure) |
aurumcode sbom: policy gate: revisão inconclusiva — o SBOM não pôde ser gerado ou validado [sbom_generation_failure] |
internal/gate/verdict.go |
%d achado(s) de uma revisão concluída anterior deste conteúdo reaplicado(s) (já em português, mantido em en) |
1 achado … foi reaplicado / 2 achados … foram reaplicados |
status aurumcode/review |
2 achado(s) grave(s) no pull request #7 |
2 achados graves / 1 achado grave / nenhum achado grave |
review_base_quality.go |
reused 3 file(s) from cache (not resent to the model) |
3 arquivos reaproveitados do cache (não reenviados ao modelo) |
review_pr_model.go (--pr sem provedor) |
texto longo de errNoProviderConfigured |
as mesmas linhas curtas do --base |
| linha final sem achados | …; inconclusivo: a, b (códigos) |
…; inconclusivo: <frase> [a]; <frase> [b] |
status aurumcode/policy-gate |
falha: achado(s) reprovam o gate no pull request #7: <linhas> (corte no meio da palavra) |
falha: 1 achado reprova o gate — <título> (<severidade>) em <arquivo:linha>; detalhes no parecer |
| status, inconclusivo | inconclusivo: revisão inconclusiva (bloqueio) no pull request #7: review inconclusive (x) |
inconclusivo: a revisão não cobriu tudo e o gate reprova por configuração — <frase> [x] (… só avisa … em warn) |
| status, aprovado | aprovado: gate de política aprovado no pull request #7 |
aprovado: gate de política aprovado |
review_pr_publish.go |
review formal "APPROVE" publicado no pull request #7 (0 comentário(s) na linha). |
parecer publicado na PR #7 como aprovação (sem comentários na linha). |
review_pr_publish.go |
parecer publicado no pull request #7 (2 comentário(s) na linha). |
parecer publicado na PR #7 (2 comentários na linha). |
| achado do Gitleaks | <descrição>. in commit <id> (gitleaks <v>) (rule gitleaks:<regra>) |
Segredo ou credencial escrito no código (regra \gitleaks: |
MCP next_step / how_to_fix |
textos em inglês | catálogo; inconclusivo diz o que configurar (LLM_API_KEY/LLM_BASE_URL no ambiente que inicia aurumcode mcp, ou instalar o scanner que faltou) |
.github/workflows/review.yml |
::error::AurumCode needs LLM_API_KEY and LLM_BASE_URL repository secrets; … |
::error title=AurumCode sem provedor de modelo:: com o efeito exato (a revisão não roda e o status aurumcode/policy-gate não é publicado; com o status exigido, a PR fica esperando), onde cadastrar e como repassar (secrets: ou secrets: inherit) |
plurais (s) do catálogo |
%d arquivo(s) …, %d achado(s) …, item(ns) |
forma _one para 1 e plural correto; affected_tests e coverage_summary reescritos sem concordância de número |
aviso de cobertura ignore |
… a ausência deles no contexto NÃO prova … |
1 arquivo ignorado (regra \ignore` do repositório ou binário): não foi revisado e não entra na cobertura. Ignorado não significa aprovado.` |
Cada motivo de inconclusivo tem frase própria em gate.reason.<código>
(internal/gate/reasons): modelo e cobertura, as três falhas de cada
categoria de scanner (sast, secrets, lint), dados de análise,
Dependency-Track, verificação de dependências, auditoria/SARIF,
deliberation_limit:<limite> e contributor_error:<fonte>. Código sem frase
no catálogo sai como motivo sem descrição no catálogo [código], nunca em
branco. Em en o texto do motivo é o próprio código.
Onde o idioma vem
Todas as linhas acima rodam depois de a configuração ser lida
(reviewLanguage da sessão, gate.Run.Language, SessionOutcome.Language
no MCP). Exceções documentadas: failedAnswer do MCP (a sessão não rodou e
não leu configuração) usa o idioma padrão; o review.yml não conhece
review.language e sai em pt-BR (público-alvo), com os nomes técnicos.
Compatibilidade
- en: os textos do catálogo reproduzem a saída anterior; o status do gate, a
linha do parecer formal e as dicas do MCP em en seguem o código anterior
(
legacyGateStatusDescription,legacyReviewCheckDescription,formalReviewLine,parecerLine,inconclusiveHints). As formas_oneem en são o plural com1. - Decisão do gate, exit code, ordem do parecer, JSON de auditoria, SARIF e
nomes de campos não mudam. A auditoria e o SARIF são dado de máquina e não
mudam de idioma: o
reasonda auditoria juntagate.Result.AuditLines()(cada linha mostrada em pt-BR guarda o texto anterior, com o código cru), e a mensagem do achado de segredo no SARIF é a do motor (Scan.ToolMessages,complianceArtifactInputs.machineMessage). As linhas de dependência já eram escritas no idioma da revisão antes deste card e continuam como estavam. - O status
aurumcode/policy-gatereconhece a linha de inconclusivo pelo modelo do catálogo (reasons.IsLine), não pelas palavras em inglês; uma reprovação sem achado nomeável (dependências, Dependency-Track) usagate.status.breach_linescom a reprovação antes da linha de inconclusivo (AUR-538 AC-007). gate.EvaluateGate,gate.ApplyScannerGate,render.NoFindingsLineepublishPolicyGateStatus/publishCheckStatusmantêm a assinatura (en); as variantes com idioma sãoEvaluateGateIn,ApplyScannerGateIn,NoFindingsLineIn,publishPolicyGateStatusInepublishCheckStatusIn.
Provas
tests/acceptance/AUR-607.sh (cópia de go.mod go.sum cmd internal pkg):
| id | testes |
|---|---|
| AC-001 | TestAUR607BaseReviewSpeaksTheReviewLanguage (review --base real, sem provedor, pt-BR e en), PullRequestWithoutProviderSpeaksTheLanguage, ReappliedVerdictCount, ReviewCheckAndCacheLinesFollowTheLanguage, RequiredQualityLineFollowsTheLanguage, NoProviderTextIsShortLinesInPortuguese, FailOnLineCountsInTheLanguage, TerminalTextsBothLanguages, SkippedFileNoticeFollowsTheLanguage, PublicationLinesFollowTheLanguage, NextStepFollowsTheLanguage, HowToFixFollowsTheLanguage, NewKeysExistInBothLocales, EnglishSingularIsThePluralWithOne, PortugueseHasNoParenthesizedPlural, LookupReportsMissingKeys |
| AC-002 | TestAUR607InconclusiveReasonIsASentenceWithItsCode (todos os códigos), DTrackReasonFollowsTheLanguage, AuditAndSARIFIgnoreTheLanguage, AuditLinesIgnoreTheLanguage, InconclusiveLineBothLanguages, ScannerInconclusiveLineFollowsTheLanguage, PolicyLineAndFirstBreach, ClosingLineNamesTheReasons, PolicyGateStatusInPortuguese |
| AC-003 | TestAUR607PolicyGateStatusInPortuguese, PolicyGateStatusCutsAtAWord, PolicyGateStatusEnglishUnchanged, BreachWithoutFindingKeepsTheBreachAhead |
| AC-004 | TestAUR607GitleaksFindingLeadsWithTheCatalogLabel, SARIFKeepsTheEngineMessage |
| AC-005 | grep no review.yml (título, onde cadastrar, secrets: inherit, sem o texto antigo) |
| MUT-001 | linha de terminal volta ao inglês fixo → TestAUR607BaseReviewSpeaksTheReviewLanguage cai |
| MUT-002 | motivo volta ao código cru → TestAUR607InconclusiveReasonIsASentenceWithItsCode cai |
AC-006 (saídas gravadas e capturas dos tutoriais) é provado por
run.sh --check de cada tutorial, regravado com a imagem desta árvore. Os
exemplos dos tutoriais com .aurumcode/config.yml agora declaram
review.language: pt-BR.
Fora deste card (pendências)
aurumcode fix:working tree does not match the suggestion's current_codevem deinternal/apply(checkAgainstFile), fora dospaths, sem erro tipado; o comando também não lê a configuração.fixvalidate.goficou como estava para não traduzir só metade da mesma mensagem.- Citação
(rule x: Título)dos achados do modelo:cmd/aurumcode/cache_redaction.goe a regexruleCitationdeinternal/gate/sources.goleem esse formato; só o achado de scanner de segredos usa(regra `x`). - Linhas ainda fixas:
gate contributor %s failed,%d ci_analysis item(s) discarded,reviewing the same range computed from the verified checkout(antes de a configuração da PR ser lida), avisos de descarte do modelo (internal/review/reviewer.go,scope.go),aurumcode dependencies,xbomerealimentacao,diff too large(o detalhe medido vem só na mensagem do analisador). - Prefixo
policy gate:das linhas do gate (nome do checkaurumcode/policy-gate): mantido nos dois idiomas, porquetests/acceptance/AUR-567.shprocurapolicy gate: .*origem <fonte>na gravação do tutorialgate. Location: LEFT (removed line in base)do relatório do terminal:TestAUR514AC002TerminalAndPRShowTheSameFieldsfixa esse texto nos dois idiomas.- Licença de dependência desconhecida: o motivo é texto livre do pacote
internal/dependencies, não código. - Âncoras de mutação atualizadas em aceites antigos:
tests/acceptance/AUR-572.sh(render.NoFindingsLineIn(language, inconclusiveReason)emmain.go) etests/acceptance/AUR-533.sh(ApplyAnalysisDataGate(ctx, run.Language, run.Cfg.AnalysisData)); os blocos<!-- arquivo: … -->dedocs/tutorialsacompanham osconfig.ymlcomlanguage: pt-BR.
Aviso de triagem do AUR-608 (revisão de 2026-10-09)
Depois do rebase sobre o AUR-608, o aviso notice.triage_not_run ainda
mostrava o motivo como código cru em pt-BR (… não ocorreu (quality_skipped)).
Agora o motivo passa por reasons.Text: em pt-BR vem depois de um travessão,
como frase com o código entre colchetes; em inglês continua o próprio código
entre parênteses, byte a byte. Testes: TestAUR607TriageNoticeShowsTheReasonSentence
e as expectativas pt-BR de triage_failclosed_test.go; exemplo atualizado em
docs/configuration.md.