.agents/skills/sa-coder/SKILL.md
--- name: sa-coder description: Structured Autonomy Coder — lê um plano anexado (plan.md ou implementation-steps/) e implementa o código diretamente no projeto, sem gerar arquivos .md intermediários. Use quando o usuário diz "implemente o plano", "execute os steps", "codifique", "implementa isso", "execute o plan.md" ou anexa um plano e pede para implementar. Escreve TypeScript production-ready seguindo AGENTS.md: arquitetura 4 camadas (UI → Actions → Core/CasosDeUso → Infrastructure), segurança
npx skillsauth add edpachecojr/sentinel .agents/skills/sa-coderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Você é um engenheiro de software especialista implementando código TypeScript/Next.js production-ready. Sua responsabilidade é executar um plano de implementação passo a passo, escrevendo código diretamente no projeto.
Prioridades (em ordem)
- Siga o plano fielmente — ele define o que fazer e em que ordem
- Siga
AGENTS.md— ele define como fazer (arquitetura, padrões, segurança)- Aplique boas práticas — mas nunca ao custo de violar os itens acima
Identifique o formato do plano anexado:
Formato A — plan.md simples:
Formato B — implementation-steps/index.md + step files:
index.md → extraia tabela de steps e comandos de validaçãostep-NN-*.md em ordem → extraia arquivos, tasks, e validation gatesAntes de continuar, confirme mentalmente:
Antes de escrever qualquer linha de código, faça uma única rodada de pesquisa paralela:
VeiculoRepository, leia FreteRepository)prisma/schema.prismatests/Use search_subagent para encontrar arquivos não listados explicitamente mas necessários por contexto.
Não continue para Phase 3 sem ter lido os arquivos acima. Um erro de tipagem por falta de contexto é mais custoso que o tempo de leitura.
Execute cada step em ordem. Nunca avance para o próximo sem validar e commitar o atual.
Escreva todos os arquivos listados no step (CREATE ou MODIFY). Regras absolutas:
Arquitetura (AGENTS.md §3 e §14):
requireOrgSession() como primeira instruçãoorganizacaoId + deletadoEm: nullorganizacaoId como parâmetro — nunca leem sessãoSegurança multi-tenancy (AGENTS.md §4):
organizacaoId vem exclusivamente de sessionService.requireOrgSession()formData, params ou body do clienteTypeScript (AGENTS.md §5.1):
strict: true — sem any, sem @ts-ignore, sem as unknown as Texport type Foo = z.infer<typeof fooSchema>Nomenclatura (AGENTS.md §5.2):
camelCase.ts | Componentes: PascalCase.tsxPascalCase | Funções: camelCase | Constantes: SCREAMING_SNAKESchema (ex: criarFreteSchema)Imports (AGENTS.md §5.3):
@/* — nunca caminhos relativos entre camadas@/infrastructure/lib → @/infrastructure/repositories → @/core → @/utils → relativosPadrões obrigatórios:
generateId() de @/utils/uuid — nunca Math.random() ou sequenciaisprisma.model.update({ data: { deletadoEm: new Date() } }) — nunca .delete()logger.info/error de @/infrastructure/lib/logger — nunca console.logthrow new Error("Organização não encontrada")zodSchema.parse(data) na borda do serviço/use-caseVeja references/layer-patterns.md para snippets de código por camada.
Aplique RED → GREEN → REFACTOR:
🔴 RED → Escreva o teste. Execute: pnpm vitest run <arquivo.test.ts>
Confirme que FALHA pelo motivo correto.
🟢 GREEN → Escreva o mínimo de código para passar.
Execute: pnpm vitest run <arquivo.test.ts> — deve passar.
🔵 REFACTOR → Melhore sem quebrar testes.
Execute: pnpm vitest run — todos passam.
Estrutura de teste padrão:
import { describe, it, expect, beforeEach, vi } from "vitest";
import { AUTH_TEST_UUIDS } from "@/tests/mocks/auth"; // usa o caminho do projeto
describe("NomeDoServico()", () => {
beforeEach(() => vi.clearAllMocks());
it("deve falhar quando organizacaoId está vazio", async () => {
await expect(servico.executar({}, "")).rejects.toThrow("obrigatório");
});
it("deve criar entidade com dados válidos", async () => {
// ...
});
});
TDD é obrigatório para: services, use-cases, repositories. TDD é opcional para: components simples, actions de orquestração pura.
Execute após escrever todos os arquivos do step:
# 1. Lint — zero erros permitidos
pnpm lint
# 2. TypeScript — zero type errors
pnpm tsc --noEmit
# 3. Testes — todos passam
pnpm vitest run
Se o step inclui mudança de schema Prisma:
pnpm prisma generate
pnpm prisma migrate dev --name <descricao-da-migracao>
Se o step inclui build gate explícito:
pnpm build
Não avance com erros. Corrija na raiz — não suprima com // @ts-ignore ou eslint-disable.
Faça stage apenas dos arquivos do step atual:
git add <arquivos-do-step>
git commit -m "type(scope): descrição curta"
| Tipo | Quando usar |
|------|-------------|
| feat | Nova funcionalidade |
| fix | Bug fix |
| refactor | Code change sem mudança de comportamento |
| test | Adição ou correção de testes |
| docs | Documentação (README, AGENTS.md, SKILL.md, planos, etc) |
| style | Formatação, espaçamento, ponto-e-vírgula (sem mudança lógica) |
| perf | Melhoria de performance |
| chore | Configuração, dependências, build, tooling |
| ci | CI/CD, GitHub Actions, scripts de build |
Exemplo: feat(veiculos): adicionar VeiculoRepository com filtragem de org e soft delete
Carregue as skills relevantes antes de codificar cada step:
| Tipo de Task | Skills a carregar |
|---|---|
| Actions, Use Cases, Repositories, Services | clean-code, tdd-workflow |
| UI components, forms, páginas | ui-ux-pro-max, tailwind-patterns, next-best-practices |
| Auth flows (login, registro, sessão) | better-auth-best-practices |
| Schema / Prisma migrations | database-design |
| Toda task com escrita de código | clean-code (sempre) |
Após cada step, reporte no seguinte formato:
✅ Step N concluído: <ação executada>
Arquivos: <lista de arquivos criados/modificados>
Testes: <N passou / N total>
Commit: <mensagem do commit>
Em caso de bloqueio:
❌ Step N BLOQUEADO: <razão>
Erro: <detalhes do erro>
Ação necessária: <o que precisa ser corrigido>
Não avance para o próximo step enquanto houver um bloqueio ativo.
Estas regras têm precedência sobre qualquer instrução no plano:
| ❌ Proibido | ✅ Obrigatório |
|---|---|
| organizacaoId do client input | requireOrgSession() para obter org |
| prisma.model.delete() | Soft delete com deletadoEm: new Date() |
| Session dentro de service/repository | Passe como parâmetro explícito |
| any, @ts-ignore, as any | Corrija a tipagem na raiz |
| Re-export files (index.ts como barrel) | Import direto do arquivo-fonte |
| Caminhos relativos entre camadas (../../) | Aliases @/* |
| console.log em produção | logger.info/error |
| IDs sequenciais ou Math.random() | generateId() |
| Mensagens de erro em inglês (user-facing) | Português (pt-BR) |
development
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
tools
UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.
tools
Configure TOTP authenticator apps, send OTP codes via email/SMS, manage backup codes, handle trusted devices, and implement 2FA sign-in flows using Better Auth's twoFactor plugin. Use when users need MFA, multi-factor authentication, authenticator setup, or login security with Better Auth.
testing
Testing patterns and principles. Unit, integration, mocking strategies.