@semacode/cli 1.5.17 → 1.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +104 -112
  2. package/SEMA_BRIEF.curto.txt +6 -6
  3. package/SEMA_BRIEF.md +17 -24
  4. package/SEMA_BRIEF.micro.txt +5 -5
  5. package/SEMA_INDEX.json +86 -224
  6. package/dist/drift.d.ts +3 -3
  7. package/dist/drift.js +5 -111
  8. package/dist/drift.js.map +1 -1
  9. package/dist/importador.d.ts +1 -1
  10. package/dist/importador.js +1 -200
  11. package/dist/importador.js.map +1 -1
  12. package/dist/index.js +59 -479
  13. package/dist/index.js.map +1 -1
  14. package/dist/projeto.js +0 -20
  15. package/dist/projeto.js.map +1 -1
  16. package/dist/tipos.d.ts +1 -1
  17. package/docs/AGENT_STARTER.md +9 -8
  18. package/docs/cli.md +106 -119
  19. package/docs/como-ensinar-a-sema-para-ia.md +4 -4
  20. package/docs/env.md +56 -56
  21. package/docs/fluxo-pratico-ia-sema.md +171 -167
  22. package/docs/integracao-com-ia.md +98 -96
  23. package/docs/mcp.md +51 -53
  24. package/docs/pagamento-ponta-a-ponta.md +11 -1
  25. package/docs/persistencia-vendor-first.md +1 -1
  26. package/docs/prompt-base-ia-sema.md +6 -5
  27. package/docs/rollback.md +1 -1
  28. package/docs/sintaxe.md +196 -394
  29. package/exemplos/agendamento.sema +0 -1
  30. package/exemplos/assinatura.sema +0 -3
  31. package/exemplos/auditoria.sema +2 -1
  32. package/exemplos/estoque.sema +2 -1
  33. package/exemplos/fila.sema +2 -3
  34. package/exemplos/multi_tenant.sema +2 -2
  35. package/exemplos/notificacao.sema +53 -2
  36. package/exemplos/operacao_estrategia.sema +231 -0
  37. package/exemplos/pagamento.sema +214 -2
  38. package/exemplos/pedido.sema +156 -20
  39. package/exemplos/replica_analitica_erp.sema +160 -0
  40. package/exemplos/webhook.sema +2 -4
  41. package/node_modules/@sema/gerador-css/package.json +1 -1
  42. package/node_modules/@sema/gerador-dart/package.json +1 -1
  43. package/node_modules/@sema/gerador-html/package.json +1 -1
  44. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  45. package/node_modules/@sema/gerador-lua/package.json +1 -1
  46. package/node_modules/@sema/gerador-python/package.json +1 -1
  47. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  48. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +2 -4
  49. package/node_modules/@sema/nucleo/dist/formatador/index.js +14 -42
  50. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
  51. package/node_modules/@sema/nucleo/dist/ir/conversor.js +9 -204
  52. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  53. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -35
  54. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -21
  55. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
  56. package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -40
  57. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  58. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +6 -5
  59. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +76 -307
  60. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  61. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +2 -0
  62. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +32 -2
  63. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -1
  64. package/node_modules/@sema/nucleo/package.json +1 -1
  65. package/node_modules/@sema/padroes/package.json +1 -1
  66. package/package.json +14 -14
@@ -5,12 +5,16 @@ Este documento descreve o vertical oficial de pagamento da Sema no fluxo publico
5
5
  O objetivo nao e mostrar um exemplo fofo. O objetivo e demonstrar que a linguagem ja consegue modelar um fluxo de negocio real com:
6
6
 
7
7
  - contrato publico
8
+ - seguranca e autorizacao
9
+ - classificacao de dados
10
+ - segredos e proibicoes explicitas
8
11
  - regras
9
12
  - efeitos operacionais
13
+ - execucao, idempotencia, retry e compensacao
10
14
  - transicoes de estado
11
15
  - orquestracao
12
16
  - erros publicos
13
- - testes executaveis
17
+ - testes executaveis com saida, status ou erro observavel
14
18
 
15
19
  ## Arquivos de referencia
16
20
 
@@ -62,12 +66,16 @@ E expoe:
62
66
 
63
67
  A `task processar_pagamento` faz o trabalho central:
64
68
 
