Enquête complète de fonctionnalité

Investigation exhaustive d'une fonctionnalité : archéologie interne (code, git, schéma) et recherche externe vérifiée, livrant docs/investigacoes et statut investigué.

Spar Skills Guide Bot
DeveloppementAvancé
3006/08/2026
Claude Code
#feature-investigation#research#documentation#code-archaeology#web-research

Recommandé pour


name: rs description: Investigação completa de uma feature — arqueologia interna (código + git + schema) + pesquisa externa verificada → docs/investigacoes + status investigado. Use quando o usuário pedir pra investigar/pesquisar uma feature ou tema, perguntar "isso existe? como o mercado faz?", ou disser "/rs <ID|tema>". argument-hint: <ID da feature ou tema> [foco opcional]

Faça uma investigação completa da feature: $ARGUMENTS

O entregável é a investigação — não implemente nada. Regra de altitude: não re-decida o que docs/arquitetura/ já cravou; investigação nova complementa ou contesta COM evidência, nunca ignora. Para fan-out web pesado, a skill deep-research (Skill tool) é o harness de referência (buscas em leque → fetch → verificação adversarial → síntese citada); esta skill orquestra a arqueologia interna + a entrega no registro de features.

0. Triagem + brief (antes de gastar qualquer token caro)

Classifique e declare o tier + orçamento na primeira resposta — esforço se decide aqui, não no meio:

| Tier | Sinal | Orçamento | Entregável | |---|---|---|---| | Lookup | 1 fato verificável ("qual o limite X?", "lib Y suporta Z?") | você mesmo, 3-10 buscas/fetches | resposta direta com fonte — SEM doc completo | | Comparação | 2-5 opções nomeáveis (libs, providers, abordagens) | 2-4 subagentes sonnet, 10-15 calls cada | doc completo | | Tema amplo | mercado + código + schema + regulatório | 5-10+ subagentes sonnet por frente | doc completo |

  • Pedido ambíguo em algo que muda o rumo → 1 pergunta de cada vez, multiple choice (AskUserQuestion), antes do fan-out — nunca no meio.
  • Comprima num brief de 3-6 linhas: escopo, perguntas a responder, o que conta como "respondido". Todo search e o TL;DR final são julgados contra ele. Inclua os requisitos implícitos que o pedido não falou mas o repo exige: regulação BR de apostas (Lei 14.790/2023, +18, jogo responsável, sem promessa de ganho), dinheiro em centavos, fuso America/Sao_Paulo, separação quant/LLM e o princípio "todo pick mostra o porquê + fontes" (requisito implícito ignorado é ~metade das falhas de research agents).
  • Tier comparação/amplo: emita o plano como checklist visível (frentes, perguntas, arqueologia × web) ANTES do fan-out — o dono pode podar a fase cara. Gate: o doc final só é escrito depois dos §§1-5.
  • Pressão por atalho ("só me responde rápido, pula a web") rebaixa o TIER, nunca remove a verificação — lookup também cita fonte fetchada.

1. Resolver a feature + memória do que já foi investigado

  • ID existente (ex: FID-001): leia docs/features/<modulo>/<ID>-*.md + TODOS os docs: vinculados.
  • Tema sem feature: crie o arquivo a partir de docs/features/_template.md no módulo certo (próximo número do prefixo — confira no docs/features/INDEX.md), status: ideia, ANTES de investigar. Número livre no INDEX não basta: um ID pode estar reservado só em prosa (uma feature prometendo XXX-010 a um trabalho futuro numa seção "Fora de escopo"), e aí o número nasce significando duas coisas. Confira com grep -rn "<PREFIXO>-0NN" docs/ antes de cravar; se tomar um número reservado, reponte a reserva no doc que a fez. Idem pra W-NNN novo na wishlist: o próximo livre sai de grep -o "^### W-[0-9]*" docs/wishlist.md | sed 's/.*W-//' | sort -n | tail -1, não de olhar o topo do arquivo (que é ordenado por desejo, não por número).
  • bun run features impact <ID> + índice de âncoras do INDEX.md → em quem ela encosta; features afetadas são leitura obrigatória.
  • Investigações prévias são leitura obrigatória, não opcional: índice doc→features do INDEX.md + Grep do tema em docs/investigacoes/ + memórias recuperadas. Achado já REFUTADO em investigação anterior entra no diário como REFUTED — proibido re-pesquisar sem evidência nova. O mesmo vale pra decisões já cravadas do dono (vetos, "tooling = protótipo comparativo").

