@semacode/cli 1.5.17 → 1.5.19

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 (111) hide show
  1. package/AGENTS.md +268 -260
  2. package/LICENSE +22 -22
  3. package/README.md +93 -61
  4. package/SEMA_BRIEF.curto.txt +8 -6
  5. package/SEMA_BRIEF.md +71 -22
  6. package/SEMA_BRIEF.micro.txt +7 -5
  7. package/SEMA_INDEX.json +931 -193
  8. package/dist/controleComercialSupabase.d.ts +326 -0
  9. package/dist/controleComercialSupabase.js +310 -0
  10. package/dist/controleComercialSupabase.js.map +1 -0
  11. package/dist/docs.js +48 -20
  12. package/dist/docs.js.map +1 -1
  13. package/dist/drift.d.ts +5 -3
  14. package/dist/drift.js +119 -116
  15. package/dist/drift.js.map +1 -1
  16. package/dist/importador.d.ts +1 -1
  17. package/dist/importador.js +1 -200
  18. package/dist/importador.js.map +1 -1
  19. package/dist/index.js +1924 -493
  20. package/dist/index.js.map +1 -1
  21. package/dist/mcpRemoto.d.ts +32 -0
  22. package/dist/mcpRemoto.js +61 -0
  23. package/dist/mcpRemoto.js.map +1 -0
  24. package/dist/projeto.js +3 -21
  25. package/dist/projeto.js.map +1 -1
  26. package/dist/tipos.d.ts +1 -1
  27. package/docs/AGENT_STARTER.md +109 -102
  28. package/docs/cli.md +89 -33
  29. package/docs/como-ensinar-a-sema-para-ia.md +42 -36
  30. package/docs/deploy.md +231 -43
  31. package/docs/documentacao.md +61 -36
  32. package/docs/env.md +63 -14
  33. package/docs/extensao-vscode.md +12 -4
  34. package/docs/fluxo-pratico-ia-sema.md +45 -35
  35. package/docs/instalacao-e-primeiro-uso.md +52 -30
  36. package/docs/integracao-com-ia.md +44 -35
  37. package/docs/mcp.md +270 -31
  38. package/docs/pagamento-ponta-a-ponta.md +40 -24
  39. package/docs/persistencia-vendor-first.md +11 -5
  40. package/docs/prompt-base-ia-sema.md +18 -11
  41. package/docs/rollback.md +17 -15
  42. package/docs/sintaxe.md +37 -229
  43. package/exemplos/agendamento.sema +105 -106
  44. package/exemplos/assinatura.sema +133 -136
  45. package/exemplos/auditoria.sema +89 -88
  46. package/exemplos/autenticacao.sema +125 -125
  47. package/exemplos/author_obra_comum.sema +294 -0
  48. package/exemplos/author_tema_sensivel.sema +264 -0
  49. package/exemplos/automacao.sema +107 -107
  50. package/exemplos/cadastro_usuario.sema +54 -54
  51. package/exemplos/calculadora.sema +78 -78
  52. package/exemplos/crud_simples.sema +89 -89
  53. package/exemplos/estoque.sema +127 -126
  54. package/exemplos/exportacao.sema +94 -94
  55. package/exemplos/fila.sema +130 -131
  56. package/exemplos/integracao_externa.sema +94 -94
  57. package/exemplos/multi_tenant.sema +140 -140
  58. package/exemplos/notificacao.sema +149 -98
  59. package/exemplos/operacao_estrategia.sema +633 -402
  60. package/exemplos/pagamento.sema +434 -222
  61. package/exemplos/pagamento_dominio.sema +35 -35
  62. package/exemplos/pedido.sema +255 -119
  63. package/exemplos/permissao.sema +121 -121
  64. package/exemplos/persistencia_vendor_first.sema +86 -86
  65. package/exemplos/profile_game.sema +114 -0
  66. package/exemplos/profile_legal.sema +105 -0
  67. package/exemplos/profile_ops.sema +110 -0
  68. package/exemplos/profile_research.sema +104 -0
  69. package/exemplos/profile_software.sema +123 -0
  70. package/exemplos/profile_workflow_n8n.sema +99 -0
  71. package/exemplos/relatorio.sema +93 -93
  72. package/exemplos/replica_analitica_erp.sema +160 -0
  73. package/exemplos/testes_embutidos.sema +45 -45
  74. package/exemplos/tratamento_erro.sema +157 -157
  75. package/exemplos/upload_arquivo.sema +93 -93
  76. package/exemplos/webhook.sema +94 -96
  77. package/llms-full.txt +34 -34
  78. package/llms.txt +17 -17
  79. package/node_modules/@sema/gerador-css/dist/index.js +563 -563
  80. package/node_modules/@sema/gerador-css/package.json +1 -1
  81. package/node_modules/@sema/gerador-dart/package.json +1 -1
  82. package/node_modules/@sema/gerador-html/dist/index.js +90 -90
  83. package/node_modules/@sema/gerador-html/package.json +1 -1
  84. package/node_modules/@sema/gerador-javascript/dist/index.js +92 -92
  85. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  86. package/node_modules/@sema/gerador-lua/dist/index.js +53 -53
  87. package/node_modules/@sema/gerador-lua/package.json +1 -1
  88. package/node_modules/@sema/gerador-python/dist/index.js +122 -96
  89. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
  90. package/node_modules/@sema/gerador-python/package.json +1 -1
  91. package/node_modules/@sema/gerador-typescript/dist/index.js +153 -153
  92. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  93. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +2 -4
  94. package/node_modules/@sema/nucleo/dist/formatador/index.js +26 -46
  95. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
  96. package/node_modules/@sema/nucleo/dist/ir/conversor.js +9 -204
  97. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  98. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -35
  99. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +0 -21
  100. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -1
  101. package/node_modules/@sema/nucleo/dist/parser/parser.js +0 -40
  102. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  103. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +6 -5
  104. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +76 -307
  105. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  106. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +2 -0
  107. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +32 -2
  108. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -1
  109. package/node_modules/@sema/nucleo/package.json +1 -1
  110. package/node_modules/@sema/padroes/package.json +1 -1
  111. package/package.json +15 -15