69
+ - exige `authz`
70
+ - classifica `dados`
71
+ - declara `segredos`, `audit` e `forbidden`
65
72
  - valida entrada
66
73
  - consulta o gateway
67
74
  - persiste o pagamento
68
75
  - emite evento
69
76
  - notifica comprovante
70
77
  - registra auditoria
78
+ - declara `execucao` com idempotencia, timeout, retry, compensacao e criticidade
71
79
  - garante consistencia da saida
72
80
 
73
81
  ### Estado e transicoes
@@ -146,9 +154,11 @@ sema verificar exemplos/pagamento.sema --json --saida ./.tmp/verificacao-pagamen
146
154
  Se esse vertical passa, a Sema ja consegue demonstrar que:
147
155
 
148
156
  - modela contrato publico
157
+ - modela superficie sensivel sem deixar seguranca invisivel
149
158
  - modela efeitos operacionais
150
159
  - modela falhas reais
151
160
  - modulariza dominio com `use`
161
+ - declara idempotencia e execucao critica sem criar sintaxe nova
152
162
  - gera artefatos coerentes para TypeScript e Python
153
163
  - executa testes gerados sem gambiarra conceitual
154
164
 
@@ -1,6 +1,6 @@
1
1
  # Persistencia Vendor-First
2
2
 
3
- Sema 1.5.7 trata banco como superficie semantica de primeira classe. Isso significa assumir diferencas reais entre engines e coloca-las no contrato, no semantico, no IR, no drift, no impact map, na renomeacao assistida, no `verificar` e na extensao. Nesta linha, o `drift` tambem materializa persistencia local real em `Preferences`, `localStorage` e `sessionStorage` quando a task esta ancorada no arquivo que usa essas APIs.
3
+ Sema 1.5.18 trata banco como superficie semantica de primeira classe. Isso significa assumir diferencas reais entre engines e coloca-las no contrato, no semantico, na IR, no drift, no impact map, na renomeacao assistida, no `verificar` e na extensao. Nesta linha, o `drift` tambem materializa persistencia local real em `Preferences`, `localStorage` e `sessionStorage` quando a task esta ancorada no arquivo que usa essas APIs, preservando o framing IA-first da release atual.
4
4
 
5
5
  ## Engines publicas
6
6
 
@@ -2,18 +2,18 @@
2
2
 
3
3
  Este arquivo serve como prompt-base oficial para qualquer IA que precise ler, escrever, revisar ou transformar arquivos `.sema`.
4
4
 
5
- O objetivo nao e fazer a IA "improvisar bonito". O objetivo e fazer a IA operar a linguagem com previsibilidade. A Sema nao foi desenhada para ergonomia humana como prioridade; ela foi desenhada para IA.
5
+ O objetivo nao e fazer a IA "improvisar bonito". O objetivo e fazer a IA operar a linguagem com previsibilidade. A Sema nao foi desenhada para ergonomia humana como prioridade; ela foi desenhada para IA. Humanos escrevem, revisam e aprovam; o consumidor primario e o agente.
6
6
 
7
7
  ## Prompt-base
8
8
 
9
9
  Use o texto abaixo como base:
10
10
 
11
11
  ```text
12
- Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao para IA e backend vivo.
12
+ Voce esta trabalhando com Sema, um contrato semantico IA-first para agentes operarem software vivo.
13
13
 
14
- Tecnicamente, a Sema funciona como linguagem de intencao orientada a contrato. Operacionalmente, ela existe para governar semantica acima da stack e reduzir ambiguidade para IA, nao para substituir arquitetura, design ou curadoria humana.
14
+ Tecnicamente, a Sema funciona como linguagem de intencao orientada a contrato. Operacionalmente, ela existe para governar semantica acima da stack e traduzir intencao operacional para IA, nao para substituir arquitetura, design ou aprovacao humana.
15
15
 
16
- Trate a Sema como linguagem de especificacao executavel e protocolo de governanca semantica. Nao invente sintaxe, palavras-chave ou blocos fora da gramatica e dos exemplos oficiais.
16
+ Trate a Sema como contrato semantico executavel e protocolo de governanca IA-first. Nao invente sintaxe, palavras-chave ou blocos fora da gramatica e dos exemplos oficiais.
17
17
 
18
18
  Fontes de verdade, em ordem:
19
19
  1. se o projeto expuser `SEMA_CONTEXT.md`, comece por ele
@@ -31,6 +31,7 @@ Regras de operacao:
31
31
  - use o formatador oficial da Sema como fonte unica de estilo
32
32
  - use diagnosticos estruturados como contrato de correcao
33
33
  - use a IR como fonte de verdade semantica quando houver duvida
34
+ - use `predicadoCanonico` como normalizacao opcional; preserve o `predicado` original
34
35
  - nao conclua uma alteracao sem validar e verificar o modulo
35
36
  - trate `importar` como bootstrap revisavel, nao como contrato final automatico
36
37
  - trate `drift` como medicao de verdade contra codigo vivo
@@ -58,7 +59,7 @@ Se algo nao estiver claro, siga a forma ja usada nos exemplos oficiais. Nao impr
58
59
  Se voce quiser um prompt menor para uso frequente:
59
60
 
60
61
  ```text
