Pular para conteúdo

AUR-470: contexto recuperado explica impacto da mudança em outros arquivos

Absorve o legado AUR-470/526 (contexto por arquivo alterado).

Medido antes (leitura, base d8af13b2)

  • internal/context.Resolver já usava as gramáticas do AUR-522 para símbolos e imports e devolvia References (arquivo, símbolo, linha) e Dependents, mas nenhum trecho: o modelo via só que Caller.java:6 referencia priceOf, não a linha. O comentário do pacote ainda dizia "regexes over import statements" (stale desde o AUR-522).
  • O resolvedor não conhecia ignore nem arquivos de segredo: um arquivo ignorado podia virar dependente; links simbólicos já eram pulados.

Decisão

  • Pack.Snippets (snippets.go): para cada referência (um por arquivo e linha), um trecho numerado de 2 linhas antes e depois, linha cortada em 240 bytes, rotulado uso ou teste (detector de teste do analyzer.LanguageDetector, por nome e diretório, sem lista de linguagem); ordem por arquivo e linha; teto de 24 trechos com a omissão em Dropped. Um trecho não tem severidade, veredito nem regra: é contexto (AC-004); nada no engine transforma referência em achado.
  • Resolver.WithExclude: caminho excluído nunca é lido, referenciado nem recortado, e a omissão é declarada. cmd/aurumcode passa ignore + catálogo de segredo (codebaseExclude) no --base (resolveCodebaseContext), no --pr (o conjunto verificado filtrado por includedFiles) e na ferramenta codebase_context da deliberação.
  • O texto continua passando pela redação do prompt (CodebaseContext é redigido em Reviewer.preparePrompt). Nada de índice remoto nem embedding.

Como cada AC/MUT é provado (tests/acceptance/AUR-470.sh)

  • AC-001: TestAUR470CallerExcerptWithFileAndLine (contrato Java alterado, chamador não atualizado: trecho Caller.java:6 com linhas numeradas; o teste rotulado teste); o achado continua ancorado no diff pelo gate de escopo (AUR-526 AC-001).
  • AC-002: TestAUR470ExcludedFilesAndSymlinksNeverEnter.
  • AC-003: TestAUR470StableOrderAndDeclaredOmissions (duas resoluções iguais, ordem por arquivo/linha, teto declarado).
  • AC-004: TestAUR470CompatibleCallerIsContextNotADefect.
  • MUT-001: a exclusão de keepIncluded é desligada; o arquivo ignorado entra nas referências e TestAUR470ExcludedFilesAndSymlinksNeverEnter fica vermelho.

Documentação stale corrigida

  • internal/context/doc.go: "regexes over import statements" (substituído pelas gramáticas desde o AUR-522).
  • docs/configuration.md: descrição de codebase_context sem trechos nem exclusões.
  • As capturas de tutorial que mostram o JSON do contexto ganham o campo snippets; a regravação fica para o fluxo final.

Correção da revisão estática

Confirmado pela leitura: o JSON do contexto (com snippets) vai ao prompt por ReviewContext.CodebaseContext, redigido em Reviewer.preparePrompt (r.filter.Redact); pela ferramenta codebase_context, o resultado passa por Session.Redact (o mesmo filtro). Prova nova: TestAUR470SnippetsAreRedactedBeforeTheModel (canário montado em tempo de execução numa linha do chamador; o prompt capturado não o contém e contém o trecho).