ESPAÇO PUBLICITÁRIO DISPONÍVEL · FALE CONOSCO

Como equipes de desenvolvimento configuram regras no Cursor para padronizar arquitetura e código entre repositórios

365Finds Editorial
11.430 artigos Wiki catalogados

Use o 365 Wiki com sua IA

Copie o prompt abaixo, cole na IA que você já usa e faça sua pergunta.

Baixar o Skill completo

Experimente primeiro com o prompt. Se você usa o 365 Wiki com frequência, instale o Skill completo do 365Wiki para não precisar colá-lo novamente. Se não usa uma IA específica, as versões web do Gemini ou Microsoft Copilot também servem.

Equipes de engenharia estabelecem padrões arquiteturais e convenções de código no Cursor migrando do arquivo único legado .cursorrules para Regras de Projeto modulares (.cursor/rules/*.mdc), dividindo as diretrizes em invariantes globais e limites acionados por caminhos de arquivos (Globs), e sincronizando essas regras entre múltiplos repositórios via Cursor Team Rules ou pipelines automatizados de CI/CD.

A adoção do Cursor em escala organizacional sem mecanismos de controle deliberados resulta rapidamente em "deriva arquitetural": diferentes desenvolvedores recebem sugestões em paradigmas conflitantes, modelos alucinam pacotes internos descontinuados e a geração automática viola camadas fundamentais do sistema. Implementar regras estruturadas e versionadas no Git estabelece limites determinísticos para o código gerado por inteligência artificial, economizando a janela de contexto de tokens.


O desafio de governança com IA em equipes de engenharia

Quando uma organização de software implementa o Cursor sem diretrizes centralizadas, os modelos operam com base em dados genéricos de treinamento da internet em vez de seguir os padrões específicos da empresa. Isso acarreta problemas frequentes:

Para mitigar esses atritos, os arquitetos de software devem transformar as convenções de engenharia em instruções persistentes integradas diretamente ao repositório.


Evolução das regras no Cursor: de .cursorrules para o padrão modular .mdc

Inicialmente, o Cursor utilizava um único arquivo .cursorrules na raiz do repositório. Embora mantido para compatibilidade retrospectiva, um arquivo monolítico força o modelo a processar todas as regras a cada interação, consumindo tokens desnecessários e enfraquecendo a capacidade do modelo de seguir instruções.

O motor atual do Cursor substitui esse modelo por Regras de Projeto (Project Rules) no diretório .cursor/rules/, utilizando arquivos .mdc (Markdown Cursor) com metadados YAML Frontmatter.

Estrutura de um arquivo .mdc

Cada arquivo .mdc combina parâmetros de configuração no topo com instruções técnicas em Markdown:

---
description: Limites da camada de domínio e padrões de repositório
globs: src/domains/**/*.ts, src/services/**/*.ts
alwaysApply: false
---

# Regras da camada de domínio

- Serviços de domínio não devem processar objetos brutos de requisição HTTP.
- Todas as mutações no banco de dados devem passar por interfaces de repositório.

Modos de ativação e parâmetros Frontmatter

O cabeçalho YAML define as condições exatas em que a regra é injetada no contexto:

Campo YAMLTipos de valorMecanismo de operaçãoMelhor caso de uso
alwaysApply: trueBooleanoInjetado em todas as interações do Chat, Composer e edições inline.Invariantes inegociáveis, versões da stack base e bibliotecas expressamente proibidas.
globs: "caminho/**"String ou array GlobCarregado automaticamente apenas quando os arquivos abertos ou editados coincidem com o padrão.Padrões de camadas específicas, como React Server Components, repositórios de dados ou rotas de API.
description: "..."Resumo em textoAvaliado semanticamente pelo Cursor Agent para decidir a relevância quando não há Globs.Tarefas ocasionais, como migração de esquemas, auditorias de segurança e atualização de SDKs.
Menção manualNão aplicávelAcionado explicitamente pelo desenvolvedor usando @nome-da-regra no Composer ou Chat.Roteiros complexos de refatoração ou listas de checagem pré-deploy.

Modelos práticos de regras para arquitetos de software

Uma arquitetura de regras escalável divide os padrões do repositório em arquivos .mdc independentes. Abaixo estão três modelos prontos para ambientes corporativos.

1. Invariantes globais do repositório (.cursor/rules/00-core-architecture.mdc)

Aplica-se universalmente a todo o código do repositório.

---
description: Invariantes de arquitetura global, stack de tecnologia e bibliotecas proibidas
alwaysApply: true
---

# Invariantes de arquitetura base

## Stack de tecnologia e versões
- Ambiente de execução: Node.js v20 LTS
- TypeScript: v5.4+ com `strict: true`
- Framework: Next.js App Router (v14+)
- Gerenciamento de estado: Zustand (PROIBIDO introduzir Redux ou MobX)

## Dependências e padrões proibidos
- PROIBIDO: `axios` (utilizar o cliente nativo `fetch` encapsulado em `@lib/api-client`)
- PROIBIDO: `@company/ui-core-v1` (descontinuado; utilizar `@company/design-system-v2`)
- PROIBIDO: `moment.js` (utilizar exclusivamente `date-fns`)

## Padrões de qualidade de código
- Proibido o uso explícito de `any`. Utilizar `unknown` associado a type guards.
- Utilizar cláusulas de guarda e retornos antecipados; evitar mais de dois níveis de blocos `if/else` aninhados.
- Nunca inserir credenciais, chaves de API ou segredos diretamente no código-fonte.

2. Camada de domínio e arquitetura limpa (.cursor/rules/backend-services.mdc)

Carregado dinamicamente apenas quando o desenvolvedor manipula a lógica de negócios ou serviços.

---
description: Regras de arquitetura hexagonal e padrões de repositório em serviços backend
globs: src/services/**/*.ts, src/domains/**/*.ts
alwaysApply: false
---

# Padrões da camada de domínio

## Divisão de responsabilidades
- Controladores realizam serialização HTTP, validação de entradas e mapeamento de status codes.
- Serviços executam regras puras de negócios. Nunca passe objetos `req` ou `res` do Express/Fastify para serviços.
- Repositórios encapsulam a persistência. Serviços devem depender de interfaces abstratas, nunca de instâncias de ORM.

## Exemplos práticos

```typescript
// ✅ CORRETO: O serviço depende de interface abstrata e manipula entidades de domínio
export class OrderService {
  constructor(private readonly orderRepository: OrderRepositoryPort) {}

  async processOrder(orderId: string): Promise<Result<Order>> {
    const order = await this.orderRepository.findById(orderId);
    if (!order) return Result.fail('Order not found');
    order.markPaid();
    await this.orderRepository.save(order);
    return Result.ok(order);
  }
}

// ❌ PROIBIDO: Chamadas diretas ao ORM e consultas de banco dentro do serviço
export class OrderService {
  async processOrder(orderId: string) {
    await prisma.orders.update({ where: { id: orderId }, data: { status: 'PAID' } });
  }
}

### 3. Padrões de testes unitários e de integração (`.cursor/rules/testing-standards.mdc`)

Orienta a IA a produzir testes alinhados aos frameworks de teste e asserções da organização.

```markdown
---
description: Padrões de projeto para testes unitários e de integração
globs: **/*.test.ts, **/*.spec.ts, src/tests/**/*
alwaysApply: false
---

# Padrões de testes automatizados

## Ferramentas de teste
- Executor: Vitest
- Biblioteca de simulação: `vi.mock()` (Não importar módulos do Jest)
- Asserções: `expect()` com correspondentes explícitos

## Estrutura dos testes
- Estruture os casos de teste segundo o padrão Arrange-Act-Assert (Preparar-Executar-Verificar).
- Mantenha testes unitários no mesmo diretório do arquivo correspondente: `feature.service.ts` e `feature.service.test.ts`.
- Isole chamadas de rede e bancos de dados em testes unitários utilizando mocks.
- Cubra sempre caminhos de exceção e validação de limites (parâmetros ausentes e falhas de autorização).

Escalabilidade entre repositórios: Estratégias para Monorepo e Polyrepo

Manter regras consistentes em dezenas ou centenas de repositórios exige modelos adaptados à estrutura da organização.

                          Governança corporativa de regras
                                         │
         ┌───────────────────────────────┴───────────────────────────────┐
         ▼                                                               ▼
   Estratégia Monorepo                                             Estratégia Polyrepo
  ├── .cursor/rules/00-core.mdc                                   ├── Repositório central: org-cursor-rules
  ├── .cursor/rules/apps-web.mdc (Glob: apps/web/**)              ├── Validação e sincronização por CI/CD
  └── .cursor/rules/shared-ui.mdc (Glob: packages/**)             └── Cursor Team Rules (Painel de administração)

Estratégia A: Escopo hierárquico em Monorepos

Em monorepositórios (como Turborepo, Nx ou pnpm workspaces), todas as regras ficam sob .cursor/rules/, mas têm seu escopo restringido por padrões globs:

Estratégia B: Sincronização em Polirepositórios via CI/CD (Rules as Code)

Para organizações que mantêm múltiplos repositórios isolados, a abordagem de versionamento centralizado oferece controle granular:

  1. Repositório central de regras: Crie um repositório Git dedicado (ex: github.com/org/cursor-rules-standards) que contenha as versões canônicas dos arquivos .mdc, etiquetadas semanticamente (v1.2.0).
  2. Checagem de desvio na CI: Inclua no pipeline de cada repositório um estágio que valide se os arquivos em .cursor/rules/ correspondem à versão oficial.
  3. Pull Requests automatizados: Configure workflows no GitHub Actions ou scripts de GitLab CI para sincronizar alterações upstream e abrir PRs automáticos de atualização.

Estratégia C: Gestão centralizada via Cursor Team Rules

Empresas que utilizam os planos Cursor Team ou Enterprise podem utilizar a governança nativa da plataforma:


Boas práticas e erros a evitar

ObjetivoPrática recomendadaErro a evitar
Economia de tokensManter cada arquivo .mdc abaixo de 400 linhas; usar globs e gatilhos semânticos.Marcar alwaysApply: true em todas as regras, saturando a capacidade do modelo.
Aderência às instruçõesIncluir exemplos práticos de código com ✅ CORRETO e ❌ PROIBIDO.Usar orientações genéricas como "Escreva código modular e de alta qualidade".
Contextualização com o códigoReferenciar arquivos-modelo do repositório utilizando @caminho/arquivo.ts.Copiar blocos imensos de código-fonte diretamente para os arquivos Markdown de regras.
Defesa em profundidadeUsar regras do Cursor como guia de geração e manter linters e verificações estáticas (ESLint, Biome) na CI.Depender unicamente da IA para garantir conformidade de arquitetura e segurança.
Manutenção contínuaAtualizar arquivos .mdc no mesmo Pull Request em que novas bibliotecas ou arquiteturas são introduzidas.Deixar regras desatualizadas após refatorações, levando o modelo a alucinar padrões antigos.

Ao estruturar as diretrizes do Cursor em arquivos .mdc modulares vinculados a caminhos de arquivos e mantê-los sincronizados por meio de Git ou Cursor Team Rules, as equipes de desenvolvimento potencializam a produtividade assistida por IA garantindo consistência técnica em toda a organização.


Referências