61
- Trabalhe com Sema como DSL semantica orientada a contrato. Nao invente sintaxe. Use os exemplos oficiais e a gramatica como referencia de escrita. Use `ir --json` como fonte de verdade semantica, `diagnosticos --json` como fonte de correcao e `sema formatar` como fonte unica de estilo. Antes de encerrar, rode validacao e verificacao.
62
+ Trabalhe com Sema como contrato semantico IA-first orientado a agente. Nao invente sintaxe. Use os exemplos oficiais e a gramatica como referencia de escrita. Use `ir --json` como fonte de verdade semantica, `diagnosticos --json` como fonte de correcao e `sema formatar` como fonte unica de estilo. Antes de encerrar, rode validacao e verificacao.
62
63
  ```
63
64
 
64
65
  Se voce quiser um prompt ainda mais curto e pronto para colar, use:
package/docs/rollback.md CHANGED
@@ -20,7 +20,7 @@ npm dist-tag add @semacode/mcp@<versao-boa> latest
20
20
  ```
21
21
 
22
22
  3. Se o problema for so VSIX ou asset de release, substitua o asset no GitHub Release ou publique uma release patch.
23
- 4. Prefira publicar patch corretivo (`1.5.10`, por exemplo) quando o pacote ja saiu para usuarios.
23
+ 4. Prefira publicar patch corretivo (`1.5.18`, por exemplo) quando o pacote ja saiu para usuarios.
24
24
 
25
25
  ## Validacao de rollback
26
26
 
package/docs/sintaxe.md CHANGED
@@ -1,410 +1,212 @@
1
- # Sintaxe Canonica
2
-
3
- A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA.
4
-
5
- ## Regras basicas
6
-
7
- - um arquivo `.sema` contem um `module` principal
8
- - cada bloco abre com palavra-chave e fecha com `}`
9
- - campos usam `nome: valor`
10
- - blocos declarativos podem aparecer aninhados quando o contrato exigir
11
- - `tests` usa blocos `caso`
1
+ # Sintaxe Canonica
2
+
3
+ A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA. A escrita humana pode ser legivel, mas o alvo principal da sintaxe e gerar contrato consumivel por agente.
4
+
5
+ ## Regras basicas
6
+
7
+ - um arquivo `.sema` contem um `module` principal
8
+ - cada bloco abre com palavra-chave e fecha com `}`
9
+ - campos usam `nome: valor`
10
+ - blocos declarativos podem aparecer aninhados quando o contrato exigir
11
+ - `tests` usa blocos `caso`
12
+
13
+ ## Blocos de primeira classe
14
+
15
+ - `module`
16
+ - `use`
17
+ - `database`
18
+ - `type`
19
+ - `entity`
20
+ - `enum`
21
+ - `state`
22
+ - `task`
23
+ - `flow`
24
+ - `route`
25
+ - `worker`
26
+ - `evento`
27
+ - `fila`
28
+ - `cron`
29
+ - `webhook`
30
+ - `cache`
31
+ - `storage`
32
+ - `policy`
33
+ - `tests`
34
+ - `docs`
35
+ - `comments`
36
+
37
+ ## Subblocos comuns
38
+
39
+ - `input`
40
+ - `output`
41
+ - `rules`
42
+ - `effects`
43
+ - `auth`
44
+ - `authz`
45
+ - `dados`
46
+ - `audit`
47
+ - `segredos`
48
+ - `forbidden`
49
+ - `impl`
50
+ - `vinculos`
51
+ - `execucao`
52
+ - `guarantees`
53
+ - `error`
54
+ - `fields`
55
+ - `invariants`
56
+ - `transitions`
57
+ - `given`
58
+ - `when`
59
+ - `expect`
12
60
 
