SPELL / Documentação
← Site principal

Bloco Tecnologia

Visão geral

O bloco Tecnologia é um bloco de Padrões de Engenharia — pertence exclusivamente a arquivos declarados como [Padrões de Engenharia] (convencionalmente padroes.spell). Ele declara o stack tecnológico do projeto: linguagem, framework, banco de dados, hospedagem e provedores de serviços externos. A IA usa essas informações para escolher as bibliotecas, padrões de código e configurações corretas.

padroes.spell — Tecnologia completo
Tecnologia {
  Backend {
    linguagem: C# 12 / .NET 8
    framework: ASP.NET Core
    banco-principal: PostgreSQL
    banco-secundario: Redis
    orm: Entity Framework Core
    hospedagem: Railway
    agente: claude-code
  }
  Frontend {
    framework: React
    design-system: shadcn/ui + Tailwind
  }
  Autenticacao {
    metodo: JWT HS256
  }
  Comunicacao {
    email: Amazon SES
    sms: Twilio
    push: Firebase FCM
  }
  Integracao {
    storage: Amazon S3
    pagamento: Stripe
    mapas: Google Maps
  }
  Bibliotecas {
    pdf: QuestPDF
    planilha: EPPlus
    imagem: ImageSharp
  }
}

Sub-bloco Backend

Declara a tecnologia do servidor. Campos comuns:

CampoDescrição
tipoObrigatório. Tipo da aplicação — web, cli, desktop, biblioteca
linguagemLinguagem de programação e versão
frameworkFramework web principal
banco-principalBanco de dados primário
banco-secundarioBanco de dados secundário (cache, etc.)
ormORM ou biblioteca de acesso a dados
hospedagemPlataforma de hospedagem/deploy
agenteAgente de IA que vai implementar (define o arquivo de saída)

Campo tipo — obrigatório

O campo tipo é obrigatório em todo bloco Backend { }. Remove a premissa implícita de que todo projeto SPELL é uma aplicação web com API REST. Omitir tipo gera ❌ ERRO no compilador.

ValorTipo de aplicaçãoBlocos habilitadosBlocos desabilitados
webAplicação web com API RESTEndpoints, Telas, Seguranca
cliExecutável de linha de comandoComandos, Dados, RegrasEndpoints, Telas
desktopAplicação desktop nativa ou ElectronDados, RegrasEndpoints
bibliotecaBiblioteca ou SDK sem interface própriaDados, RegrasEndpoints, Telas

Para projetos cli, o bloco Endpoints { } é substituído pelo bloco Comandos { }. O auditor emite ⚠️ AVISO se Endpoints { } ou Telas { } forem declarados num projeto cli:

Tecnologia {
  Backend {
    tipo: cli
    linguagem: Go
    agente: claude-code
  }
}

Bloco Comandos — projetos CLI

Para projetos com tipo: cli, o bloco Comandos { } substitui Endpoints { }. Cada sub-bloco command descreve um comando do executável com seus argumentos, flags e contrato de saída.

Comandos {
  command compile {
    uso: spellcomp compile [arquivo]
    descricao: Compila o projeto e gera arquivos para o agente

    Args {
      arquivo: texto, opcional
      - Se omitido, descobre o arquivo-índice pela convenção de nome da pasta
    }

    Flags {
      --output: pasta de saída para os arquivos gerados
      --readable: gera output legível por humanos (padrão: compacto)
    }

    Saida {
      sucesso: lista de arquivos gerados com tamanho em bytes
      erro: mensagem com símbolo ❌ e número da linha do problema
    }

    - Roda auditoria completa antes de gerar qualquer arquivo
    - Aborta com código de saída 1 se houver ❌ ERRO
  }
}

Campos de command:

Campo / Sub-blocoDescrição
usoString de uso do comando — ex: mycli build [arquivo]
descricaoDescrição curta do que o comando faz
Args { }Argumentos posicionais com tipo e modificadores
Flags { }Flags nomeadas: --nome: descrição
Saida { }Contrato de saída: campos sucesso e erro

O auditor emite ⚠️ AVISO para comandos sem Saida { } declarado.

Múltiplos Backend e Frontend nomeados

Projetos com mais de uma unidade deployável podem declarar múltiplos Backend e Frontend com nomes distintos. O nome após a keyword é livre:

Tecnologia {
  Backend Api {
    tipo: web
    linguagem: C# / .NET 10
    framework: ASP.NET Core 10
    banco-principal: PostgreSQL
    agente: claude-code
  }
  Backend Worker {
    tipo: web
    linguagem: C# / .NET 10
    framework: Generic Host
    /// Worker processa mensagens da fila SQS — deploy separado da API
  }
  Frontend App {
    framework: React
    design-system: shadcn/ui
  }
  Frontend Admin {
    framework: React
    design-system: Ant Design
  }
}

O campo agente é lido do primeiro Backend que o declarar. Para projetos com unidade única, a sintaxe sem nome (Backend { }) continua válida.

Sub-bloco Autenticacao

Declara o método de autenticação e, opcionalmente, os claims do token:

Autenticacao {
  metodo: JWT HS256
  Claims {
    id: inteiro
    apelido: texto
    perfil: texto
    ip: texto
    /// ip validado a cada requisição — mudança de IP invalida a sessão
  }
}

Sub-bloco Comunicacao (depreciado)

⚠️ Depreciado. Use o bloco nomeado Integracao Nome { } no nível raiz do arquivo de Padrões de Engenharia. O compilador emite aviso ao encontrar Comunicacao { }.

// ❌ Depreciado — emite ⚠️ AVISO
Comunicacao {
  email: Amazon SES
}

// ✅ Use no lugar:
Integracao SES {
  tipo:     email
  provedor: Amazon SES
  sdk:      AWSSDK.SimpleEmail
}

Sub-bloco Integracao (depreciado)

⚠️ Depreciado. Use o bloco nomeado Integracao Nome { } no nível raiz do arquivo de Padrões de Engenharia. O compilador emite aviso ao encontrar Integracao { } dentro de Tecnologia.

// ❌ Depreciado — emite ⚠️ AVISO
Integracao {
  pagamento: Stripe
}

// ✅ Use no lugar:
Integracao Stripe {
  tipo:     pagamento
  provedor: Stripe
  sdk:      Stripe.net
  Configuracoes {
    Stripe__SecretKey:     segredo
    Stripe__WebhookSecret: segredo
  }
}

Sub-bloco Bibliotecas

Declara bibliotecas específicas que o arquiteto quer prescrever para evitar que a IA escolha por conta própria. Qualquer chave é válida — o compilador passa os valores verbatim para o output:

Bibliotecas {
  qrcode: QRCoder
  pdf: QuestPDF
  planilha: EPPlus
  imagem: ImageSharp
  markdown: Markdig
}