@@ -1,19 +1,25 @@
1
1
  # Prompt-Base Oficial para IA Trabalhar com Sema
2
2
 
3
+ <!-- sema:i18n -->
4
+ > EN: English first. The canonical operational body below may still be in Portuguese until full translation lands.
5
+ > PT: Português depois, com acentos preservados.
6
+ > ES: Español al final; não traduza comandos, rotas nem sómbolos `.sema` sem contrato.
7
+
8
+
3
9
  Este arquivo serve como prompt-base oficial para qualquer IA que precise ler, escrever, revisar ou transformar arquivos `.sema`.
4
10
 
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.
11
+ O objetivo não é fazer a IA "improvisar bonito". O objetivo e fazer a IA operar a linguagem com previsibilidade. A Sema não foi desenhada para ergonomia humana como prioridade; ela foi desenhada para IA. Humanos escrevem, revisam e aprovam; o consumidor primário e o agente.
6
12
 
7
13
  ## Prompt-base
8
14
 
9
15
  Use o texto abaixo como base:
10
16
 
11
17
  ```text
12
- Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao para IA e backend vivo.
18
+ Voce esta trabalhando com Sema, um contrato semantico IA-first para agentes operarem software vivo.
13
19
 
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.
20
+ 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
21
 
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.
22
+ 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
23
 
18
24
  Fontes de verdade, em ordem:
19
25
  1. se o projeto expuser `SEMA_CONTEXT.md`, comece por ele
@@ -31,6 +37,7 @@ Regras de operacao:
31
37
  - use o formatador oficial da Sema como fonte unica de estilo
32
38
  - use diagnosticos estruturados como contrato de correcao
33
39
  - use a IR como fonte de verdade semantica quando houver duvida
40
+ - use `predicadoCanonico` como normalizacao opcional; preserve o `predicado` original
34
41
  - nao conclua uma alteracao sem validar e verificar o modulo
35
42
  - trate `importar` como bootstrap revisavel, nao como contrato final automatico
36
43
  - trate `drift` como medicao de verdade contra codigo vivo
@@ -58,7 +65,7 @@ Se algo nao estiver claro, siga a forma ja usada nos exemplos oficiais. Nao impr
58
65
  Se voce quiser um prompt menor para uso frequente:
59
66
 
60
67
  ```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.
