AUR-522: o review e o gate funcionam em repositorio de qualquer linguagem
Documento historico do board. Para uso atual, consulte o guia do produto.
Decisao do runtime
A estrutura do codigo vem de gramaticas tree-sitter mantidas pela comunidade,
lidas por um runtime em Go puro: github.com/odvcencio/gotreesitter v0.55.1
(MIT, sem cgo, go 1.22, dependencias golang.org/x/sync e gopkg.in/yaml.v3).
Confirmado em 2026-10-02: o README declara "No CGo, no C toolchain" e 206
gramaticas; go build ./cmd/aurumcode compila offline na imagem selada. A
alternativa (cgo) e proibida pelo card; nao foi preciso escolher outra.
O runtime fica atras de uma interface pequena, grammar.Provider
(Languages, Detect, Analyze), em internal/grammar/provider.go. Um unico
arquivo (runtime.go) importa o runtime; internal/context e
internal/analyzer recebem o Provider por injecao
(Resolver.WithGrammar, NewLanguageDetectorWith, NewDiffAnalyzerWith) e
nao conhecem o runtime. Trocar de runtime e trocar runtime.go.
Nenhum nome de linguagem aparece em codigo Go novo: a lista de gramaticas e
enumerada em tempo de execucao (Provider.Languages), a deteccao por nome e
shebang e a do proprio runtime, e simbolos/imports saem da arvore (query de
tags do runtime mais os campos name da gramatica). A unica tabela e dado, nao
codigo: internal/analyzer/language_catalog.yml agrupa nomes de gramatica em
categorias (backend, documentation, config...). Gramatica fora do catalogo e
categoria other, tratada como codigo revisavel (falha fechada).
Substituido, nao estendido: as regexes e familyOf de internal/context/extract.go,
a tabela de extensoes e as listas de internal/analyzer/language.go, e os
extratores de funcao por linguagem de internal/analyzer/diff.go.
O que o review e o gate fazem agora
- Binario e detectado pelo conteudo (
grammar.LooksBinary: NUL ou maioria de bytes que nao sao texto), nunca pelo nome. Arquivo que se declara gerado (LooksGenerated) tambem fica fora do alcance. Ambos viramDiffNoticecomReason(binary,generated,too large). - Arquivo fora do alcance entra no aviso de cobertura com o motivo, conta como
"nao revisado por completo" (o gate aplica
inconclusiveda politica) e retira a aprovacao do veredito (marcador do motor, que o modelo nao forja). - Arquivo sem gramatica segue para o modelo (so o texto) e e declarado no parecer: "nao tem gramatica no runtime: contexto estrutural nao produzido". Essa lacuna sozinha nao torna o review inconclusivo; so a politica decide.
- Achado da politica em Terraform bloqueia como em Go (
exitFindings). - Implementacao:
cmd/aurumcode/structural_coverage.go(uma funcao chamada pelos caminhos --base e --pr),passes.go(aviso),internal/analyzer/textdiff.go.
Dependencia e imagem selada (procedimento do AUR-534)
- Cache de modulos do projeto preenchido por container nao-root com rede
(
$HOME/go/pkg/mod-aurumcode, sumdb montado a parte):go get github.com/odvcencio/gotreesitter@v0.55.1, semgo mod tidy(quebra num import legado preexistente, fora deste card). go mod downloaddo Dockerfile passou ago mod download all: sem argumentos ele nao baixagolang.org/x/sync, exigido por parte do runtime.- Imagem reconstruida a partir do Dockerfile versionado e do
go.mod/go.sumnovos (contexto limpo): tagaurum-bootstrap-go-bash:1.27.1-2026-10-02b,.Ide digestsha256:3aa0ce99e30b6548535a4009e8c9496f6953b10fd864895154633f2d7de5fee2. - Repinagem como no AUR-534:
imagedos 10 locks,lock_digestde cada profile e de cada entrada deregistry.v1.json, eimage_set_digest=sha256("aurum-bootstrap-go-bash@sha256:<digest>")=e082db45c52a651bf8285f46023d1ce7f23508a650c34630b16324d705809845(formula reproduzida com a imagem antiga:82a807bb...). - Smoke test (probe do
oci-run) na imagem nova:command -v bash->/bin/bash;go version->go1.27.1 linux/amd64.
Gramaticas enumeradas em tempo de execucao
Provider.Languages() devolve as 206 gramaticas do runtime (teste
TestLanguagesEnumeratedAtRuntime); a lista nao e copiada para o repositorio.
Resultado do corpus
internal/grammar/testdata/corpus (Java, C#, Kotlin, PHP, Ruby, Terraform,
YAML de CI, Dockerfile, um arquivo gerado e um texto de extensao desconhecida;
o binario pequeno e criado em tempo de teste). Saida medida:
Java -> java, C# -> c_sharp, Kotlin -> kotlin, PHP -> php, Ruby ->
ruby, Terraform -> hcl, CI -> yaml, Dockerfile -> dockerfile; simbolos
extraidos em Java/C#/Kotlin/PHP/Ruby/HCL. notes.zzqx -> sem gramatica,
declarado. bash tests/acceptance/AUR-522.sh all cobre AC-001..AC-004 e a
mutacao AC-001-MUT-001 (aplicada numa copia).
Caminho --pr: binario, gerado e arquivo nao inspecionado
O --pr nao tem blobs na API (binario chega sem patch), entao a deteccao usa o
checkout verificado do AUR-536 e a mesma funcao do --base:
analyzer.ClassifyBlob(path, content)(exportada detextdiff.go) e o unico classificador de conteudo (binario, gerado, grande); o--basee o--prpassam por ela.uninspectedPRNotices(diff, verifiedDir)(cmd/aurumcode/structural_coverage.go) le cada arquivo alterado do checkout verificado (so arquivo regular, leitura limitada); sem checkout legivel, cai para as linhas adicionadas/de contexto do patch; sem nenhum dos dois, declara "nao revisado: sem patch (binario ou grande)" (NoticeReasonNoPatch). Nada sem conteudo inspecionado conta como revisado.- Os notices alimentam
mergeReviewCoverageeapplyStructuralCoverage, que aciona a retencao de aprovacao (PolicyGateWithheldKey, do motor). - Rename puro sem mudanca e sem checkout nao se distingue de binario no diff e e declarado "sem patch": decisao conservadora.
Mutacoes provadas (aplicadas numa copia, em tests/acceptance/AUR-522.sh)
- AC-001-MUT-001: pular em silencio o arquivo sem gramatica (sem declaracao)
deixa
TestAUR522CorpusEveryFileReviewedOrDeclaredvermelho. - AC-004-MUT-001: o
--prvoltar a passar notices nulo deixa vermelhos os tres testes--pr(binario, gerado, sem checkout e sem patch).
O que ficou de fora
- O ruido de simbolos: a varredura do campo
namepode incluir nomes que nao sao definicoes (por exemplo o pacote de um import Java). E contexto, nao gate. internal/prompt(por exemploisCommentLine) einternal/context/skillsainda carregam nomes de linguagem como literais; com os nomes do runtime (bash) a heuristica de comentario cai no padrao//. Fora depathsdeste card; tratado no AUR-559.- Nenhum linter real (AUR-492).