2. Arqueologia interna (antes da web — o repo sabe mais do que parece)

  • Código real (SocratiCode obrigatório, regras do CLAUDE.md): codebase_search é a entrada padrão pra perguntas conceituais; codebase_symbols quando o termo é nomeável → codebase_graph_queryRead direcionado. Separe real × mock × fantasma — toggle que não faz nada é achado, não detalhe.
  • Busca larga → delegue: varrer o repo, descobrir onde vive a feature, mapear como X liga a Y, achar convenções de nome alternativas → lance agentes socraticode:codebase-explorer (model sonnet), em paralelo, um por frente (ex: api · web/features · schema Drizzle · pipeline de ingest · prompts de IA). Sem teto de quantidade — lance quantos a investigação pedir; os orçamentos do §0 limitam pesquisa externa, não arqueologia interna. Eles combinam semantic search + grafo + context artifacts e devolvem só a conclusão. Nunca faça cadeia manual de Grep/Glob/find exploratória. Grep/Glob direto só pra confirmar string exata em ficheiro já identificado, ou varrer o que o índice não cobre (scratchpad, repos de terceiros).
  • Schema/contratos: codebase_context_search (schema do banco, specs de API, infra) pra confirmar colunas e shapes em vez de deduzir do código — o schema atual já suporta o tema ou implica migração? Gaps com arquivo:linha/campo.
  • Git como fonte de decisão: git log --grep "\[<IDs vizinhos>\]" --oneline; git log --follow --oneline -- <arquivo central>; git log -S "<termo>" pra saber quando/por que algo entrou ou saiu.
  • Code-as-action: levantamento de dados multi-step (contar ocorrências, cruzar tabelas, agregar rows) → escreva 1 script bun descartável em vez de N tool calls granulares. Subagentes de arqueologia são read-only — nunca mutam o repo.
  • Citação interna obrigatória (mesmo regime das URLs — achado sem âncora é inauditável):
    • Código: todo achado (real, mock, fantasma, gap) carrega caminho/desde-a-raiz.ts:linha na primeira menção; repetições podem encurtar (arquivo.ts:linha). Linha vem de Read/search desta sessão — nunca de doc/memória antiga (line-drift gera citação errada).
    • Git: decisão/data minerada do histórico cita o hash curto (abc1234) + 1 frase do que o commit prova. Sem hash = inferência, rotule como tal.
    • Schema/banco: cite tabela.coluna (+ arquivo do schema Drizzle ou migração quando o shape importa). Fato sobre DADOS leva a query + data — dado de dev gira no re-seed.
    • Tabela real×mock×fantasma sem âncora por linha = doc reprovado.