68
+ 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
69
  ```
63
70
 
64
71
  Se voce quiser um prompt ainda mais curto e pronto para colar, use:
@@ -67,9 +74,9 @@ Se voce quiser um prompt ainda mais curto e pronto para colar, use:
67
74
  sema prompt-curto caminho/arquivo.sema --curto --para mudanca
68
75
  ```
69
76
 
70
- ## Variacao para revisao
77
+ ## Variacao para revisão
71
78
 
72
- Use esta versao quando a IA for revisar `.sema` em vez de criar:
79
+ Use está versão quando a IA for revisar `.sema` em vez de criar:
73
80
 
74
81
  ```text
75
82
  Revise este modulo Sema como contrato semantico executavel. Procure incoerencias entre input, output, rules, effects, guarantees, state, flow, route e error. Considere a IR e os diagnosticos da CLI como fonte de verdade. Nao critique estilo fora do que o formatador oficial resolveria automaticamente.
@@ -77,15 +84,15 @@ Revise este modulo Sema como contrato semantico executavel. Procure incoerencias
77
84
 
78
85
  ## Variacao para geracao
79
86
 
80
- Use esta versao quando a IA for escrever modulo novo:
87
+ Use está versão quando a IA for escrever módulo novo:
81
88
 
82
89
  ```text
83
90
  Gere um modulo Sema seguindo a gramatica oficial, os exemplos do projeto e o estilo do formatador canonico. Estruture o modulo como contrato semantico executavel, com blocos explicitos para entrada, saida, regras, efeitos, garantias, erros, estado, fluxo e testes quando fizer sentido. Nao use sintaxe fora do repertorio ja suportado pela linguagem.
84
91
  ```
85
92
 
86
- ## Variacao para correcao guiada por diagnostico
93
+ ## Variacao para correcao guiada por diagnóstico
87
94
 
88
- Use esta versao quando a IA ja tiver erro concreto para corrigir:
95
+ Use está versão quando a IA tiver erro concreto para corrigir:
89
96
 
90
97
  ```text
91
98
  Corrija este modulo Sema a partir dos diagnosticos estruturados da CLI. Preserve a intencao do contrato e altere apenas o necessario para eliminar as falhas. Depois da correcao, aplique o formatador oficial e revalide.
@@ -101,4 +108,4 @@ Idealmente, acompanhe o prompt com:
101
108
  - o resultado de `sema diagnosticos --json`, se houver erro
102
109
  - um exemplo oficial parecido
103
110
 
104
- Sem isso, a IA pode ate acertar. Com isso, ela trabalha direito.
111
+ Sem isso, a IA pode até acertar. Com isso, ela trabalha direito.
package/docs/rollback.md CHANGED
@@ -1,47 +1,49 @@
1
1
  # Rollback
2
2
 
3
- Rollback de release publica da Sema deve preservar rastreabilidade. NPM nao deve ser tratado como pasta temporaria: apagar versao publicada e medida extrema e limitada.
3
+ <!-- sema:i18n -->
4
+ > EN: English first. The canonical operational body below may still be in Portuguese until full translation lands.
5
+ > PT: Português depois, com acentos preservados.
6
+ > ES: Español al final; não traduza comandos, rotas nem sómbolos `.sema` sem contrato.
7
+
8
+
9
+ Rollback de release pública da Sema deve preservar rastreabilidade. NPM não deve ser tratado como pasta temporaria: apagar versão publicada e medida extrema e limitada.
4
10
 
5
11
  ## Quando aplicar
6
12
 
