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."
🛰️ 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
- 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'))".
- 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. - 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.
- 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_modee 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.
- Mutação (Sovereign Patch): Alterações estruturais (campos, objetos, workflows, crud_mode) ocorrem EXCLUSIVAMENTE via
PATCH /api/app/[id]no Nuxt. - Snapshot (Consolidação): Geração do
static-manifest.tsdisparada viaPOST /api/system/snapshot. É a única forma de garantir que o runtime veja a nova estrutura. - 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. - Estado & Cache: O sistema invalida caches imediatamente após o snapshot.
[!CAUTION]
Integrity Pitfall: Nunca manipule o banco de dados diretamente ou edite ostatic-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. Ostatic-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:
- Label Fallback: Nunca assuma que
prop.labelexiste. Useprop.label || prop.name || ''para evitarTypeError: can't access property toUpperCase. - Multiplicity Logic Core:
- Toda propriedade do tipo
arrayouinner_collectiondeve ser consideradaisAttachedManypor padrão. - A ausência de
foreign_objectnão deve impedir a detecção de multiplicidade para tipos de coleção.
- Toda propriedade do tipo
- 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
- 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
PATCHmanual/via script ignorando campos de auditoria (created_at/updated_at). - Disparar
/api/system/snapshot.
- Extrair o objeto íntegro do
- 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 dome()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 executeGET /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 oPATCHno 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:
- 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. - Debounced Mutations: Alterações em metadados granulares (como labels ou grid) devem ser disparadas com debounce (mínimo 300ms) para evitar layout thrashing.
- 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:
- 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.
- Stateless Bridging: O componente designer não possui estado próprio; ele é um espelho profundo do
activeObjectSchemado sistema. - 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:
- Topology Awareness: Componentes de lista devem detectar se o objeto é
root(vários registros) ouattached-one(exibição de detalhes aninhados) e ajustar o layout automaticamente. - Semantic Rendering: O
CoreDynamicFormdeve priorizar atributos de semântica (ex:semantic: assetgera dropzone,semantic: identitygera destaque de cabeçalho). - Visual Hierarchy: Áreas de configuração no Sidebar devem seguir a hierarquia: Identidade (Quem) → Atributos (O quê) → Motor (Como) → Agente (Para quem).