Especificação
Documento normativo do AI Parlance (v0.1). Define gramática, semântica, builtins, políticas e níveis de estabilidade dos blocos. Visão geral: Introdução. Sintaxe: Sintaxe.Glossário
Escopo e limites
AI Parlance cobre hoje:- modelagem de dados e API (CRUD)
- autorização declarativa
- workflows e eventos de domínio limitados
- UI custom ou design system
- algoritmos complexos ou otimizações manuais
- integrações ad hoc sem bloco dedicado
- SQL imperativo escrito à mão (bloco
customreservado para o futuro; fora do v0.1)
Pipeline
.aip é a fonte; a AST é representação interna.
Toolchain (v0.1): parser, validador e transpiladores ainda não publicados. Este documento é a fonte normativa; gramática em spec/v0.1/grammar.ebnf.
Bloco app obrigatório
Toda spec v0.1 deve começar com exatamente um bloco app (recomendado @0.1):
auth ao usar authenticated, role ou permission em policy. Exemplo mínimo: examples/minimal.aip.
Gramática (EBNF resumida)
required | optional → unique → default(...).
Comentários de linha: // até o fim da linha.
Níveis de estabilidade
Blocos de topo
enum { } / relation { } e has_one / has_many / many_to_many estão no roadmap, não no v0.1.
Blocos beta podem mudar entre releases v0.x menores. O Core é estável dentro do v0.1; a spec global permanece rascunho até existir toolchain de referência.
Campos implícitos
Todaentity recebe automaticamente (salvo id: uuid explícito):
O modificador
timestamps em entity é documentação opcional; não desativa esses campos.
soft_delete em entity adiciona deleted_at: datetime optional.
Builtins
Builtins não listados são inválidos.
Ciclo de vida
Eventos de sistema (gatilhos dewhen):
when Lead.created em workflow equivale a on created em lifecycle. Prefira lifecycle com vários ganchos na mesma entidade.
Statements de workflow (v0.1)
Dentro deworkflow / ganchos de lifecycle: var, if / reject, assign, create, emit, notify, dispatch (opcional after + duração). Durações: 15m, 1h, 1d — ver Workflows.
Referências forward são válidas: emit e create podem usar event / entity declarados depois no arquivo.
Políticas
Lead.seller como belongs_to User.
Acesso padrão
Entidades sempolicy: transpiladores devem usar authenticated no CRUD quando app tem auth, ou public sem auth. policy explícita prevalece.
Propostos (fora da gramática v0.1)
- Declaração top-level
permission nome - Blocos
endpointpara rate limit por rota
Validação
O validador deve rejeitar:- ausência ou duplicata do bloco
app - referência a
entity/event/jobinexistente policysemauthnoappquando usarauthenticatedouroleowner(field)com campo inexistenteworkflowsemwhen- modificadores duplicados ou fora de ordem (warning vs error por regra)
- builtins não registrados
Matriz de transpiladores
Custo de inferência LLM incide na edição do
.aip, não na transpilação offline.