7
- - CLI ou MCP publicados quebram instalacao basica.
8
- - VSIX publicada nao inicia ou quebra o Language Server.
13
+ - CLI publicada quebra instalação básica.
14
+ - VSIX publicada não inicia ou quebra o Language Server.
9
15
  - Instaladores baixam asset errado.
10
- - Release notes ou checksums apontam para artefato invalido.
16
+ - Release notes ou checksums apontam para artefato inválido.
11
17
 
12
18
  ## Primeira resposta
13
19
 
14
20
  1. Marque o problema no GitHub Release.
15
- 2. Reponte `latest` no NPM para a ultima versao boa, quando necessario:
21
+ 2. Reponte `latest` no NPM para a última versão boa, quando necessário:
16
22
 
17
23
  ```bash
18
24
  npm dist-tag add @semacode/cli@<versao-boa> latest
19
- npm dist-tag add @semacode/mcp@<versao-boa> latest
20
25
  ```
21
26
 
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.
27
+ 3. Se o problema for VSIX ou asset de release, substitua o asset no GitHub Release ou publique uma release patch.
28
+ 4. Prefira publicar patch corretivo (`1.5.19`, por exemplo) quando o pacote saiu para usuários.
24
29
 
25
- ## Validacao de rollback
30
+ ## Validação de rollback
26
31
 
27
32
  ```bash
28
33
  npm view @semacode/cli dist-tags --json
29
- npm view @semacode/mcp dist-tags --json
30
34
  npm install -g @semacode/cli@latest
31
- npm install -g @semacode/mcp@latest
32
35
  sema --version
33
- sema-mcp --help
34
36
  ```
35
37
 
36
38
  ## Git
37
39
 
38
- Se o commit foi empurrado mas a release falhou antes de publicar NPM, corrija com novo commit. Evite reescrever `main` depois de push publico.
40
+ Se o commit foi empurrado mas a release falhou antes de publicar NPM, corrija com novo commit. Evite reescrever `main` depois de push público.
39
41
 
40
- Se o tag foi criado errado e ainda nao existe release consumida:
42
+ Se o tag foi criado errado e ainda não existe release consumida:
41
43
 
42
44
  ```bash
43
45
  git tag -d v<versao>
44
46
  git push origin :refs/tags/v<versao>
45
47
  ```
46
48
 
47
- Use isso somente antes de usuarios consumirem o tag.
49
+ Use isso somente antes de usuários consumirem o tag.
package/docs/sintaxe.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # Sintaxe Canonica
2
2
 
3
- A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA.
3
+ <!-- sema:i18n -->
4
+ > EN: English first. The canonical operational body below may still be in Portuguese until full translation lands.
5
+ > PT: Português depois, com acentos preservados.
6
+ > ES: Español al final; não traduza comandos, rotas nem sómbolos `.sema` sem contrato.
7
+
8
+
9
+ 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
10
 
5
11
  ## Regras basicas
6
12
 
@@ -19,27 +25,6 @@ A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, n
19
25
  - `entity`
20
26
  - `enum`
21
27
  - `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
28
  - `task`
44
29
  - `flow`
45
30
  - `route`
@@ -79,6 +64,24 @@ A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, n
79
64
  - `when`
80
65
  - `expect`
81
66
 
67
+ ## Tipos primitivos
68
+
69
+ Tipos primitivos reconhecidos diretamente:
70
+
71
+ - `Texto`
72
+ - `Numero`
73
+ - `Inteiro`
74
+ - `Decimal`
75
+ - `Booleano`
76
+ - `Data`
77
+ - `Timestamp`
78
+ - `Objeto`
79
+ - `Id`
80
+ - `Email`
81
+ - `Json`
82
+
83
+ `Timestamp` e `Objeto` funcionam como aliases primitivos suportados e preservam o texto original na IR.
84
+
82
85
  ## Tipos compostos
83
86
 
84
87
  ```sema
@@ -98,154 +101,24 @@ Formas suportadas:
98
101
  - `T1|T2`
99
102
  - `T?`