13
- ## Blocos de primeira classe
61
+ ## Tipos primitivos
14
62
 
15
- - `module`
16
- - `use`
17
- - `database`
18
- - `type`
19
- - `entity`
20
- - `enum`
21
- - `state`
22
- - `book`
23
- - `work`
24
- - `part`
25
- - `chapter`
26
- - `section`
27
- - `scene`
28
- - `character`
29
- - `arc`
30
- - `audience`
31
- - `thesis`
32
- - `argument`
33
- - `claim`
34
- - `source`
35
- - `concept`
36
- - `example`
37
- - `voice`
38
- - `style_rule`
39
- - `lexicon`
40
- - `motif`
41
- - `canon`
42
- - `agent`
43
- - `task`
44
- - `flow`
45
- - `route`
46
- - `worker`
47
- - `evento`
48
- - `fila`
49
- - `cron`
50
- - `webhook`
51
- - `cache`
52
- - `storage`
53
- - `policy`
54
- - `tests`
55
- - `docs`
56
- - `comments`
63
+ Tipos primitivos reconhecidos diretamente:
57
64
 
58
- ## Subblocos comuns
65
+ - `Texto`
66
+ - `Numero`
67
+ - `Inteiro`
68
+ - `Decimal`
69
+ - `Booleano`
70
+ - `Data`
71
+ - `Timestamp`
72
+ - `Objeto`
73
+ - `Id`
74
+ - `Email`
75
+ - `Json`
59
76
 
60
- - `input`
61
- - `output`
62
- - `rules`
63
- - `effects`
64
- - `auth`
65
- - `authz`
66
- - `dados`
67
- - `audit`
68
- - `segredos`
69
- - `forbidden`
70
- - `impl`
71
- - `vinculos`
72
- - `execucao`
73
- - `guarantees`
74
- - `error`
75
- - `fields`
76
- - `invariants`
77
- - `transitions`
78
- - `given`
79
- - `when`
80
- - `expect`
77
+ `Timestamp` e `Objeto` funcionam como aliases primitivos suportados e preservam o texto original na IR.
81
78
 
82
79
  ## Tipos compostos
83
-
84
- ```sema
85
- input {
86
- ids: Lista<Id> required
87
- metadata: Mapa<Texto, Texto>
88
- responsavel: Opcional<Usuario>
89
- chave_publica: Texto|Id
90
- }
91
- ```
92
-
80
+
81
+ ```sema
82
+ input {
83
+ ids: Lista<Id> required
84
+ metadata: Mapa<Texto, Texto>
85
+ responsavel: Opcional<Usuario>
86
+ chave_publica: Texto|Id
87
+ }
88
+ ```
89
+
93
90
  Formas suportadas:
94
-
95
- - `Lista<T>`
96
- - `Mapa<K, V>`
97
- - `Opcional<T>`
98
- - `T1|T2`
91
+
92
+ - `Lista<T>`
93
+ - `Mapa<K, V>`
94
+ - `Opcional<T>`
95
+ - `T1|T2`
99
96
  - `T?`
100
97
 