3. Pesquisa externa — fan-out, persistência e fontes

  • Fan-out por perspectiva (tier comparação/amplo): as frentes saem das personas do domínio — apostador (casual e sharp), tipster, concorrentes (plataformas de tips, agregadores de odds, sites de stats/xG e quem o tema pedir), engenharia/modelo de dados (ingestão, dossiê do jogo, calibração quant/LLM), compliance/regulação (Lei 14.790, jogo responsável). Cada perspectiva gera as próprias perguntas; as que renderem viram seções do doc. Default: ~4 sub-perguntas por frente × até 2 níveis de follow-up.
  • Spec de subagente em 4 campos (delegação vaga = subagentes duplicando ângulo): objetivo · formato exato do output · fontes/tools permitidos · fronteiras DO-NOT-COVER. Todo subagente desta skill roda em sonnet (model: sonnet no Agent tool) — opus não compensa pra buscar, ler e destilar; o raciocínio caro é a síntese, e a síntese é sua. Subagentes devolvem notas destiladas + lista de fontes — NUNCA prosa de relatório (seções escritas em paralelo saem desconexas; a síntese é sua, em um passe).
  • Broad-then-narrow: queries curtas e amplas primeiro, avalie o terreno, depois estreite. Busque em pt-BR E inglês.
  • Persistência com estratégia: 2 formulações falharam → MUDE a estratégia (termos, idioma, site:, docs × fóruns × issues), não conclua "não existe". E "nenhuma fonte confiável encontrada" é resposta válida — registrada na seção de lacunas, melhor que citar fraco.
  • Reflexão entre batches (obrigatória, escrita no diário): "respondido: X · falta: Y · próxima query: Z". Sub-pergunta nova entra na FRENTE da fila; a pergunta-mãe só fecha quando a fila à frente drena.
  • Escada de fontes (content farm de "palpite/tips" domina o nicho de apostas BR — escada é defesa, não burocracia): docs oficiais/changelog (de APIs de stats/odds) > blog de engenharia/whitepaper do vendor > acadêmico/relatório setorial (Secretaria de Prêmios e Apostas do MF, IBIA, papers de modelagem esportiva/xG) > trade press séria > listicle SEO e canal de tip (banidos como evidência única). Estatística ou odd em agregador → rastreie até a primeira fonte primária e cite ELA.
  • Lib/serviço candidato: docs atuais via context7 (resolve-library-idquery-docs); issues/discussions abertas (maturidade, pegadinhas); licença e manutenção. Regra do dono: decisão de tooling = protótipo comparativo — a investigação recomenda finalistas, não fecha sozinha.
  • Classifique cada capacidade de mercado: paridade (todo mundo tem, faltar dói) × diferencial defensável (conversa com a tese do mrtip: transparência radical + IA explicável quant/LLM + histórico auditável dos dois lados).

Antipadrões desta skill: premature-editing (concluir após 1-2 buscas — a maior fatia das falhas) · grep-silencio-como-prova (1 busca vazia ≠ "não existe"; ausência exige ≥2 buscas com parâmetros distintos) · citacao-de-memoria (parte das URLs citadas por agentes é fabricada) · single-origin-disfarcado (20 blogs recitando o mesmo press release ≠ 20 fontes) · vaporware-as-evidence (landing page ≠ feature existente) · feature-parity-trap/cargo-cult ("concorrente tem X" sem dor própria) · grafico-tesla (matriz extensa sem decisão que ela muda) · lost-in-the-codebase (ler arquivo após arquivo É o mecanismo do context rot).

4. Verificação (onde research agents morrem — 6-22% das citações erram até no estado da arte)

  • Fetch, não snippet: claim que sustenta a recomendação (preço, limite, capacidade de API, deprecação) exige WebFetch da página real — snippet de busca fabricado/desatualizado é failure mode documentado.
  • URL só de tool result DESTA sessão — zero URLs de memória (3-13% das URLs citadas por agentes são fabricadas).
  • Veredito por claim atômico: SUPPORTED (URL + data as-of) · REFUTED (vai pra seção Refutado — vale tanto quanto confirmado) · NEI/não-achei (vai pra Perguntas Abertas, nunca pro TL;DR). "X é grátis até 100k req/mês" é átomo verificável; "X é o melhor" é opinião — atribui, não vereda.
  • Triangulação com independência real: claim de mercado/número exige ≥2 fontes de proveniência distinta — 20 blogs recitando o mesmo press release = 1 fonte (marque "single-origin").
  • Rigor extra nas PRIMEIRAS fontes de cada frente — erro de fonte no início ancora e cascateia pelo resto (>57% dos erros nascem aí).
  • Frescor: pricing/limites/status de API com >12 meses → re-verificar na página viva; paisagem de mercado >24 meses → suspeita. Conflito entre fontes: a primária mais nova vence, conflito anotado.
  • Label de confiança por achado: verificado-fetch / snippet / inferência / não-verificado + data as-of. Achados internos usam lido-no-código (Read/search desta sessão, com path:linha) vs inferência (deduzido de doc/memória, sem âncora fresca).
  • Orçamento esgotado → modo conclusão: escreva com o que está verificado; o que ficou NEI vai pra Perguntas Abertas — proibido estourar o orçamento buscando "só mais uma".