100
103
 
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:
104
+ ## Predicados normalizados
106
105
 
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
106
+ Predicados escritos em contrato preservam o texto original em `predicado`. Quando a CLI reconhece uma forma comum, a expressao estruturada pode expor também `predicadoCanonico`.
112
107
 
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`.
108
+ Exemplo:
118
109
 
119
110
  ```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
- }
111
+ rules {
112
+ email deve_ser email_valido
113
+ nome deve_ser preenchido
176
114
  }
177
115
  ```
178
116
 
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
- }
117
+ 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, não muda a sintaxe pública.
207
118
 
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
- }
119
+ ## Persistência vendor-first
218
120
 
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.
121
+ O bloco `database` modela banco e recursos persistidos sem apagar as diferenças entre engines.
249
122
 
250
123
  Estrutura base:
251
124
 
@@ -333,78 +206,13 @@ database principal_redis {
333
206
 
334
207
  ## Compatibilidade declarada
335
208
 
336
- O IR de persistencia calcula compatibilidade por recurso com quatro estados:
209
+ O IR de persistência calcula compatibilidade por recurso com quatro estados:
337
210
 
338
211
  - `nativo`
339
212
  - `adaptado`
340
213
  - `parcial`
341
214
  - `invalido`
342
215
 
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.
346
-
347
- ## Interop e implementacao externa
348
-
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:
388
-
389
- ```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
- }
407
- }
408
- ```
216
+ Isso existe para deixar explícito quando um contrato está pedindo de um banco algo que ele não entrega do mesmo jeito.
409
217
 
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.
218
+ O mesmo principio vale para runtime de orquestração. Superfícies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra famílias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.
@@ -1,106 +1,105 @@
1
- module exemplos.agendamento {
2
- docs {
3
- resumo: "Agendamento de tarefas recorrentes e unicas com controle de execucao."
4
- }
5
-
6
- entity Agendamento {
7
- fields {
8
- id: Id
9
- nome: Texto
10
- tipo: Texto
11
- expressao_cron: Texto
12
- payload: Objeto
13
- ativo: Booleano
14
- ultima_execucao: Timestamp
15
- proxima_execucao: Timestamp
16
- }
17
- }
18
-
19
- entity ExecucaoAgendamento {
20
- fields {
21
- id: Id
22
- agendamento_id: Id
23
- status: Texto
24
- iniciado_em: Timestamp
25
- concluido_em: Timestamp
26
- erro: Texto
27
- }
28
- }
29
-
30
- task criar_agendamento {
31
- input {
32
- nome: Texto required
33
- tipo: Texto required
34
- expressao_cron: Texto required
35
- payload: Objeto
36
- }
37
- output {
38
- agendamento: Agendamento
39
- }
40
- rules {
41
- nome deve_ser preenchido
42
- expressao_cron deve_ser valida
43
- tipo deve_ser registrado
44
- }
45
- effects {
46
- persistencia Agendamento
47
- evento agendamento_criado criticidade = baixa
48
- auditoria criacao_agendamento
49
- }
50
- guarantees {
51
- agendamento existe
52
- agendamento.ativo == verdadeiro
53
- }
54
- error {
55
- cron_invalido: "Expressao cron invalida."
56
- tipo_nao_registrado: "Tipo de agendamento nao existe."
57
- nome_duplicado: "Ja existe agendamento com este nome."
58
- }
59
- tests {
60
- caso "cria agendamento diario" {
61
- given { nome: "relatorio_diario" tipo: "gerar_relatorio" expressao_cron: "0 8 * * *" }
62
- expect { sucesso: verdadeiro }
63
- }
64
- }
65
- }
66
-
67
- task executar_agendamento {
68
- input {
69
- agendamento_id: Id required
70
- }
71
- output {
72
- execucao_id: Id
73
- }
74
- rules {
75
- agendamento_id deve_ser valido
76
- agendamento.ativo == verdadeiro
77
- }
78
- effects {
79
- consulta Agendamento por agendamento_id
80
- persistencia ExecucaoAgendamento
81
- persistencia Agendamento
82
- evento agendamento_executado criticidade = baixa
83
- auditoria execucao_agendamento
84
- }
85
- state ciclo_execucao {
86
- transitions {
87
- PENDENTE -> EM_EXECUCAO
88
- EM_EXECUCAO -> CONCLUIDO
89
- EM_EXECUCAO -> FALHOU
90
- }
91
- }
92
- guarantees {
93
- execucao_id existe
94
- }
95
- error {
96
- agendamento_inativo: "Agendamento esta desativado."
97
- execucao_em_andamento: "Ja existe uma execucao em andamento para este agendamento."
98
- }
99
- tests {
100
- caso "executa agendamento ativo" {
101
- given { agendamento_id: "agd_1" }
102
- expect { sucesso: verdadeiro }
103
- }
104
- }
105
- }
106
- }
1
+ module exemplos.agendamento {
2
+ docs {
3
+ resumo: "Agendamento de tarefas recorrentes e unicas com controle de execucao."
4
+ }
5
+
6
+ entity Agendamento {
7
+ fields {
8
+ id: Id
9
+ nome: Texto
10
+ tipo: Texto
11
+ expressao_cron: Texto
12
+ payload: Objeto
13
+ ativo: Booleano
14
+ ultima_execucao: Timestamp
15
+ proxima_execucao: Timestamp
16
+ }
17
+ }
18
+
19
+ entity ExecucaoAgendamento {
20
+ fields {
21
+ id: Id
22
+ agendamento_id: Id
23
+ status: Texto
24
+ iniciado_em: Timestamp
25
+ concluido_em: Timestamp
26
+ erro: Texto
27
+ }
28
+ }
29
+
30
+ task criar_agendamento {
31
+ input {
32
+ nome: Texto required
33
+ tipo: Texto required
34
+ expressao_cron: Texto required
35
+ payload: Objeto
36
+ }
37
+ output {
38
+ agendamento: Agendamento
39
+ }
40
+ rules {
41
+ nome deve_ser preenchido
42
+ expressao_cron deve_ser valida
43
+ tipo deve_ser registrado
44
+ }
45
+ effects {
46
+ persistencia Agendamento
47
+ evento agendamento_criado criticidade = baixa
48
+ auditoria criacao_agendamento
49
+ }
50
+ guarantees {
51
+ agendamento existe
52
+ agendamento.ativo == verdadeiro
53
+ }
54
+ error {
55
+ cron_invalido: "Expressao cron invalida."
56
+ tipo_nao_registrado: "Tipo de agendamento nao existe."
57
+ nome_duplicado: "Ja existe agendamento com este nome."
58
+ }
59
+ tests {
60
+ caso "cria agendamento diario" {
61
+ given { nome: "relatorio_diario" tipo: "gerar_relatorio" expressao_cron: "0 8 * * *" }
62
+ expect { sucesso: verdadeiro }
63
+ }
64
+ }
65
+ }
66
+
67
+ task executar_agendamento {
68
+ input {
69
+ agendamento_id: Id required
70
+ }
71
+ output {
72
+ execucao_id: Id
73
+ }
74
+ rules {
75
+ agendamento_id deve_ser valido
76
+ }
77
+ effects {
78
+ consulta Agendamento por agendamento_id
79
+ persistencia ExecucaoAgendamento
80
+ persistencia Agendamento
81
+ evento agendamento_executado criticidade = baixa
82
+ auditoria execucao_agendamento
83
+ }
84
+ state ciclo_execucao {
85
+ transitions {
86
+ PENDENTE -> EM_EXECUCAO
87
+ EM_EXECUCAO -> CONCLUIDO
88
+ EM_EXECUCAO -> FALHOU
89
+ }
90
+ }
91
+ guarantees {
92
+ execucao_id existe
93
+ }
94
+ error {
95
+ agendamento_inativo: "Agendamento esta desativado."
96
+ execucao_em_andamento: "Ja existe uma execucao em andamento para este agendamento."
97
+ }
98
+ tests {
99
+ caso "executa agendamento ativo" {
100
+ given { agendamento_id: "agd_1" }
101
+ expect { sucesso: verdadeiro }
102
+ }
103
+ }
104
+ }
105
+ }