@semacode/cli 1.5.18 → 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.
- package/AGENTS.md +268 -260
- package/LICENSE +22 -22
- package/README.md +144 -104
- package/SEMA_BRIEF.curto.txt +7 -5
- package/SEMA_BRIEF.md +60 -4
- package/SEMA_BRIEF.micro.txt +6 -4
- package/SEMA_INDEX.json +917 -41
- package/dist/controleComercialSupabase.d.ts +326 -0
- package/dist/controleComercialSupabase.js +310 -0
- package/dist/controleComercialSupabase.js.map +1 -0
- package/dist/docs.js +48 -20
- package/dist/docs.js.map +1 -1
- package/dist/drift.d.ts +5 -3
- package/dist/drift.js +123 -14
- package/dist/drift.js.map +1 -1
- package/dist/index.js +1889 -38
- package/dist/index.js.map +1 -1
- package/dist/mcpRemoto.d.ts +32 -0
- package/dist/mcpRemoto.js +61 -0
- package/dist/mcpRemoto.js.map +1 -0
- package/dist/projeto.js +3 -1
- package/dist/projeto.js.map +1 -1
- package/docs/AGENT_STARTER.md +103 -97
- package/docs/cli.md +175 -106
- package/docs/como-ensinar-a-sema-para-ia.md +41 -35
- package/docs/deploy.md +231 -43
- package/docs/documentacao.md +61 -36
- package/docs/env.md +105 -56
- package/docs/extensao-vscode.md +12 -4
- package/docs/fluxo-pratico-ia-sema.md +182 -176
- package/docs/instalacao-e-primeiro-uso.md +52 -30
- package/docs/integracao-com-ia.md +108 -101
- package/docs/mcp.md +292 -51
- package/docs/pagamento-ponta-a-ponta.md +34 -28
- package/docs/persistencia-vendor-first.md +11 -5
- package/docs/prompt-base-ia-sema.md +13 -7
- package/docs/rollback.md +17 -15
- package/docs/sintaxe.md +180 -174
- package/exemplos/agendamento.sema +105 -105
- package/exemplos/assinatura.sema +133 -133
- package/exemplos/auditoria.sema +89 -89
- package/exemplos/autenticacao.sema +125 -125
- package/exemplos/author_obra_comum.sema +294 -0
- package/exemplos/author_tema_sensivel.sema +264 -0
- package/exemplos/automacao.sema +107 -107
- package/exemplos/cadastro_usuario.sema +54 -54
- package/exemplos/calculadora.sema +78 -78
- package/exemplos/crud_simples.sema +89 -89
- package/exemplos/estoque.sema +127 -127
- package/exemplos/exportacao.sema +94 -94
- package/exemplos/fila.sema +130 -130
- package/exemplos/integracao_externa.sema +94 -94
- package/exemplos/multi_tenant.sema +140 -140
- package/exemplos/notificacao.sema +149 -149
- package/exemplos/operacao_estrategia.sema +633 -633
- package/exemplos/pagamento.sema +434 -434
- package/exemplos/pagamento_dominio.sema +35 -35
- package/exemplos/pedido.sema +255 -255
- package/exemplos/permissao.sema +121 -121
- package/exemplos/persistencia_vendor_first.sema +86 -86
- package/exemplos/profile_game.sema +114 -0
- package/exemplos/profile_legal.sema +105 -0
- package/exemplos/profile_ops.sema +110 -0
- package/exemplos/profile_research.sema +104 -0
- package/exemplos/profile_software.sema +123 -0
- package/exemplos/profile_workflow_n8n.sema +99 -0
- package/exemplos/relatorio.sema +93 -93
- package/exemplos/replica_analitica_erp.sema +160 -160
- package/exemplos/testes_embutidos.sema +45 -45
- package/exemplos/tratamento_erro.sema +157 -157
- package/exemplos/upload_arquivo.sema +93 -93
- package/exemplos/webhook.sema +94 -94
- package/llms-full.txt +34 -34
- package/llms.txt +17 -17
- package/node_modules/@sema/gerador-css/dist/index.js +563 -563
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/dist/index.js +90 -90
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js +92 -92
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/dist/index.js +53 -53
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/dist/index.js +122 -96
- package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js +153 -153
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js +12 -4
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +11 -11
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
# Pagamento Ponta a Ponta na Sema
|
|
2
2
|
|
|
3
|
-
|
|
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.
|
|
4
7
|
|
|
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
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
Este documento descreve o vertical oficial de pagamento da Sema no fluxo público atual.
|
|
10
|
+
|
|
11
|
+
O objetivo não é mostrar um exemplo fofo. O objetivo e demonstrar que a linguagem já consegue modelar um fluxo de negócio real com:
|
|
12
|
+
|
|
13
|
+
- contrato público
|
|
14
|
+
- segurança e autorizacao
|
|
9
15
|
- classificacao de dados
|
|
10
16
|
- segredos e proibicoes explicitas
|
|
11
17
|
- regras
|
|
12
18
|
- efeitos operacionais
|
|
13
|
-
-
|
|
19
|
+
- execução, idempotencia, retry e compensacao
|
|
14
20
|
- transicoes de estado
|
|
15
|
-
-
|
|
21
|
+
- orquestração
|
|
16
22
|
- erros publicos
|
|
17
|
-
- testes executaveis com
|
|
23
|
+
- testes executaveis com saída, status ou erro observavel
|
|
18
24
|
|
|
19
|
-
## Arquivos de
|
|
25
|
+
## Arquivos de referência
|
|
20
26
|
|
|
21
27
|
- `exemplos/pagamento_dominio.sema`
|
|
22
28
|
- `exemplos/pagamento.sema`
|
|
@@ -33,7 +39,7 @@ Centraliza os contratos compartilhados:
|
|
|
33
39
|
|
|
34
40
|
### `exemplos.pagamento`
|
|
35
41
|
|
|
36
|
-
Centraliza a
|
|
42
|
+
Centraliza a operação do vertical:
|
|
37
43
|
|
|
38
44
|
- `task processar_pagamento`
|
|
39
45
|
- `task confirmar_pagamento`
|
|
@@ -44,19 +50,19 @@ Centraliza a operacao do vertical:
|
|
|
44
50
|
|
|
45
51
|
## Narrativa do caso
|
|
46
52
|
|
|
47
|
-
### Entrada
|
|
53
|
+
### Entrada pública
|
|
48
54
|
|
|
49
|
-
A
|
|
55
|
+
A operação entra por:
|
|
50
56
|
|
|
51
57
|
- `route processar_pagamento_publico`
|
|
52
58
|
|
|
53
|
-
Esse contrato
|
|
59
|
+
Esse contrato pública:
|
|
54
60
|
|
|
55
61
|
- `pagamento_id`
|
|
56
62
|
- `valor`
|
|
57
63
|
- `token`
|
|
58
64
|
|
|
59
|
-
|
|
65
|
+
É expoe:
|
|
60
66
|
|
|
61
67
|
- `pagamento`
|
|
62
68
|
- `status`
|
|
@@ -76,7 +82,7 @@ A `task processar_pagamento` faz o trabalho central:
|
|
|
76
82
|
- notifica comprovante
|
|
77
83
|
- registra auditoria
|
|
78
84
|
- declara `execucao` com idempotencia, timeout, retry, compensacao e criticidade
|
|
79
|
-
- garante consistencia da
|
|
85
|
+
- garante consistencia da saída
|
|
80
86
|
|
|
81
87
|
### Estado e transicoes
|
|
82
88
|
|
|
@@ -86,15 +92,15 @@ O `state ciclo_pagamento` ancora o contrato de transicao:
|
|
|
86
92
|
- `AUTORIZADO -> PROCESSADO`
|
|
87
93
|
- `PENDENTE -> RECUSADO`
|
|
88
94
|
|
|
89
|
-
A `task`
|
|
95
|
+
A `task` explícita quais transicoes ela realmente usa.
|
|
90
96
|
|
|
91
|
-
### Flow de
|
|
97
|
+
### Flow de orquestração
|
|
92
98
|
|
|
93
99
|
O `flow orquestracao_pagamento` demonstra:
|
|
94
100
|
|
|
95
101
|
- passagem de contexto
|
|
96
|
-
-
|
|
97
|
-
-
|
|
102
|
+
- confirmação em caso de sucesso
|
|
103
|
+
- notificação em caso de recusa
|
|
98
104
|
- registro de timeout em caso de indisponibilidade
|
|
99
105
|
- ramificacao por erro tipado
|
|
100
106
|
|
|
@@ -108,7 +114,7 @@ O vertical usa as 5 categorias oficiais da Sema:
|
|
|
108
114
|
- `notificacao`
|
|
109
115
|
- `auditoria`
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
Também usa `criticidade` para deixar claro o peso operacional do efeito.
|
|
112
118
|
|
|
113
119
|
### Falhas reais
|
|
114
120
|
|
|
@@ -122,9 +128,9 @@ O vertical cobre explicitamente:
|
|
|
122
128
|
|
|
123
129
|
### 1. Escrever ou ajustar os arquivos `.sema`
|
|
124
130
|
|
|
125
|
-
Use o
|
|
131
|
+
Use o domínio compartilhado em um módulo e a operação em outro módulo.
|
|
126
132
|
|
|
127
|
-
### 2. Aplicar o formato
|
|
133
|
+
### 2. Aplicar o formato canônico
|
|
128
134
|
|
|
129
135
|
```bash
|
|
130
136
|
sema formatar exemplos
|
|
@@ -136,7 +142,7 @@ sema formatar exemplos
|
|
|
136
142
|
sema validar exemplos/pagamento.sema
|
|
137
143
|
```
|
|
138
144
|
|
|
139
|
-
### 4. Gerar
|
|
145
|
+
### 4. Gerar código
|
|
140
146
|
|
|
141
147
|
```bash
|
|
142
148
|
sema compilar exemplos/pagamento.sema --alvo typescript --saida ./.tmp/pagamento-ts
|
|
@@ -151,15 +157,15 @@ sema verificar exemplos/pagamento.sema --json --saida ./.tmp/verificacao-pagamen
|
|
|
151
157
|
|
|
152
158
|
## O que esse vertical prova
|
|
153
159
|
|
|
154
|
-
Se esse vertical passa, a Sema
|
|
160
|
+
Se esse vertical passa, a Sema já consegue demonstrar que:
|
|
155
161
|
|
|
156
|
-
- modela contrato
|
|
157
|
-
- modela superficie
|
|
162
|
+
- modela contrato público
|
|
163
|
+
- modela superficie sensível sem deixar segurança invisível
|
|
158
164
|
- modela efeitos operacionais
|
|
159
165
|
- modela falhas reais
|
|
160
|
-
- modulariza
|
|
161
|
-
- declara idempotencia e
|
|
166
|
+
- modulariza domínio com `use`
|
|
167
|
+
- declara idempotencia e execução crítica sem criar sintaxe nova
|
|
162
168
|
- gera artefatos coerentes para TypeScript e Python
|
|
163
169
|
- executa testes gerados sem gambiarra conceitual
|
|
164
170
|
|
|
165
|
-
Esse e o criterio pratico que sustenta o uso
|
|
171
|
+
Esse e o criterio pratico que sustenta o uso público do vertical de pagamento como referência para IA e geracao.
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Persistência Vendor-First
|
|
2
2
|
|
|
3
|
-
|
|
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
|
+
Sema 1.5.19 trata banco como superficie semântica de primeira classe. Isso significa assumir diferenças reais entre engines e coloca-las no contrato, no semântico, na IR, no drift, no impact map, na renomeacao assistida, no `verificar` e na extensao. Nesta linha, o `drift` também materializa persistência local real em `Preferences`, `localStorage` e `sessionStorage` quando a task está ancorada no arquivo que usa essas APIs, preservando o framing IA-first da release atual.
|
|
4
10
|
|
|
5
11
|
## Engines publicas
|
|
6
12
|
|
|
@@ -128,17 +134,17 @@ Cada recurso recebe compatibilidade por engine:
|
|
|
128
134
|
- `parcial`
|
|
129
135
|
- `invalido`
|
|
130
136
|
|
|
131
|
-
Isso deixa
|
|
137
|
+
Isso deixa explícito quando o contrato está pedindo portabilidade falsa, por exemplo:
|
|
132
138
|
|
|
133
139
|
- `table` em `redis`
|
|
134
140
|
- `foreign_keys` em engine sem suporte equivalente
|
|
135
|
-
-
|
|
141
|
+
- transação multi-documento tratada como universal
|
|
136
142
|
|
|
137
143
|
## Onde isso aparece
|
|
138
144
|
|
|
139
145
|
- parser e AST
|
|
140
146
|
- IR canonica
|
|
141
|
-
- analisador
|
|
147
|
+
- analisador semântico
|
|
142
148
|
- formatador
|
|
143
149
|
- `sema drift`
|
|
144
150
|
- `sema importar`
|
|
@@ -1,8 +1,14 @@
|
|
|
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
|
|
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
|
|
|
@@ -68,9 +74,9 @@ Se voce quiser um prompt ainda mais curto e pronto para colar, use:
|
|
|
68
74
|
sema prompt-curto caminho/arquivo.sema --curto --para mudanca
|
|
69
75
|
```
|
|
70
76
|
|
|
71
|
-
## Variacao para
|
|
77
|
+
## Variacao para revisão
|
|
72
78
|
|
|
73
|
-
Use
|
|
79
|
+
Use está versão quando a IA for revisar `.sema` em vez de criar:
|
|
74
80
|
|
|
75
81
|
```text
|
|
76
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.
|
|
@@ -78,15 +84,15 @@ Revise este modulo Sema como contrato semantico executavel. Procure incoerencias
|
|
|
78
84
|
|
|
79
85
|
## Variacao para geracao
|
|
80
86
|
|
|
81
|
-
Use
|
|
87
|
+
Use está versão quando a IA for escrever módulo novo:
|
|
82
88
|
|
|
83
89
|
```text
|
|
84
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.
|
|
85
91
|
```
|
|
86
92
|
|
|
87
|
-
## Variacao para correcao guiada por
|
|
93
|
+
## Variacao para correcao guiada por diagnóstico
|
|
88
94
|
|
|
89
|
-
Use
|
|
95
|
+
Use está versão quando a IA já tiver erro concreto para corrigir:
|
|
90
96
|
|
|
91
97
|
```text
|
|
92
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.
|
|
@@ -102,4 +108,4 @@ Idealmente, acompanhe o prompt com:
|
|
|
102
108
|
- o resultado de `sema diagnosticos --json`, se houver erro
|
|
103
109
|
- um exemplo oficial parecido
|
|
104
110
|
|
|
105
|
-
Sem isso, a IA pode
|
|
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
|
-
|
|
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
|
|
8
|
-
- VSIX publicada
|
|
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
|
|
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
|
|
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
|
|
23
|
-
4. Prefira publicar patch corretivo (`1.5.
|
|
27
|
+
3. Se o problema for só 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 já saiu para usuários.
|
|
24
29
|
|
|
25
|
-
##
|
|
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
|
|
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
|
|
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
|
|
49
|
+
Use isso somente antes de usuários consumirem o tag.
|
package/docs/sintaxe.md
CHANGED
|
@@ -1,61 +1,67 @@
|
|
|
1
|
-
# Sintaxe Canonica
|
|
2
|
-
|
|
1
|
+
# Sintaxe Canonica
|
|
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
|
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
|
-
|
|
10
|
+
|
|
11
|
+
## Regras basicas
|
|
12
|
+
|
|
13
|
+
- um arquivo `.sema` contem um `module` principal
|
|
14
|
+
- cada bloco abre com palavra-chave e fecha com `}`
|
|
15
|
+
- campos usam `nome: valor`
|
|
16
|
+
- blocos declarativos podem aparecer aninhados quando o contrato exigir
|
|
17
|
+
- `tests` usa blocos `caso`
|
|
18
|
+
|
|
19
|
+
## Blocos de primeira classe
|
|
20
|
+
|
|
21
|
+
- `module`
|
|
22
|
+
- `use`
|
|
23
|
+
- `database`
|
|
24
|
+
- `type`
|
|
25
|
+
- `entity`
|
|
26
|
+
- `enum`
|
|
27
|
+
- `state`
|
|
28
|
+
- `task`
|
|
29
|
+
- `flow`
|
|
30
|
+
- `route`
|
|
31
|
+
- `worker`
|
|
32
|
+
- `evento`
|
|
33
|
+
- `fila`
|
|
34
|
+
- `cron`
|
|
35
|
+
- `webhook`
|
|
36
|
+
- `cache`
|
|
37
|
+
- `storage`
|
|
38
|
+
- `policy`
|
|
39
|
+
- `tests`
|
|
40
|
+
- `docs`
|
|
41
|
+
- `comments`
|
|
42
|
+
|
|
37
43
|
## 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`
|
|
44
|
+
|
|
45
|
+
- `input`
|
|
46
|
+
- `output`
|
|
47
|
+
- `rules`
|
|
48
|
+
- `effects`
|
|
49
|
+
- `auth`
|
|
50
|
+
- `authz`
|
|
51
|
+
- `dados`
|
|
52
|
+
- `audit`
|
|
53
|
+
- `segredos`
|
|
54
|
+
- `forbidden`
|
|
55
|
+
- `impl`
|
|
56
|
+
- `vinculos`
|
|
57
|
+
- `execucao`
|
|
58
|
+
- `guarantees`
|
|
59
|
+
- `error`
|
|
60
|
+
- `fields`
|
|
61
|
+
- `invariants`
|
|
62
|
+
- `transitions`
|
|
63
|
+
- `given`
|
|
64
|
+
- `when`
|
|
59
65
|
- `expect`
|
|
60
66
|
|
|
61
67
|
## Tipos primitivos
|
|
@@ -77,27 +83,27 @@ Tipos primitivos reconhecidos diretamente:
|
|
|
77
83
|
`Timestamp` e `Objeto` funcionam como aliases primitivos suportados e preservam o texto original na IR.
|
|
78
84
|
|
|
79
85
|
## Tipos compostos
|
|
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
|
-
|
|
86
|
+
|
|
87
|
+
```sema
|
|
88
|
+
input {
|
|
89
|
+
ids: Lista<Id> required
|
|
90
|
+
metadata: Mapa<Texto, Texto>
|
|
91
|
+
responsavel: Opcional<Usuario>
|
|
92
|
+
chave_publica: Texto|Id
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
90
96
|
Formas suportadas:
|
|
91
|
-
|
|
92
|
-
- `Lista<T>`
|
|
93
|
-
- `Mapa<K, V>`
|
|
94
|
-
- `Opcional<T>`
|
|
95
|
-
- `T1|T2`
|
|
97
|
+
|
|
98
|
+
- `Lista<T>`
|
|
99
|
+
- `Mapa<K, V>`
|
|
100
|
+
- `Opcional<T>`
|
|
101
|
+
- `T1|T2`
|
|
96
102
|
- `T?`
|
|
97
103
|
|
|
98
104
|
## Predicados normalizados
|
|
99
105
|
|
|
100
|
-
Predicados escritos em contrato preservam o texto original em `predicado`. Quando a CLI reconhece uma forma comum, a expressao estruturada pode expor
|
|
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`.
|
|
101
107
|
|
|
102
108
|
Exemplo:
|
|
103
109
|
|
|
@@ -108,105 +114,105 @@ rules {
|
|
|
108
114
|
}
|
|
109
115
|
```
|
|
110
116
|
|
|
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,
|
|
112
|
-
|
|
113
|
-
##
|
|
114
|
-
|
|
115
|
-
O bloco `database` modela banco e recursos persistidos sem apagar as
|
|
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
|
|
204
|
-
|
|
205
|
-
- `nativo`
|
|
206
|
-
- `adaptado`
|
|
207
|
-
- `parcial`
|
|
208
|
-
- `invalido`
|
|
209
|
-
|
|
210
|
-
Isso existe para deixar
|
|
211
|
-
|
|
212
|
-
O mesmo principio vale para runtime de
|
|
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.
|
|
118
|
+
|
|
119
|
+
## Persistência vendor-first
|
|
120
|
+
|
|
121
|
+
O bloco `database` modela banco e recursos persistidos sem apagar as diferenças entre engines.
|
|
122
|
+
|
|
123
|
+
Estrutura base:
|
|
124
|
+
|
|
125
|
+
```sema
|
|
126
|
+
database principal_postgres {
|
|
127
|
+
engine: postgres
|
|
128
|
+
consistency: forte
|
|
129
|
+
durability: alta
|
|
130
|
+
transaction_model: mvcc
|
|
131
|
+
query_model: sql
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Recursos canonicamente suportados:
|
|
136
|
+
|
|
137
|
+
- `table`
|
|
138
|
+
- `index`
|
|
139
|
+
- `relationship`
|
|
140
|
+
- `query`
|
|
141
|
+
- `retention`
|
|
142
|
+
- `lock`
|
|
143
|
+
- `replication`
|
|
144
|
+
- `collection`
|
|
145
|
+
- `document`
|
|
146
|
+
- `keyspace`
|
|
147
|
+
- `stream`
|
|
148
|
+
- `capabilities`
|
|
149
|
+
|
|
150
|
+
Exemplo relacional:
|
|
151
|
+
|
|
152
|
+
```sema
|
|
153
|
+
database principal_postgres {
|
|
154
|
+
engine: postgres
|
|
155
|
+
schema: public
|
|
156
|
+
capabilities {
|
|
157
|
+
joins
|
|
158
|
+
views
|
|
159
|
+
foreign_keys
|
|
160
|
+
}
|
|
161
|
+
table pedidos {
|
|
162
|
+
entity: Pedido
|
|
163
|
+
}
|
|
164
|
+
relationship pedido_cliente {
|
|
165
|
+
from: Pedido
|
|
166
|
+
to: Cliente
|
|
167
|
+
}
|
|
168
|
+
query buscar_pedidos {
|
|
169
|
+
mode: sql
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Exemplo documental:
|
|
175
|
+
|
|
176
|
+
```sema
|
|
177
|
+
database principal_mongodb {
|
|
178
|
+
engine: mongodb
|
|
179
|
+
query_model: documento
|
|
180
|
+
collection pedidos {
|
|
181
|
+
collection: pedidos
|
|
182
|
+
}
|
|
183
|
+
document pedido_snapshot {
|
|
184
|
+
entity: PedidoSnapshot
|
|
185
|
+
}
|
|
186
|
+
query pipeline_pedido {
|
|
187
|
+
mode: pipeline
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Exemplo key-value:
|
|
193
|
+
|
|
194
|
+
```sema
|
|
195
|
+
database principal_redis {
|
|
196
|
+
engine: redis
|
|
197
|
+
query_model: chave_valor
|
|
198
|
+
keyspace cache_pedidos {
|
|
199
|
+
ttl: "300s"
|
|
200
|
+
}
|
|
201
|
+
stream eventos_pedido {
|
|
202
|
+
surface: fila
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Compatibilidade declarada
|
|
208
|
+
|
|
209
|
+
O IR de persistência calcula compatibilidade por recurso com quatro estados:
|
|
210
|
+
|
|
211
|
+
- `nativo`
|
|
212
|
+
- `adaptado`
|
|
213
|
+
- `parcial`
|
|
214
|
+
- `invalido`
|
|
215
|
+
|
|
216
|
+
Isso existe para deixar explícito quando um contrato está pedindo de um banco algo que ele não entrega do mesmo jeito.
|
|
217
|
+
|
|
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.
|