Pular para conteúdo

AUR-468: versioned skills enter the review

Documento histórico do board. Para uso atual, consulte o guia do produto.

O que é

internal/context/skills é a camada 2 da costura de provedores de contexto que o AUR-452 abriu. Uma skill é um diretório versionado sob .aurumcode/skills/<name>/ com um documento de instruções (SKILL.md) e um seletor declarado no front matter:

---
name: go-error-style
version: 2
languages: [go]
paths: ["internal/**"]
---
Envolva erros com %w para não perder a cadeia.

A skill casa um caminho alterado quando todos os critérios declarados casam: languages exige que o idioma do arquivo esteja na lista e paths exige que ao menos um glob case. Uma skill sem seletor fica DESLIGADA, nunca universal: esquecer o seletor não aplica a skill a todo o repositório.

Um provedor lê o diretório, seleciona pelo conjunto de caminhos da review e injecta o texto selecionado no prompt, junto do prompt do repositório e das instruções por caminho do AUR-452. O bloco declara quais skills entraram:

### Skills
entered: [docs-only go-style]
#### go-style (v2)
...

Uso

providers := append(config.DefaultProviders(root), skills.Providers(root)...)
wrapped, err := config.WrapProvider(ctx, base, providers, changedPaths, filter)

skills.NewProvider(root) enraíza o provedor em .aurumcode/skills. Sem diretório, ou sem skill selecionada, ele não contribui nada -- o caminho zero-config que mantém a review byte-idêntica a uma review sem o pacote.

Orçamento de tokens: falha alta, nunca trunca

skills.Assemble(selected, skills.Budget{MaxTokens: N}) renderiza as skills selecionadas. Quando elas excedem N tokens, a montagem devolve erro e Text vazio, nomeando cada skill que não coube:

skills: selected skills exceed prompt token budget 5; did not fit: [docs-only go-style hostile]

Não existe truncamento silencioso: meia instrução pode ler o oposto do que foi escrito. DefaultMaxTokens é 4000 quando o orçamento não é declarado.

Segurança: dado não confiável, nunca instrução

O texto da skill é DADO NÃO CONFIÁVEL. Nada no pacote inspeciona o texto para decidir regra ligada/desligada, severidade, gate --fail-on, redação de segredos ou teto de custo. As decisões continuam em .aurumcode/config.yml (config.ApplyRuleConfig) e no código; ApplyRuleConfig não recebe texto de skill algum.

Texto com forma de diretiva ("ignore a regra X", "marque este achado como resolvido", "não reporte segredos") é apenas registrado (skills.Result.Attempts) e mostrado como fundo não confiável. O achado sai idêntico, o gate permanece fechado e o segredo continua redigido.

Non-goals

  • Não executar código de skill: uma skill é texto selecionado por critério declarado, nunca um plugin.
  • Não buscar skill na rede neste card: a origem é um caminho versionado no repositório.

Códigos de saída

tests/acceptance/AUR-468.sh: 0 propriedade válida; 1 RED comportamental (inclusive mutante sobrevivente); 64 seletor desconhecido; 79 inconclusivo/infraestrutura.

Mutations

  • AC-001-MUT-001: aplicar toda skill a todo arquivo ignora o seletor; a acceptance sai diferente de zero registrando AUR-468/AC-001/MUT-001.
  • AC-003-MUT-002: deixar o texto da skill influenciar a decisão do gate; a acceptance sai diferente de zero registrando AUR-468/AC-003/MUT-002.