agentsclimarketplace

Lens go

Skill vynazevedo/first-plan/skills/lens-go

Stack lens para projetos Go. Use durante Discovery quando go.mod for detectado. Extrai padrões de layout (cmd/internal/pkg), error handling, context.Context, concurrency, code generation, build tags.From its SKILL.md

Install
npx -y skills add vynazevedo/first-plan --skill lens-go

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

3.8 KB, as published. Nobody here has run it

Lens Go

Detecção fina

  • cmd/<name>/main.go -> binário (CLI ou serviço HTTP)
  • internal/ -> lib privada do módulo
  • pkg/ -> lib pública
  • go.mod em raiz com poucas pastas -> lib pequena
  • Workspace go.work -> monorepo Go

Frameworks comuns a detectar via imports:

  • net/http puro = HTTP stdlib
  • chi, gin, echo, fiber, gorilla/mux = router
  • gqlgen, graph-gophers/graphql-go = GraphQL
  • grpc-go = gRPC
  • cobra, urfave/cli = CLI
  • kafka-go, segmentio/kafka-go, IBM/sarama = Kafka
  • streadway/amqp, rabbitmq/amqp091-go = RabbitMQ

Extração de padrões

Layout

  • Confirmar uso de cmd/, internal/, pkg/
  • Onde fica o entry point principal (cmd/<name>/main.go?)
  • Há separação handler/, service/, repository/?

Error handling

  • errors.New vs fmt.Errorf vs errors.Wrap
  • Sentinel errors (var ErrNotFound = errors.New(...))
  • Custom error types (struct com Error() string)
  • Use de errors.Is / errors.As
  • Pacote externo (pkg/errors, cockroachdb/errors, hashicorp/go-multierror)

Verificar:

  • Os handlers retornam erro tipado ou string?
  • Errors são wrapped com contexto adicional?
  • Há padrão para mapear erro -> HTTP status?

Context

  • context.Context é primeiro parametro? (idiomatic)
  • context.Background() ou context.TODO() em produção? (smell)
  • Uso de context.WithTimeout / WithCancel

Concurrency

  • Goroutines + channels?
  • sync.WaitGroup para coordenar?
  • errgroup.Group (golang.org/x/sync)?
  • Pools de worker?

Code generation

  • go generate directive em arquivos?
  • mockgen, mockery para mocks?
  • sqlc, oapi-codegen, protoc-gen-go?
  • Geradores customizados (sinal: arquivos *.gen.go, *.pb.go, wire_gen.go)

Build tags

  • //go:build <tag> em arquivos
  • Tags comuns: integration, e2e, wireinject

Testing

  • _test.go irmão de cada arquivo?
  • testify/assert ou stdlib?
  • Table-driven (presença de t.Run em loop)?
  • Testes de integração separados (build tag integration)?
  • Mocks: gerados ou manuais?

DI

  • Injeção manual via construtores (NewService(deps...))
  • wire (Google) com wire.go/wire_gen.go?
  • fx (Uber)?

Logging

  • log stdlib?
  • slog (Go 1.21+)?
  • logrus, zap, zerolog?
  • Padrão de campos estruturados?

Output em .first-plan/

CategoriaArquivoConteúdo
Stack01-topology/stacks.mdversão Go, framework, papel
Layout01-topology/architecture.mddiagrama cmd/internal/pkg
Boundaries01-topology/boundaries.mdrotas HTTP, gRPC services, mensageria
Errors02-conventions/errors.mdpadrão Go-específico
Testing02-conventions/testing.mdtestify vs stdlib, table-driven
DI02-conventions/di.mdmanual / wire / fx
Logging02-conventions/logging.mdslog / zap / etc
Reuse03-reuse/utils.mdfunções em pkg/, helpers em internal/util/

Confidence rules

Aumentar quando:

  • Mais de 1 manifesto (vários binários no monorepo) com mesmo padrão
  • Padrão usado em arquivos recentes E antigos

Reduzir quando:

  • Mistura de errors.New e fmt.Errorf sem padrão claro
  • Mistura de log stdlib + slog + zap (migração em curso)
  • Vários context.TODO() em produção (debt)

Anti-padrões comuns

Reportar em 06-rationale/dont.md se detectado:

  • panic() em handler HTTP sem recover middleware
  • Goroutines sem cancellation via context
  • time.Sleep em código de produção (em vez de time.After + select)
  • Erro ignorado com _, _ = ...
  • init() com side effects pesados

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.