101
- ## Profiles Author e Agents
102
-
103
- O profile Author modela obra autoral, nao apenas romance. Ele pode descrever ficcao, nao-ficcao, livro tecnico, ensaio, manual, biografia, pesquisa narrada, curso em formato de livro ou manifesto. A ideia e governar intencao, publico, promessa, voz, estrutura, argumentos, fontes, continuidade e regras de estilo.
104
-
105
- Blocos Author suportados:
106
-
107
- - `book` ou `work`: obra inteira
108
- - `part`, `chapter`, `section`: estrutura editorial
109
- - `scene`, `character`, `arc`: narrativa quando a obra tiver ficcao ou relato
110
- - `audience`, `thesis`, `argument`, `claim`, `source`, `concept`, `example`: nao-ficcao, ensino, pesquisa e argumentacao
111
- - `voice`, `style_rule`, `lexicon`, `motif`, `canon`: voz, vocabulario, repeticoes, proibicoes e continuidade
112
-
113
- `style_rule` aceita subblocos livres como `proibido`, `evitar`, `ecos`, `preferir`, `require` e `tolerancia`. Isso cobre frases cliches, muletas, ecos repetidos e limites de repeticao sem prender a linguagem a um genero literario.
114
-
115
- Todo modulo com blocos Author tambem recebe no IR a regra sintetica `regras_gerais_author`. Ela aplica automaticamente o piso editorial geral: mostrar por evidencia, causa e consequencia, cena com dupla funcao, exposicao com atrito, dialogo com subtexto, final sem slogan, morte com peso estrutural, especificidade sensorial, voz distinta e anti-cliche adaptativa. Regras locais da obra podem ser mais fortes, mas nao devem apagar esse piso.
116
-
117
- Quando a obra declara um tema sensivel ou factual, como `autismo`, `saude`, `diagnostico`, `neurodiversidade`, `educacao inclusiva`, `juridico` ou `financeiro`, o contrato deixa de ser apenas orientativo. A validacao exige `book/work`, `audience`, `claim`, `source`, `style_rule`, `agent` e um `flow` chamando esse agent. Claims sensiveis precisam declarar `source/fonte/evidencia` e `confidence/confianca`.
118
-
119
- ```sema
120
- module livro.tecnico.ia {
121
- work protocolo_ia {
122
- titulo: "Sistemas para IA"
123
- proposito: "ensinar governanca de agentes"
124
- tipo: nao_ficcao
125
- }
126
-
127
- audience devs {
128
- nivel: intermediario
129
- promessa: "sair com um protocolo aplicavel"
130
- }
131
-
132
- claim contratos_reduzem_adivinhacao {
133
- source: pesquisa_interna
134
- confidence: media
135
- }
136
-
137
- voice didatica {
138
- tom: claro
139
- ritmo: progressivo
140
- }
141
-
142
- style_rule anti_texto_raso {
143
- proibido {
144
- frase: "de alguma forma"
145
- cliche: "o tempo parecia parar"
146
- }
147
- ecos {
148
- palavra: "eco"
149
- }
150
- tolerancia {
151
- max_repeticao_palavra_por_trecho: 2
152
- }
153
- }
154
-
155
- agent revisor_estilo {
156
- role: editor_author
157
- goal: cortar_cliche_e_eco
158
- tools {
159
- ler_contrato
160
- analisar_trecho
161
- }
162
- memory {
163
- canon
164
- style_rule
165
- }
166
- policy {
167
- nao_reescrever_sem_aprovacao
168
- citar_trechos_afetados
169
- }
170
- }
171
-
172
- flow revisar_secao {
173
- trecho: Texto
174
- etapa estilo usa revisor_estilo com trecho = trecho
175
- }
176
- }
177
- ```
178
-
179
- `agent` e bloco de primeira classe. Um agent precisa declarar ao menos `role`/`goal`, `tools` e `policy`; `memory` gera aviso quando ausente, porque agente sem memoria declarada tende a improvisar contexto.
180
-
181
- Exemplo de obra sensivel:
182
-
183
- ```sema
184
- module livro.autismo {
185
- work guia_autismo {
186
- titulo: "Autismo sem reducionismo"
187
- proposito: "orientar familias sem substituir avaliacao clinica"
188
- tema: autismo
189
- sensivel: verdadeiro
190
- }
191
-
192
- audience familias_e_educadores {
193
- publico: pais_educadores_pessoas_autistas
194
- limites: "nao substitui avaliacao clinica"
195
- }
196
-
197
- claim autismo_e_espectro {
198
- texto: "autismo e um espectro com manifestacoes variadas"
199
- source: dsm5_tr
200
- confidence: alta
201
- }
202
-
203
- source dsm5_tr {
204
- tipo: referencia_clinica
205
- confianca: alta
206
- }
207
-
208
- style_rule linguagem_respeitosa {
209
- proibido {
210
- generalizacao: "todo autista"
211
- infantilizacao: "anjinho especial"
212
- promessa: "cura garantida"
213
- }
214
- evitar {
215
- frase: "superar o autismo"
216
- }
217
- }
218
-
219
- agent checador_sensibilidade {
220
- role: revisor_sensibilidade
221
- goal: checar_fontes_linguagem_e_generalizacoes
222
- tools {
223
- ler_contrato
224
- verificar_claim
225
- revisar_trecho
226
- }
227
- memory {
228
- source
229
- style_rule
230
- audience
231
- }
232
- policy {
233
- nao_diagnosticar
234
- nao_prometer_tratamento
235
- citar_trechos_afetados
236
- }
237
- }
238
-
239
- flow revisar_capitulo {
240
- trecho: Texto
241
- etapa sensibilidade usa checador_sensibilidade com trecho = trecho
242
- }
243
- }
244
- ```
245
-
246
- ## Persistencia vendor-first
247
-
248
- O bloco `database` modela banco e recursos persistidos sem apagar as diferencas entre engines.
249
-
250
- Estrutura base:
251
-
252
- ```sema
253
- database principal_postgres {
254
- engine: postgres
255
- consistency: forte
256
- durability: alta
257
- transaction_model: mvcc
258
- query_model: sql
259
- }
260
- ```
261
-
262
- Recursos canonicamente suportados:
263
-
264
- - `table`
265
- - `index`
266
- - `relationship`
267
- - `query`
268
- - `retention`
269
- - `lock`
270
- - `replication`
271
- - `collection`
272
- - `document`
273
- - `keyspace`
274
- - `stream`
275
- - `capabilities`
276
-
277
- Exemplo relacional:
278
-
279
- ```sema
280
- database principal_postgres {
281
- engine: postgres
282
- schema: public
283
- capabilities {
284
- joins
285
- views
286
- foreign_keys
287
- }
288
- table pedidos {
289
- entity: Pedido
290
- }
291
- relationship pedido_cliente {
292
- from: Pedido
293
- to: Cliente
294
- }
295
- query buscar_pedidos {
296
- mode: sql
297
- }
298
- }
299
- ```
300
-
301
- Exemplo documental:
302
-
303
- ```sema
304
- database principal_mongodb {
305
- engine: mongodb
306
- query_model: documento
307
- collection pedidos {
308
- collection: pedidos
309
- }
310
- document pedido_snapshot {
311
- entity: PedidoSnapshot
312
- }
313
- query pipeline_pedido {
314
- mode: pipeline
315
- }
316
- }
317
- ```
318
-
319
- Exemplo key-value:
320
-
321
- ```sema
322
- database principal_redis {
323
- engine: redis
324
- query_model: chave_valor
325
- keyspace cache_pedidos {
326
- ttl: "300s"
327
- }
328
- stream eventos_pedido {
329
- surface: fila
330
- }
331
- }
332
- ```
333
-
334
- ## Compatibilidade declarada
335
-
336
- O IR de persistencia calcula compatibilidade por recurso com quatro estados:
337
-
338
- - `nativo`
339
- - `adaptado`
340
- - `parcial`
341
- - `invalido`
342
-
343
- Isso existe para deixar explicito quando um contrato esta pedindo de um banco algo que ele nao entrega do mesmo jeito.
344
-
345
- O mesmo principio vale para runtime de orquestracao. Superficies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra familias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.
98
+ ## Predicados normalizados
346
99
 
