ANTIGRAVITY_GUIDELINES.md

🛰️ ANTIGRAVITY GUIDELINES — As Leis da Abstração Soberana (v3.1)

Public Markdown Document

🛰️ ANTIGRAVITY GUIDELINES — As Leis da Abstração Soberana (v3.1)

"Se algo é repetitivo, deve ser abstraído; se é específico, deve ser generalizado. Se é generalizável, o motor deve fazê lo sozinho."

1176 palavras13 headingsrepository root

🛰️ ANTIGRAVITY GUIDELINES — As Leis da Abstração Soberana (v3.1)

"Se algo é repetitivo, deve ser abstraído; se é específico, deve ser generalizado. Se é generalizável, o motor deve fazê-lo sozinho."

Este documento consolida a filosofia de desenvolvimento do Fastapp Engine. Ele orienta como o Arquiteto IA e os desenvolvedores colaboradores devem atuar para reduzir o boilerplate através da Escada de Abstração e da Auto-Evolução.


1. O Princípio da Generalização Soberana

  1. Abstração > Customização: Soluções genéricas no Core atendem múltiplos domínios via esquema. Evite "if (app === 'crm')". Em vez disso, use "if (object.has_feature('kanban'))".
  2. Esquema Governa a UI: Nenhuma funcionalidade é "solta". Para cada comportamento em tela (ex: is_sortable, is_filterable), deve existir um metadado correspondente que o habilite.
  3. Fastapp como Modelo 0: O Schema Manager é construído sobre as mesmas abstrações que oferece. Evoluir o Schema Manager é evoluir o motor para todos os inquilinos.
  4. Persistent DevShell: Ferramentas de arquitetura (Sidebars de Design) devem ser Singleton Globais localizadas no Layout principal, garantindo estabilidade durante navegações e snapshots sem perda de estado.

2. Camadas de Core (A Escada de Abstração)

As camadas do Core definem os níveis de inteligência e responsabilidade do motor:

  • 🟣 Core L1 — Atômico: Renderização pura de tipos e semânticas (money, phone, email, asset).
  • 🔵 Core L2 — Padrões: Kanban, Sidebars de edição, Layouts adaptativos baseados em crud_mode e comportamentos padronizados de CRUD.
  • 🟢 Core L3 — Orquestração: Lógica complexa de recursos e logística (routing_type, geo_constraints, alocação geotemporal). Automatização de UX baseada em Taxonomia Semântica.

3. Orquestração de Dados (DataSources)

O sistema utiliza a abstração de Conectividade para gerenciar dados internos e externos:

  • DataSource Object: Define type (REST, Internal, GraphQL), base_url, auth_strategy (Bearer, API Key, Laravel Proxy) e headers globais.
  • Vinculação: Um App ou Object aponta para um datasource_id. Alterar a infraestrutura (ex: mudar o host do Laravel) exige apenas uma mudança no DataSource, refletindo em todos os objetos vinculados.
  • Vantagem: Desacoplamento total entre a definição da taxonomia e a infraestrutura física de rede.

4. Protocolo FADAP 3.0 (Sovereign Sync & DDL)

A evolução estrutural segue um fluxo de estado atômico, soberano e OBRIGATORIAMENTE via API. Não há atalhos.

  1. Mutação (Sovereign Patch): Alterações estruturais (campos, objetos, workflows, crud_mode) ocorrem EXCLUSIVAMENTE via PATCH /api/app/[id] no Nuxt.
  2. Snapshot (Consolidação): Geração do static-manifest.ts disparada via POST /api/system/snapshot. É a única forma de garantir que o runtime veja a nova estrutura.
  3. DDL Automation: Para objetos nature: physical, a criação ou alteração de tabelas é disparada pelo motor Nuxt APÓS o Patch de metadados, garantindo consistência.
  4. Estado & Cache: O sistema invalida caches imediatamente após o snapshot.

[!CAUTION]
Integrity Pitfall: Nunca manipule o banco de dados diretamente ou edite o static-manifest.ts. Se você ignorar a API, criará um "drift" entre o Desejo (Metadados) e a Realidade (DB), quebrando o motor.

[!CAUTION]
Integrity Pitfall: Falhas no salvamento de metadados complexos (ex: arrays aninhados) podem corromper o esquema no banco. O static-manifest.ts é a sua "Fonte da Verdade" para recuperação (Disaster Recovery).


11. Defensive Dynamic Rendering (L1/L2)

