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 registrandoAUR-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 registrandoAUR-468/AC-003/MUT-002.