347
- ## Interop e implementacao externa
100
+ Predicados escritos em contrato preservam o texto original em `predicado`. Quando a CLI reconhece uma forma comum, a expressao estruturada pode expor tambem `predicadoCanonico`.
348
101
 
349
- `use` e `impl` aceitam origens de codigo vivo quando o contrato precisa rastrear runtime real. As origens semanticas suportadas sao:
350
-
351
- - `ts`
352
- - `py`
353
- - `dart`
354
- - `lua`
355
- - `php`
356
- - `cs`
357
- - `java`
358
- - `go`
359
- - `rust`
360
- - `cpp`
361
-
362
- Exemplo com Lua:
363
-
364
- ```sema
365
- module app.runtime {
366
- use lua src.runtime
367
-
368
- task processar_snapshot {
369
- input {
370
- payload: Json required
371
- }
372
- output {
373
- resultado: Json
374
- }
375
- impl {
376
- lua: src.runtime.RuntimeBridge.processSnapshot
377
- }
378
- guarantees {
379
- resultado existe
380
- }
381
- }
382
- }
383
- ```
384
-
385
- Para Lua, o `drift` resolve funcoes declaradas como `function nome(...)`, `local function nome(...)`, `function Tabela.metodo(...)`, `function Tabela:metodo(...)` e atribuicoes `Tabela.metodo = function(...)`. A forma com `:` e normalizada para ponto no contrato.
386
-
387
- Exemplo com PHP:
102
+ Exemplo:
388
103
 