A renderização dinâmica deve ser resiliente a metadados incompletos ou malformados:

  1. Label Fallback: Nunca assuma que prop.label existe. Use prop.label || prop.name || '' para evitar TypeError: can't access property toUpperCase.
  2. Multiplicity Logic Core:
    • Toda propriedade do tipo array ou inner_collection deve ser considerada isAttachedMany por padrão.
    • A ausência de foreign_object não deve impedir a detecção de multiplicidade para tipos de coleção.
  3. Data Hydration Guards: No DynamicForm, garanta que o pulso de dados inicial (initialValues) seja sanitizado antes de ser injetado no rastro de reatividade do Vee-Validate/Zod.

12. Metadata Integrity & Recovery

  1. Sovereign Restore: Se o banco de dados for corrompido ou o salvamento via Arquiteto IA falhar de forma catastrófica, o procedimento de restauração deve ser:
    • Extrair o objeto íntegro do static-manifest.ts.
    • Realizar um PATCH manual/via script ignorando campos de auditoria (created_at/updated_at).
    • Disparar /api/system/snapshot.
  2. Validation before Writing: Futuras evoluções do Core devem validar a integridade estrutural (Schema-of-Schemas) no motor Nuxt antes de persistir no DB.

5. Alinhamento Laravel (Identity & RBAC)

O Laravel provê a inteligência de governança que o Nuxt interpreta:

  • Identity Authority: O Laravel define quem acessa o quê (User & UserApp).
  • Dynamic RBAC: Permissões (fastapp_permission) são exportadas para o Nuxt no payload do me() ou JWT.
  • Data Sovereignty: O Laravel governa o Domínio Externo (APIs de referência como Central Filtros) enquanto o Nuxt governa os Metadados e a execução de DDL.

6. Atributos de Comportamento (Ontologia v3)

Atributo Valores Impacto no Motor (Behavior)
crud_mode modal, sidebar, page Define onde o CoreDynamicForm será renderizado.
layout_grid col-span-12, 6, 4, 3 Define a largura responsiva do campo no formulário (Grid de 12 colunas).
semantic money, asset, point Ativa máscaras, uploads ou mapas (CoreMapRenderer).
routing_type waypoint, route Ativa inteligência logística e cálculo de ETAs.
provider local, external-api Define se o dado vem do Prisma local ou do Laravel/Externo.

7. AI Mutation Guard & Fetch Rule

[!CAUTION]
Fetch before Modify: Sempre execute GET /api/app/[id] antes de propor mudanças para garantir o estado real da taxonomia e evitar sobrescrever metadados de outros agentes/usuários.

[!IMPORTANT]
O Princípio da Mutação Soberana: Para alterar a estrutura do próprio FastApp (Builder, Editores, Workflows), você deve realizar o PATCH no App ID 16. O motor aprende e evolui alterando seu próprio esquema.

[!IMPORTANT]
O motor aprende com cada app. O sucesso do Arquiteto IA é medido pela quantidade de código deletado em favor de metadados interpretados.


8. Arquitetura de Performance (Architect Sync)

Para garantir que o Arquiteto IA seja fluido, seguimos estas regras de sincronização:

  1. Memory Memoization: Evite JSON.parse(JSON.stringify()) em cada pulso de reatividade. Utilize clones profundos apenas no início da sessão ou em trocas de contexto.
  2. Debounced Mutations: Alterações em metadados granulares (como labels ou grid) devem ser disparadas com debounce (mínimo 300ms) para evitar layout thrashing.
  3. Reactive Bridges: Páginas e componentes devem apenas "publicar" o esquema ativo no systemStore.activeObjectSchema, delegando a renderização da ferramenta de edição ao motor global.

9. UX Singleton Pattern (The Designer Hub)

Para garantir uma experiência de desenvolvimento sem fricção:

  1. Fixed Shell Principle: O Sidebar de Arquitetura deve ser persistente. Ele nunca deve ser destruído durante a navegação entre Table e Form de um mesmo objeto.
  2. Stateless Bridging: O componente designer não possui estado próprio; ele é um espelho profundo do activeObjectSchema do sistema.
  3. No-Modal Architecting: Evite modais para edição de metadados. Use sidebars fixos que permitam ao designer observar o impacto visual das mudanças no formulário dinâmico em tempo real.

10. Taxonomy-Driven GUI (Semantic Layer)

A interface deve se adaptar automaticamente com base na taxonomia dos dados:

  1. Topology Awareness: Componentes de lista devem detectar se o objeto é root (vários registros) ou attached-one (exibição de detalhes aninhados) e ajustar o layout automaticamente.
  2. Semantic Rendering: O CoreDynamicForm deve priorizar atributos de semântica (ex: semantic: asset gera dropzone, semantic: identity gera destaque de cabeçalho).
  3. Visual Hierarchy: Áreas de configuração no Sidebar devem seguir a hierarquia: Identidade (Quem) → Atributos (O quê) → Motor (Como) → Agente (Para quem).