Skill: wiki-lint
Implementação do conceito de "lint" da LLM Wiki do Karpathy adaptada ao vault de advocacia. Detecta inconsistências silenciosas que se acumulam sem monitoramento.
O que a skill faz
Roda cinco verificações no vault Obsidian:
- Wikilinks quebrados. Encontra
[[X]] apontando para arquivo inexistente. Considera basename, caminho relativo e aliases do frontmatter na resolução.
- Tags fora do vocabulário canônico. Compara todas as tags (frontmatter + inline) com
_tags.md. Sinaliza tags não cadastradas (ex.: #bancário quando o canônico é #bancario).
- Páginas órfãs. Arquivos sem nenhum incoming wikilink. Exclui arquivos estruturais (
_index, _MOC, MOC-*, _template, _tags, Home, _checkpoint*) e arquivos abaixo de 200 caracteres (stubs/placeholders).
- Conceitos órfãos. Precedentes padronizados (Tema, EAREsp, EREsp, REsp, Súmula, ADI, IRDR) citados em ≥2 arquivos sem ficha consolidada em
Precedentes/. Sugere criação da ficha.
- Divergências em precedentes. Mesmo precedente referenciado com datas diferentes em arquivos distintos (ex.: EAREsp 1280825 com "30/03/2021" em uma ficha e "30/03/2022" em outra).
Uso
python ~/.claude/skills/wiki-lint/scripts/wiki_lint.py "C:/Users/gabri/OneDrive/Documentos/Obsidian Vault"
Argumentos opcionais:
--saida <arquivo.md> — caminho explícito do relatório (default: <vault>/_lint/lint-YYYY-MM-DD.md)
--orfa-min-tamanho <chars> — limiar mínimo para considerar arquivo como órfão real (default: 200)
Sem dependências externas: usa apenas stdlib (re, pathlib, collections).
Regras de uso pela Claude
- Rodar antes de iniciar trabalho de fôlego no vault (ex.: criar nova área, refatorar taxonomia, ingerir lote de precedentes). O relatório aponta dívida acumulada que vale resolver antes de adicionar mais conteúdo.
- Após o lint, abrir o relatório no Obsidian (não só ler o stdout). Os wikilinks no relatório são clicáveis e levam direto ao arquivo problemático.
- Cadência sugerida: rodar semanalmente (segunda de manhã, junto com a rotina de prazos). Ou quando o usuário mencionar sintomas de inconsistência ("não acho aquela tese", "citei o precedente errado").
- Não corrigir automaticamente. A skill apenas detecta. Cada categoria pede julgamento humano: tag fora do vocabulário pode ser typo (corrigir) OU candidata a entrar no vocabulário (atualizar
_tags.md).
- Ao corrigir wikilinks quebrados, verificar se o destino existia e foi renomeado vs. nunca existiu. Renomeação: ajustar todos os incoming. Inexistente: criar a ficha ou remover a referência.
- Conceitos órfãos têm prioridade alta: cada precedente citado ≥3x sem ficha é dívida que pesa nas peças (re-pesquisa de zero, citações inconsistentes). Criar ficha em
Precedentes/ consolidando.
- Páginas órfãs nem sempre são lixo: pode ser ficha boa esquecida do MOC. Antes de deletar, ver se faz sentido linkar do MOC da área.
Exemplo de saída
# Wiki Lint — 2026-04-30
| Categoria | Total |
|---|---:|
| Wikilinks quebrados | 3 |
| Tags fora do vocabulário | 5 |
| Páginas órfãs | 12 |
| Conceitos órfãos | 4 |
| Divergências em precedentes | 2 |
## 1. Wikilinks quebrados
**[[Teses/rmc-irdr-tema5-tjam]]** cita destinos inexistentes:
1. `[[Tema 5 TJAM]]`
## 4. Conceitos órfãos
### EAREsp 1280825
Citado em 5 arquivo(s):
1. [[Teses/prescricao-consignado]] (data citada: 30/03/2021)
2. [[Modelos/ReplicasRMC/_MOC]] (data citada: 30/03/2021)
...
> Sugestão: criar `Precedentes/earesp-1280825.md` consolidando.
## 5. Divergências em precedentes
### EAREsp 1280825
Datas distintas encontradas: 30/03/2021, 30/03/2022
1. [[Teses/prescricao-consignado]] → **30/03/2021**
2. [[Aprendizado/X]] → **30/03/2022**
Limitações conhecidas
- Precedentes em formato livre não são detectados. Captura apenas padrões
Tema NNN, EAREsp NNN, REsp NNN, Súmula NNN STF/STJ/TST, ADI NNN, IRDR NNN. Casos como "Súmula Vinculante 47" ou "AgInt no AREsp" não entram (extender padrões em PRECEDENTE_PATTERNS do script).
- Aliases do frontmatter são lidos para resolução de wikilinks, mas apenas se a tag estiver bem formada (
aliases: [a, b] ou aliases:\n - a\n - b).
- Não detecta contradições semânticas. Se duas fichas dizem coisas opostas sobre o mesmo precedente sem divergência de data, a skill não pega — isso pede leitura humana.
- Tags em texto corrido fora de frontmatter podem ser falsos positivos se o autor escreveu, p. ex.,
o#1 (não é tag, é "número um"). A regex pede # precedido de espaço/início e seguido de letra; mas casos como \#literal não são tratados.
Ver também
- Skill
obsidian-markdown — sintaxe Obsidian completa (caso de criar fichas novas a partir do relatório)
- Memória
reference_autoresearch.md — origem do conceito (Karpathy)
- Memória
feedback_rag_processos.md — por que descartamos RAG vetorial e mantemos a wiki como fonte canônica
1---2name: wiki-lint3description: Skill: wiki-lint4---56# Skill: wiki-lint78Implementação do conceito de "lint" da [LLM Wiki do Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) adaptada ao vault de advocacia. Detecta inconsistências silenciosas que se acumulam sem monitoramento.910## O que a skill faz1112Roda cinco verificações no vault Obsidian:13141. **Wikilinks quebrados**. Encontra `[[X]]` apontando para arquivo inexistente. Considera basename, caminho relativo e aliases do frontmatter na resolução.152. **Tags fora do vocabulário canônico**. Compara todas as tags (frontmatter + inline) com `_tags.md`. Sinaliza tags não cadastradas (ex.: `#bancário` quando o canônico é `#bancario`).163. **Páginas órfãs**. Arquivos sem nenhum incoming wikilink. Exclui arquivos estruturais (`_index`, `_MOC`, `MOC-*`, `_template`, `_tags`, `Home`, `_checkpoint*`) e arquivos abaixo de 200 caracteres (stubs/placeholders).174. **Conceitos órfãos**. Precedentes padronizados (Tema, EAREsp, EREsp, REsp, Súmula, ADI, IRDR) citados em ≥2 arquivos sem ficha consolidada em `Precedentes/`. Sugere criação da ficha.185. **Divergências em precedentes**. Mesmo precedente referenciado com datas diferentes em arquivos distintos (ex.: EAREsp 1280825 com "30/03/2021" em uma ficha e "30/03/2022" em outra).1920## Uso2122```bash23python ~/.claude/skills/wiki-lint/scripts/wiki_lint.py "C:/Users/gabri/OneDrive/Documentos/Obsidian Vault"24```2526Argumentos opcionais:2728- `--saida <arquivo.md>` — caminho explícito do relatório (default: `<vault>/_lint/lint-YYYY-MM-DD.md`)29- `--orfa-min-tamanho <chars>` — limiar mínimo para considerar arquivo como órfão real (default: 200)3031Sem dependências externas: usa apenas stdlib (re, pathlib, collections).3233## Regras de uso pela Claude34351. **Rodar antes de iniciar trabalho de fôlego no vault** (ex.: criar nova área, refatorar taxonomia, ingerir lote de precedentes). O relatório aponta dívida acumulada que vale resolver antes de adicionar mais conteúdo.362. **Após o lint, abrir o relatório no Obsidian** (não só ler o stdout). Os wikilinks no relatório são clicáveis e levam direto ao arquivo problemático.373. **Cadência sugerida**: rodar semanalmente (segunda de manhã, junto com a rotina de prazos). Ou quando o usuário mencionar sintomas de inconsistência ("não acho aquela tese", "citei o precedente errado").384. **Não corrigir automaticamente**. A skill apenas detecta. Cada categoria pede julgamento humano: tag fora do vocabulário pode ser typo (corrigir) OU candidata a entrar no vocabulário (atualizar `_tags.md`).395. **Ao corrigir wikilinks quebrados**, verificar se o destino existia e foi renomeado vs. nunca existiu. Renomeação: ajustar todos os incoming. Inexistente: criar a ficha ou remover a referência.406. **Conceitos órfãos têm prioridade alta**: cada precedente citado ≥3x sem ficha é dívida que pesa nas peças (re-pesquisa de zero, citações inconsistentes). Criar ficha em `Precedentes/` consolidando.417. **Páginas órfãs nem sempre são lixo**: pode ser ficha boa esquecida do MOC. Antes de deletar, ver se faz sentido linkar do MOC da área.4243## Exemplo de saída4445```markdown46# Wiki Lint — 2026-04-304748| Categoria | Total |49|---|---:|50| Wikilinks quebrados | 3 |51| Tags fora do vocabulário | 5 |52| Páginas órfãs | 12 |53| Conceitos órfãos | 4 |54| Divergências em precedentes | 2 |5556## 1. Wikilinks quebrados5758**[[Teses/rmc-irdr-tema5-tjam]]** cita destinos inexistentes:591. `[[Tema 5 TJAM]]`6061## 4. Conceitos órfãos6263### EAREsp 12808256465Citado em 5 arquivo(s):661. [[Teses/prescricao-consignado]] (data citada: 30/03/2021)672. [[Modelos/ReplicasRMC/_MOC]] (data citada: 30/03/2021)68...6970> Sugestão: criar `Precedentes/earesp-1280825.md` consolidando.7172## 5. Divergências em precedentes7374### EAREsp 12808257576Datas distintas encontradas: 30/03/2021, 30/03/2022771. [[Teses/prescricao-consignado]] → **30/03/2021**782. [[Aprendizado/X]] → **30/03/2022**79```8081## Limitações conhecidas82831. **Precedentes em formato livre não são detectados**. Captura apenas padrões `Tema NNN`, `EAREsp NNN`, `REsp NNN`, `Súmula NNN STF/STJ/TST`, `ADI NNN`, `IRDR NNN`. Casos como "Súmula Vinculante 47" ou "AgInt no AREsp" não entram (extender padrões em `PRECEDENTE_PATTERNS` do script).842. **Aliases do frontmatter são lidos para resolução de wikilinks**, mas apenas se a tag estiver bem formada (`aliases: [a, b]` ou `aliases:\n - a\n - b`).853. **Não detecta contradições semânticas**. Se duas fichas dizem coisas opostas sobre o mesmo precedente sem divergência de data, a skill não pega — isso pede leitura humana.864. **Tags em texto corrido fora de frontmatter** podem ser falsos positivos se o autor escreveu, p. ex., `o#1` (não é tag, é "número um"). A regex pede `#` precedido de espaço/início e seguido de letra; mas casos como `\#literal` não são tratados.8788## Ver também8990- Skill `obsidian-markdown` — sintaxe Obsidian completa (caso de criar fichas novas a partir do relatório)91- Memória `reference_autoresearch.md` — origem do conceito (Karpathy)92- Memória `feedback_rag_processos.md` — por que descartamos RAG vetorial e mantemos a wiki como fonte canônica