5. Counter-review (antes de escrever, em recomendação que carrega decisão)

Tier comparação/amplo: 1 subagente sonnet role-locked pra REFUTAR a recomendação preliminar, com buscas frescas próprias (não recebe seu raciocínio, só a recomendação + brief). Quota: ≥3 problemas reais ou você re-examina por conta. Escolha contestada (qual PSP/lib/abordagem) → 2-3 subagentes sonnet na MESMA pergunta por ângulos diferentes; só entra na matriz o que 2+ confirmam. O que sobreviver vira força da recomendação; o que não, vira risco declarado.

6. Entregar

  1. Escrita one-shot: você escreve docs/investigacoes/<slug>.md inteiro de uma vez, a partir do brief + notas destiladas — nunca colagem de outputs de subagente. Espinha:
    • TL;DR + recomendação cravada (1 parágrafo no topo; só claims SUPPORTED)
    • Contexto e problema (+ brief e requisitos implícitos assumidos)
    • Estado real no código (real×mock×fantasma com path:linha por achado, hash de commit pra arqueologia git, tabela.coluna pra schema — gaps idem)
    • Estado da arte / mercado — claims atômicos com URL inline + label de confiança + as-of
    • Opções com matriz de trade-offs (síntese ENTRE fontes, não fato-por-fonte) → recomendação com o porquê + o que o counter-review levantou
    • Modelo de dados proposto
    • Plano por faceta (dados → api → ia → ui)
    • Riscos e gotchas
    • Refutado (com a evidência que matou) e Perguntas Abertas / lacunas (decisões do dono + NEI + buscas que voltaram vazias — vazio se declara, não se omite)
  2. Auditoria de citações (passe separado, depois do draft) — citação é etapa própria, não efeito colateral da escrita:
    [ ] Toda URL veio de tool result desta sessão?
    [ ] Spot-check: reabri 3-5 claims numéricos/nominais contra a fonte?
    [ ] Load-bearing veio de fetch, não de snippet?
    [ ] Reli o pedido original — não ampliei/estreitei o escopo em silêncio?
    [ ] O que recuperei e NÃO usei — justifiquei ou descartei de propósito?
    [ ] Refutado + buscas vazias preenchidas (mesmo que "nenhuma")?
    [ ] Todo achado interno tem âncora (`path:linha` / hash / `tabela.coluna`) na primeira menção — vinda de leitura DESTA sessão?
    [ ] Spot-check interno: reabri 2-3 `path:linha` citados e a linha ainda mostra o que o doc afirma?
    [ ] `node scripts/verify-citations.mjs docs/investigacoes/<slug>.md --repo .` saiu com exit 0? (checker mecânico: path:linha existe, trecho verbatim casa, URL resolve — auto-conferência não substitui o oráculo)
    [ ] O doc responde cada pergunta do brief do §0?
    
    Item falhou → conserte antes de salvar; poucas citações verificadas > link-stuffing.
  3. Atualize o frontmatter da feature: status: investigado, docs: += o novo doc, refine ancoras/depende_de/impacta/facetas, atualizado: = hoje. As 3-8 fontes decisivas entram na seção Evidências da feature com 1 linha do que cada uma prova.
  4. bun run features check && bun run features build.
  5. Responda com: TL;DR da recomendação, o que mudou no grafo (dependências/impactos novos), perguntas em aberto, e o próximo passo natural — /pl <ID> (gap trivial de 1 frase pode ir direto pro /i <ID>).
Skills similaires