389
104
  ```sema
390
- module app.php {
391
- use php App.Http.Controllers.UserController
392
-
393
- task criar_usuario {
394
- input {
395
- payload: Json required
396
- }
397
- output {
398
- resultado: Json
399
- }
400
- impl {
401
- php: App.Http.Controllers.UserController.store
402
- }
403
- guarantees {
404
- resultado existe
405
- }
406
- }
105
+ rules {
106
+ email deve_ser email_valido
107
+ nome deve_ser preenchido
407
108
  }
408
109
  ```
409
110
 
410
- Para PHP, o `drift` resolve namespaces, classes, traits, interfaces, enums, metodos, funcoes, closures atribuidas, rotas Laravel/Slim (`Route::get`, `Route::post`, `$app->get`) e atributos HTTP no estilo Symfony/PHP 8 (`#[Route]`, `#[Get]`, `#[Post]`). `Route::resource` e `Route::apiResource` sao expandidos para acoes REST canonicas.
111
+ Na IR, `email_valido` continua existindo como escrito e pode receber uma normalizacao como `valid_email`; `preenchido` pode receber `filled`. Esse campo e opcional e serve a agente/automacao, nao muda a sintaxe publica.
112
+
113
+ ## Persistencia vendor-first
114
+
115
+ O bloco `database` modela banco e recursos persistidos sem apagar as diferencas entre engines.
116
+
117
+ Estrutura base:
118
+
119
+ ```sema
120
+ database principal_postgres {
121
+ engine: postgres
122
+ consistency: forte
123
+ durability: alta
124
+ transaction_model: mvcc
125
+ query_model: sql
126
+ }
127
+ ```
128
+
129
+ Recursos canonicamente suportados:
130
+
131
+ - `table`
132
+ - `index`
133
+ - `relationship`
134
+ - `query`
135
+ - `retention`
136
+ - `lock`
137
+ - `replication`
138
+ - `collection`
139
+ - `document`
140
+ - `keyspace`
141
+ - `stream`
142
+ - `capabilities`
143
+
144
+ Exemplo relacional:
145
+
146
+ ```sema
147
+ database principal_postgres {
148
+ engine: postgres
149
+ schema: public
150
+ capabilities {
151
+ joins
152
+ views
153
+ foreign_keys
154
+ }
155
+ table pedidos {
156
+ entity: Pedido
157
+ }
158
+ relationship pedido_cliente {
159
+ from: Pedido
160
+ to: Cliente
161
+ }
162
+ query buscar_pedidos {
163
+ mode: sql
164
+ }
165
+ }
166
+ ```
167
+
168
+ Exemplo documental:
169
+
170
+ ```sema
171
+ database principal_mongodb {
172
+ engine: mongodb
173
+ query_model: documento
174
+ collection pedidos {
175
+ collection: pedidos
176
+ }
177
+ document pedido_snapshot {
178
+ entity: PedidoSnapshot
179
+ }
180
+ query pipeline_pedido {
181
+ mode: pipeline
182
+ }
183
+ }
184
+ ```
185
+
186
+ Exemplo key-value:
187
+
188
+ ```sema
189
+ database principal_redis {
190
+ engine: redis
191
+ query_model: chave_valor
192
+ keyspace cache_pedidos {
193
+ ttl: "300s"
194
+ }
195
+ stream eventos_pedido {
196
+ surface: fila
197
+ }
198
+ }
199
+ ```
200
+
201
+ ## Compatibilidade declarada
202
+
203
+ O IR de persistencia calcula compatibilidade por recurso com quatro estados:
204
+
205
+ - `nativo`
206
+ - `adaptado`
207
+ - `parcial`
208
+ - `invalido`
209
+
210
+ Isso existe para deixar explicito quando um contrato esta pedindo de um banco algo que ele nao entrega do mesmo jeito.
211
+
212
+ O mesmo principio vale para runtime de orquestracao. Superficies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra familias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.