agentsclimarketplace

Reuse indexing

Skill vynazevedo/first-plan/skills/reuse-indexing

Skill que define como construir o Reuse Index invertido em 03-reuse/. Use durante Discovery para identificar componentes, utils, types, hooks reutilizáveis no projeto e criar o índice "preciso de X -> use Y".From its SKILL.md

Install
npx -y skills add vynazevedo/first-plan --skill reuse-indexing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.5 KB, as published. Nobody here has run it

Reuse Indexing

Como criar .first-plan/03-reuse/ com índice invertido focado em "intenção -> existente".

Princípio

A pergunta certa nao é "o que existe?" - é "preciso fazer X, o que ja existe?". O índice é organizado por intenção, não por estrutura.

Categorias de intenção (por linguagem/stack)

Universais

CategoriaExemplo
Validação"validar input HTTP"
Logging"registrar evento"
Auth"verificar JWT"
HTTP client"chamar API externa"
Persistência"buscar registro no DB"
Conversão / format"formatar data"
Testing helper"criar fixture"
Crypto"hash de senha"

Frontend específicas

CategoriaExemplo
UI components"form com validação"
Hooks"fetch com loading state"
State management"store de carrinho"
Routing"redirect autenticado"
Forms"form com validação"
Modals / overlays"dialog de confirmação"

Critério de inclusão

Item entra no índice se:

  • Usado em > 1 lugar OU claramente público (export top-level, nome inequívoco)
  • API estável (nao é refator em curso, nao tem @deprecated)
  • Não-trivial (re-criar custaria > 5 linhas)
  • Identificável (nome semântico, não helper.foo())

Algoritmo

Passo 1 - Coletar candidatos

Por linguagem, identifica símbolos exportados:

  • Go: func / type em pacote pkg/ ou internal/util/
  • TS: export em arquivos lib/, utils/, helpers/, components/, hooks/
  • PHP: classes em namespaces App\Services, App\Helpers
  • Python: funções/classes em módulos utils/, helpers/, services/
  • Rust: pub em src/lib.rs e módulos públicos

Passo 2 - Deduplica e classifica por intenção

Agrupa candidatos por categoria. Mapping comum:

Nome contémCategoria
validate, valid, checkValidação
log, logger, auditLogging
auth, jwt, token, permissionAuth
client, request, fetch, apiHTTP client
repository, dao, query, dbPersistência
format, parse, convert, to_Format
factory, builder, mock, stubTesting helper
hash, encrypt, decrypt, signCrypto
Component, View, LayoutUI components
use<Capitalized> (TS/JS)React hooks

Passo 3 - Para cada item, capturar

name: <nome do símbolo>
category: <categoria de intenção>
path: <arquivo>:<linha>
signature: <assinatura completa>
purpose: <inferido por nome + comentário se houver>
usages:
  - <path:line de quem usa>
  ... (até 5 ocorrências)
when_to_reuse: <contexto>
when_not_to_reuse: <contexto exclusionário>

Passo 4 - Escrever os arquivos

03-reuse/INDEX.md:

  • Tabela top-level por categoria
  • Linkando aos arquivos de detalhe

03-reuse/components.md, utils.md, types.md, hooks.md:

  • Detalhe por item com signature, exemplos, usos

03-reuse/search.json:

  • Versão machine-readable do mesmo índice
  • Schema:
{
  "items": [
    {
      "name": "...",
      "category": "...",
      "path": "...",
      "signature": "...",
      "tags": ["...", "..."],
      "usage_count": 5
    }
  ]
}

Heurísticas para purpose / when

Inferir purpose a partir de:

  • Comentário JSDoc / docstring / godoc / rustdoc
  • Nome do arquivo + nome da função
  • Padrão de uso (se chamada N vezes em handlers, é util de handler)

Inferir "when to reuse":

  • Categoria + tipo de input/output
  • Localização do arquivo (pkg/util/format = formatadores)

Inferir "when NOT to reuse":

  • Comentários explicitamente exclusionários
  • Substituições recentes (e.g., novo util em commits recentes para uso futuro - não reusar o velho)

Cuidados

  • Nao inflar o índice. Helpers triviais (e.g., func square(x int) int { return x*x }) não entram.
  • Não reportar items deprecated. Se há sinal de "use novo X", marcar antigo como NOT recommended.
  • Não inventar usages. Se nao encontrou call site, listar 0 e reduzir confidence.

Quando o índice fica grande

Se o projeto tem > 200 items reusáveis:

  • Limitar INDEX.md ao top 30 por categoria por usage_count
  • Detalhe completo nos arquivos por categoria
  • search.json tem todos

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.