xiaohongshu
xiaohongshu
ai-problems-detection
Protocolo de autodiagnostico contra os 5 problemas mais comuns da IA ao programar. Detecta overengineering, codigo duplicado, reinvencao da roda, falta de documentacao e arquivos monoliticos. Use SEMPRE antes de implementar, ao planejar mudancas, quando criar funcoes novas, ao escrever codigo, pa...
Full skill instructions
Executar 5 verificacoes OBRIGATORIAS antes de escrever qualquer codigo novo. Cada verificacao corresponde a um problema cronico da IA ao programar. Se qualquer verificacao falhar, PARAR e corrigir antes de prosseguir.
╔═══════════════════════════════════════════════════════════════════╗
║ ANTES DE ESCREVER CODIGO, PERGUNTE: ║
║ ║
║ 1. Tem um jeito mais simples? (Overengineering) ║
║ 2. Alguem ja fez isso? (Reinventando a roda) ║
║ 3. Tem documentacao pra isso? (Nao sabe fazer) ║
║ 4. Esse codigo ja existe no projeto? (Codigo duplicado) ║
║ 5. Deveria separar em mais arquivos? (Tudo no mesmo lugar) ║
║ ║
║ Se respondeu SIM a qualquer uma → PARAR e resolver primeiro ║
╚═══════════════════════════════════════════════════════════════════╝
□ SIMPLICIDADE: A solucao mais simples que funciona foi considerada?
□ REUTILIZACAO: Busquei no codebase por codigo similar existente?
□ DOCUMENTACAO: Consultei docs oficiais da lib/API envolvida?
□ DUPLICACAO: Verifiquei se funcao/logica similar ja existe no projeto?
□ MODULARIDADE: O arquivo destino ja esta grande demais (>300 linhas)?
if bastariaANTES de implementar, responder:
## TESTE DE SIMPLICIDADE
1. NECESSIDADE REAL
- Quantos lugares vao usar isso? → Se 1, nao abstrair
- Existe requisito futuro CONCRETO? → Se nao, YAGNI
- O stakeholder pediu isso? → Se nao, nao fazer
2. ALTERNATIVA SIMPLES
- Consegue resolver com uma funcao simples? → Preferir
- Consegue resolver com 3 linhas inline? → Melhor ainda
- Precisa de classe/pattern? → Provavelmente nao
3. TESTE DO "E SE EU NAO FIZER?"
- O que acontece se eu NAO criar essa abstração? → Se nada, nao crie
- O codigo funciona sem essa camada extra? → Se sim, remova
// OVERENGINEERED: Factory pattern para criar um tipo de objeto
class ParticipanteFactory {
static create(type, data) {
switch(type) {
case 'normal': return new Participante(data);
case 'admin': return new AdminParticipante(data);
default: throw new Error('Unknown type');
}
}
}
// SIMPLES: Funcao direta que resolve
function criarParticipante(data) {
return { ...data, ativo: true, temporada: getCurrentTemporada() };
}
// OVERENGINEERED: Middleware configuravel generico
function createValidator(schema, options = {}) {
return (req, res, next) => {
const { strict = true, partial = false, transform = false } = options;
// 50 linhas de logica generica...
};
}
// SIMPLES: Validacao direta no controller
function validarAcertoFinanceiro(req, res, next) {
const { valor, tipo } = req.body;
if (!valor || !tipo) return res.status(400).json({ error: 'Campos obrigatorios' });
next();
}
# Detectar sinais de overengineering no codigo que estou escrevendo:
# Classes com um unico metodo (funcao bastava)
grep -rn "class.*{" [arquivo] | while read line; do
file=$(echo "$line" | cut -d: -f1)
methods=$(grep -c "async\|function\|=>" "$file" 2>/dev/null)
if [ "$methods" -le 2 ]; then
echo " Classe com poucos metodos (funcao bastava?): $file"
fi
done
# Patterns desnecessarios
grep -rn "Factory\|Strategy\|Observer\|Singleton\|Builder" --include="*.js" .
# Arquivos de config com uma unica opcao
find . -name "config*.js" -exec wc -l {} \; | awk '$1 < 10'
ANTES de implementar, verificar em 3 niveis:
## TESTE DE REUTILIZACAO
### NIVEL 1: JavaScript Nativo
Verificar se o JS/Node ja tem:
- Array methods: map, filter, reduce, find, some, every, flat, flatMap
- Object methods: entries, keys, values, assign, fromEntries
- String methods: includes, startsWith, padStart, replaceAll
- Date: toLocaleDateString, Intl.DateTimeFormat
- Estruturas: Map, Set, WeakMap, WeakRef
- Utils: structuredClone, crypto.randomUUID, URL, URLSearchParams
### NIVEL 2: Dependencias do Projeto
Verificar no package.json o que JA esta instalado:
```bash
cat package.json | jq '.dependencies, .devDependencies'
Se precisa de algo que nao tem no projeto:
// Buscar docs oficiais
mcp__context7__resolve_library_id({ query: "[funcionalidade]", libraryName: "[lib]" })
mcp__context7__query_docs({ libraryId: "[id]", query: "[funcionalidade especifica]" })
// Buscar alternativas existentes
mcp__perplexity__perplexity_ask({
messages: [{ role: "user", content: "Node.js: melhor forma de fazer [X] sem reinventar a roda" }]
})
### Exemplos Concretos
```javascript
// REINVENTANDO: Funcao custom de deep clone
function deepClone(obj) {
if (typeof obj !== 'object') return obj;
const clone = Array.isArray(obj) ? [] : {};
for (const key in obj) {
clone[key] = deepClone(obj[key]);
}
return clone;
}
// JA EXISTE: JS nativo
const clone = structuredClone(obj);
// REINVENTANDO: Formatar moeda manualmente
function formatarMoeda(valor) {
return 'R$ ' + valor.toFixed(2).replace('.', ',').replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
// JA EXISTE: Intl nativo
const formatarMoeda = (valor) =>
new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(valor);
// REINVENTANDO: Rate limiter custom
const requests = {};
function checkRateLimit(ip) {
if (!requests[ip]) requests[ip] = { count: 0, lastReset: Date.now() };
// 30 linhas de logica...
}
// JA EXISTE NO PROJETO: express-rate-limit (package.json)
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
# Verificar se funcao que vou criar ja existe como metodo nativo
# Buscar no MDN/Node.js docs via Context7
# Verificar dependencias instaladas
cat package.json | jq -r '.dependencies | keys[]' 2>/dev/null
# Buscar funcoes utilitarias ja existentes no projeto
grep -rn "function format\|function parse\|function valid\|function calc" \
--include="*.js" utils/ helpers/ services/ lib/ 2>/dev/null
# Verificar se padrao ja implementado
grep -rn "module.exports" utils/ helpers/ lib/ 2>/dev/null | head -20
ANTES de usar qualquer API/lib/metodo desconhecido:
## TESTE DE CONHECIMENTO
1. SEI EXATAMENTE como isso funciona?
- SIM com certeza → Prosseguir
- ACHO que sei → PARAR, consultar docs
- NAO sei → PARAR, pesquisar antes
2. QUAL a versao da lib no projeto?
```bash
cat package.json | jq '.dependencies["[lib]"]'
CONSULTAR documentacao oficial:
// Docs de frameworks (Context7)
mcp__context7__resolve_library_id({ query: "[funcionalidade]", libraryName: "[lib]" })
mcp__context7__query_docs({ libraryId: "[id]", query: "[uso especifico]" })
CONSULTAR informacoes nao-documentadas:
// API Cartola, comportamentos especificos (Perplexity)
mcp__perplexity__perplexity_ask({
messages: [{ role: "user", content: "[pergunta tecnica especifica]" }]
})
### Exemplos Concretos
```javascript
// INVENTADO: Parametros errados do MongoDB
await collection.findOneAndUpdate(
{ _id: id },
{ $set: data },
{ returnOriginal: false } // ERRADO: opcao obsoleta
);
// VERIFICADO NA DOC: Opcao correta
await collection.findOneAndUpdate(
{ _id: id },
{ $set: data },
{ returnDocument: 'after' } // CORRETO: driver v4+
);
// INVENTADO: Assume que fetch retorna JSON direto
const data = await fetch('/api/dados');
console.log(data.nome); // undefined! fetch retorna Response, nao JSON
// VERIFICADO: Uso correto
const response = await fetch('/api/dados');
const data = await response.json();
console.log(data.nome);
PARAR IMEDIATAMENTE quando perceber:
- Usando metodo que "acho" que existe
- Passando parametros "que devem estar certos"
- Copiando pattern de outro projeto sem adaptar
- Usando sintaxe que "lembro" mas nao tenho certeza
- Escrevendo try/catch "por garantia" sem saber o erro
# Verificar versao real das dependencias
node -e "console.log(require('[lib]/package.json').version)"
# Verificar como o projeto JA usa determinada lib
grep -rn "require.*[lib]\|from.*[lib]" --include="*.js" . | head -10
# Ver exemplos reais de uso no codebase
grep -rn "[metodo]" --include="*.js" controllers/ services/ | head -10
ANTES de escrever qualquer funcao nova:
## TESTE DE DUPLICACAO
1. BUSCAR funcao similar no projeto:
```bash
# Por nome de funcao similar
grep -rn "function [nomeSimilar]\|[nomeSimilar]\s*=" --include="*.js" .
# Por logica similar (palavras-chave do que a funcao faz)
grep -rn "[palavraChave1].*[palavraChave2]" --include="*.js" .
# Por operacao similar no MongoDB
grep -rn "\.find\|\.aggregate\|\.updateMany" --include="*.js" . | grep "[collection]"
SE ENCONTRAR codigo similar:
ONDE COLOCAR codigo compartilhado:
### Exemplos Concretos (Super Cartola)
```javascript
// DUPLICADO: Mesmo calculo em 3 controllers diferentes
// controllers/rankingController.js
function calcularPontos(rodadas) {
return rodadas.reduce((acc, r) => acc + (r.pontos || 0), 0);
}
// controllers/participanteController.js
function somarPontos(listaRodadas) {
return listaRodadas.reduce((total, rod) => total + (rod.pontos || 0), 0);
}
// SOLUCAO: Extrair para utils compartilhado
// utils/calculos.js
function calcularPontosTotal(rodadas) {
return rodadas.reduce((acc, r) => acc + (r.pontos || 0), 0);
}
module.exports = { calcularPontosTotal };
// DUPLICADO: Query MongoDB repetida com pequenas variacoes
// Em 5 controllers diferentes:
const participantes = await db.collection('times').find({
liga_id: ligaId,
temporada: temporada,
ativo: true
}).toArray();
// SOLUCAO: Funcao no service
// services/participanteService.js
async function getParticipantesAtivos(ligaId, temporada) {
return await db.collection('times').find({
liga_id: ligaId,
temporada: temporada,
ativo: true
}).toArray();
}
# Buscar funcoes com nomes similares ao que vou criar
grep -rn "function.*[palavraChave]" --include="*.js" . | grep -v node_modules
# Buscar logica de calculo similar
grep -rn "reduce\|forEach\|map" --include="*.js" controllers/ services/ | grep "[operacao]"
# Buscar queries MongoDB similares
grep -rn "\.find(\|\.findOne(\|\.aggregate(" --include="*.js" . | grep "[collection]"
# Detectar duplicacao com ferramentas (se disponivel)
npx jscpd --min-lines 5 --min-tokens 50 controllers/ services/ 2>/dev/null
ANTES de adicionar codigo a um arquivo existente:
## TESTE DE MODULARIDADE
1. TAMANHO DO ARQUIVO DESTINO:
```bash
wc -l [arquivo-destino]
500 linhas → OBRIGATORIO separar (usar skill Refactor-Monolith)
RESPONSABILIDADES NO ARQUIVO:
# Contar tipos de operacao no arquivo
echo "=== ANALISE DE RESPONSABILIDADES ==="
echo "Manipulacao DOM: $(grep -c 'getElementById\|querySelector\|innerHTML\|classList' [arquivo])"
echo "Fetch/API: $(grep -c 'fetch\|axios\|XMLHttp' [arquivo])"
echo "Calculo/Logica: $(grep -c 'function calc\|function process\|function compute\|reduce\|Math\.' [arquivo])"
echo "Event handlers: $(grep -c 'addEventListener\|onclick\|onchange' [arquivo])"
echo "MongoDB: $(grep -c '\.find\|\.insert\|\.update\|\.delete\|\.aggregate' [arquivo])"
A FUNCAO QUE VOU ADICIONAR:
### Exemplos Concretos
```javascript
// MONOLITO: Controller fazendo TUDO
router.post('/acerto', async (req, res) => {
// Validacao (deveria ser middleware)
if (!req.body.valor) return res.status(400).json({ error: 'Valor obrigatorio' });
// Logica de negocio (deveria ser service)
const saldo = await calcularSaldoAtual(req.params.ligaId, req.body.timeId);
const novoSaldo = saldo + req.body.valor;
// Acesso a dados (deveria ser repository/model)
await db.collection('acertofinanceiros').insertOne({
liga_id: req.params.ligaId,
time_id: req.body.timeId,
valor: req.body.valor,
data: new Date()
});
// Formatacao de resposta (deveria ser separado)
res.json({
sucesso: true,
saldoAnterior: formatarMoeda(saldo),
saldoAtual: formatarMoeda(novoSaldo)
});
});
// SEPARADO: Cada camada com sua responsabilidade
// middleware/validators.js → validarAcerto
// services/acertoService.js → registrarAcerto
// controllers/acertoController.js → orquestrar
router.post('/acerto', validarAcerto, acertoController.registrar);
## DECISAO: SEPARAR OU NAO?
### SEPARAR QUANDO:
- Arquivo > 300 linhas
- > 2 responsabilidades distintas
- Funcao reutilizada em 2+ lugares
- Equipes diferentes mexem no mesmo arquivo
- Teste unitario fica dificil
### MANTER JUNTO QUANDO:
- Arquivo < 200 linhas
- Tudo fortemente acoplado
- Unico consumidor
- Separar criaria mais complexidade que simplificaria
- So 1 pessoa mexe no arquivo
### NUNCA:
- Criar arquivo com 1 funcao de 10 linhas
- Separar por "padrao" sem beneficio concreto
- Criar camada de abstração que so repassa chamadas
# Listar arquivos grandes (candidatos a separacao)
find . -name "*.js" ! -path "./node_modules/*" -exec wc -l {} \; | \
sort -rn | awk '$1 > 300 {print " " $1 " linhas: " $2}' | head -15
# Analisar responsabilidades de um arquivo especifico
echo "=== RADIOGRAFIA: [arquivo] ==="
echo "Total linhas: $(wc -l < [arquivo])"
echo "Funcoes: $(grep -c 'function\|=>' [arquivo])"
echo "DOM: $(grep -c 'getElementById\|querySelector\|innerHTML' [arquivo])"
echo "API: $(grep -c 'fetch\|axios' [arquivo])"
echo "DB: $(grep -c '\.find\|\.insert\|\.update\|\.aggregate' [arquivo])"
echo "Events: $(grep -c 'addEventListener\|on[A-Z]' [arquivo])"
┌─────────────────────────────────┐
│ RECEBEU TAREFA DE IMPLEMENTAR │
└──────────────┬──────────────────┘
│
▼
┌──────────────────────────────────┐
│ 1. SIMPLICIDADE │
│ Tem jeito mais simples? │
│ → Se SIM: usar o mais simples │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 2. EXISTENCIA NO PROJETO │
│ Ja existe algo similar? │
│ → Se SIM: reutilizar/adaptar │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 3. DOCUMENTACAO │
│ Sei como fazer ou preciso docs? │
│ → Se NAO SEI: consultar antes │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 4. DUPLICACAO │
│ Vou repetir codigo existente? │
│ → Se SIM: extrair pra compartilhar│
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ 5. MODULARIDADE │
│ Arquivo destino esta grande? │
│ → Se SIM: separar primeiro │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ TODAS AS 5 VERIFICACOES OK? │
│ → AGORA pode escrever codigo │
└──────────────────────────────────┘
| Problema Detectado | Skill para Resolver |
|---|---|
| Arquivo > 500 linhas | /Refactor-Monolith |
| Nao sei como API funciona | /fact-checker + Context7 |
| Codigo com vulnerabilidades | /code-inspector |
| Preciso de docs da API Cartola | /cartola-api |
| Feature complexa precisa planejamento | /workflow → /pesquisa → /spec → /code |
| Frontend precisa de padrao | /frontend-crafter |
grep -rn encontrou funcao quase identica em outro arquivonpm install [lib] resolviaSTATUS: AI PROBLEMS DETECTION - SELF-DIAGNOSTIC PROTOCOL ACTIVE
Versao: 1.0
Principio: "Codigo que nao precisa existir e o melhor codigo."
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience