@semacode/cli 0.9.0 → 1.0.0

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.
@@ -0,0 +1,155 @@
1
+ # Pagamento Ponta a Ponta na Sema
2
+
3
+ Este documento descreve o vertical oficial de pagamento da Sema no fluxo publico atual.
4
+
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
+
7
+ - contrato publico
8
+ - regras
9
+ - efeitos operacionais
10
+ - transicoes de estado
11
+ - orquestracao
12
+ - erros publicos
13
+ - testes executaveis
14
+
15
+ ## Arquivos de referencia
16
+
17
+ - `exemplos/pagamento_dominio.sema`
18
+ - `exemplos/pagamento.sema`
19
+
20
+ ## Como o vertical foi dividido
21
+
22
+ ### `exemplos.pagamento.dominio`
23
+
24
+ Centraliza os contratos compartilhados:
25
+
26
+ - `entity Pagamento`
27
+ - `enum StatusPagamento`
28
+ - `state ciclo_pagamento`
29
+
30
+ ### `exemplos.pagamento`
31
+
32
+ Centraliza a operacao do vertical:
33
+
34
+ - `task processar_pagamento`
35
+ - `task confirmar_pagamento`
36
+ - `task notificar_falha_pagamento`
37
+ - `task registrar_timeout_pagamento`
38
+ - `flow orquestracao_pagamento`
39
+ - `route processar_pagamento_publico`
40
+
41
+ ## Narrativa do caso
42
+
43
+ ### Entrada publica
44
+
45
+ A operacao entra por:
46
+
47
+ - `route processar_pagamento_publico`
48
+
49
+ Esse contrato publica:
50
+
51
+ - `pagamento_id`
52
+ - `valor`
53
+ - `token`
54
+
55
+ E expoe:
56
+
57
+ - `pagamento`
58
+ - `status`
59
+ - erros publicos coerentes com a `task`
60
+
61
+ ### Task interna
62
+
63
+ A `task processar_pagamento` faz o trabalho central:
64
+
65
+ - valida entrada
66
+ - consulta o gateway
67
+ - persiste o pagamento
68
+ - emite evento
69
+ - notifica comprovante
70
+ - registra auditoria
71
+ - garante consistencia da saida
72
+
73
+ ### Estado e transicoes
74
+
75
+ O `state ciclo_pagamento` ancora o contrato de transicao:
76
+
77
+ - `PENDENTE -> AUTORIZADO`
78
+ - `AUTORIZADO -> PROCESSADO`
79
+ - `PENDENTE -> RECUSADO`
80
+
81
+ A `task` explicita quais transicoes ela realmente usa.
82
+
83
+ ### Flow de orquestracao
84
+
85
+ O `flow orquestracao_pagamento` demonstra:
86
+
87
+ - passagem de contexto
88
+ - confirmacao em caso de sucesso
89
+ - notificacao em caso de recusa
90
+ - registro de timeout em caso de indisponibilidade
91
+ - ramificacao por erro tipado
92
+
93
+ ### Efeitos operacionais
94
+
95
+ O vertical usa as 5 categorias oficiais da Sema:
96
+
97
+ - `persistencia`
98
+ - `consulta`
99
+ - `evento`
100
+ - `notificacao`
101
+ - `auditoria`
102
+
103
+ Tambem usa `criticidade` para deixar claro o peso operacional do efeito.
104
+
105
+ ### Falhas reais
106
+
107
+ O vertical cobre explicitamente:
108
+
109
+ - autorizacao negada
110
+ - saldo insuficiente
111
+ - timeout de gateway
112
+
113
+ ## Fluxo de trabalho recomendado
114
+
115
+ ### 1. Escrever ou ajustar os arquivos `.sema`
116
+
117
+ Use o dominio compartilhado em um modulo e a operacao em outro modulo.
118
+
119
+ ### 2. Aplicar o formato canonico
120
+
121
+ ```bash
122
+ sema formatar exemplos
123
+ ```
124
+
125
+ ### 3. Validar semanticamente
126
+
127
+ ```bash
128
+ sema validar exemplos/pagamento.sema
129
+ ```
130
+
131
+ ### 4. Gerar codigo
132
+
133
+ ```bash
134
+ sema compilar exemplos/pagamento.sema --alvo typescript --saida ./.tmp/pagamento-ts
135
+ sema compilar exemplos/pagamento.sema --alvo python --saida ./.tmp/pagamento-py
136
+ ```
137
+
138
+ ### 5. Verificar o vertical completo
139
+
140
+ ```bash
141
+ sema verificar exemplos/pagamento.sema --json --saida ./.tmp/verificacao-pagamento
142
+ ```
143
+
144
+ ## O que esse vertical prova
145
+
146
+ Se esse vertical passa, a Sema ja consegue demonstrar que:
147
+
148
+ - modela contrato publico
149
+ - modela efeitos operacionais
150
+ - modela falhas reais
151
+ - modulariza dominio com `use`
152
+ - gera artefatos coerentes para TypeScript e Python
153
+ - executa testes gerados sem gambiarra conceitual
154
+
155
+ Esse e o criterio pratico que sustenta o uso publico do vertical de pagamento como referencia para IA e geracao.
@@ -2,7 +2,7 @@
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.
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.
6
6
 
7
7
  ## Prompt-base
8
8
 
@@ -11,7 +11,7 @@ Use o texto abaixo como base:
11
11
  ```text
12
12
  Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao para IA e backend vivo.
13
13
 
14
- Tecnicamente, a Sema funciona como linguagem de intencao orientada a contrato. Operacionalmente, ela existe para governar semantica acima da stack, 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 reduzir ambiguidade para IA, nao para substituir arquitetura, design ou curadoria humana.
15
15
 
16
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.
17
17
 
@@ -20,7 +20,8 @@ Fontes de verdade, em ordem:
20
20
  2. gramatica e documentacao de sintaxe da Sema
21
21
  3. especificacao semantica da linguagem
22
22
  4. exemplos oficiais, com prioridade para o vertical de pagamento
23
- 5. AST, IR e diagnosticos exportados pela CLI em JSON
23
+ 5. `sema resumo` e `briefing.min.json` quando a IA for pequena
24
+ 6. AST, IR e diagnosticos exportados pela CLI em JSON quando a capacidade aguentar
24
25
 
25
26
  Regras de operacao:
26
27
  - preserve o significado semantico
@@ -57,6 +58,12 @@ Se voce quiser um prompt menor para uso frequente:
57
58
  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.
58
59
  ```
59
60
 
61
+ Se voce quiser um prompt ainda mais curto e pronto para colar, use:
62
+
63
+ ```bash
64
+ sema prompt-curto caminho/arquivo.sema --curto --para mudanca
65
+ ```
66
+
60
67
  ## Variacao para revisao
61
68
 
62
69
  Use esta versao quando a IA for revisar `.sema` em vez de criar:
@@ -0,0 +1,267 @@
1
+ # Sintaxe Canonica
2
+
3
+ A Sema usa blocos declarativos com chaves e forma previsivel. A regra aqui nao e "ficar bonitinho para humano"; e reduzir ambiguidade para parser, IR, drift e 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
+ - linhas declarativas continuam validas para regra, efeito, garantia, transicao e etapa de flow
11
+ - `tests` contem blocos `caso`
12
+ - quando uma palavra reservada aparece seguida de `:`, ela continua sendo campo, nao bloco
13
+
14
+ ## Blocos de primeira classe
15
+
16
+ - `module`
17
+ - `use`
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 mais usados
38
+
39
+ - `input`
40
+ - `output`
41
+ - `rules`
42
+ - `effects`
43
+ - `impl`
44
+ - `vinculos`
45
+ - `execucao`
46
+ - `guarantees`
47
+ - `error`
48
+ - `fields`
49
+ - `invariants`
50
+ - `transitions`
51
+ - `given`
52
+ - `when`
53
+ - `expect`
54
+
55
+ ## Tipos compostos
56
+
57
+ A Sema agora aceita formas canonicas para payload mais denso sem empurrar tudo para `Json`.
58
+
59
+ ```sema
60
+ input {
61
+ ids: Lista<Id> required
62
+ metadata: Mapa<Texto, Texto>
63
+ responsavel: Opcional<Usuario>
64
+ chave_publica: Texto|Id
65
+ }
66
+ ```
67
+
68
+ Formas suportadas:
69
+
70
+ - `Lista<T>`
71
+ - `Mapa<K, V>`
72
+ - `Opcional<T>`
73
+ - `T1|T2`
74
+ - `T?`
75
+
76
+ ## Task com contrato operacional
77
+
78
+ ```sema
79
+ task processar_pedido {
80
+ input {
81
+ pedido_id: Id required
82
+ itens: Lista<Texto> required
83
+ }
84
+ output {
85
+ protocolo: Id
86
+ status: Texto
87
+ }
88
+ impl {
89
+ ts: app.pedidos.processar
90
+ }
91
+ vinculos {
92
+ arquivo: "src/pedidos/processar.ts"
93
+ simbolo: app.pedidos.processar
94
+ fila: pedidos_processamento
95
+ }
96
+ execucao {
97
+ idempotencia: verdadeiro
98
+ timeout: "30s"
99
+ retry: "3x exponencial"
100
+ compensacao: "reverter_reserva"
101
+ criticidade_operacional: alta
102
+ }
103
+ effects {
104
+ persistencia pedidos criticidade = alta
105
+ auditoria pedidos criticidade = media
106
+ }
107
+ guarantees {
108
+ protocolo existe
109
+ status existe
110
+ }
111
+ error {
112
+ pedido_invalido {
113
+ mensagem: "payload invalido"
114
+ categoria: dominio
115
+ recuperabilidade: permanente
116
+ acao_chamador: corrigir_input
117
+ impacta_estado: falso
118
+ requer_compensacao: falso
119
+ }
120
+ }
121
+ tests {
122
+ caso "processa pedido valido" {
123
+ given {
124
+ pedido_id: "ped_1"
125
+ }
126
+ expect {
127
+ sucesso: verdadeiro
128
+ }
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ ## `impl`
135
+
136
+ `impl` liga a task ou a superficie ao simbolo real do runtime.
137
+
138
+ ```sema
139
+ impl {
140
+ ts: app.pedidos.processar
141
+ py: services.orders.processar
142
+ cs: Pedidos.Api.Controllers.PedidosController.Processar
143
+ }
144
+ ```
145
+
146
+ Regras:
147
+
148
+ - cada origem aparece no maximo uma vez por bloco
149
+ - o caminho aponta para simbolo, nao para chamada com `()`
150
+ - `ts|typescript`, `py|python`, `dart`, `cs|csharp|dotnet`, `java`, `go|golang`, `rust|rs`, `cpp|cxx|cc|c++` sao origens validas
151
+
152
+ ## `vinculos`
153
+
154
+ `vinculos` nao substitui `impl`. Ele complementa o contrato com rastros operacionais que ajudam IA e drift a mapear o sistema vivo.
155
+
156
+ Campos comuns:
157
+
158
+ - `arquivo`
159
+ - `simbolo`
160
+ - `rota`
161
+ - `superficie`
162
+ - `recurso`
163
+ - `tabela`
164
+ - `fila`
165
+ - `worker`
166
+ - `evento`
167
+ - `cron`
168
+ - `webhook`
169
+ - `cache`
170
+ - `storage`
171
+ - `policy`
172
+
173
+ Exemplo:
174
+
175
+ ```sema
176
+ vinculos {
177
+ arquivo: "pacotes/cli/src/index.ts"
178
+ simbolo: cli.src.index.gerarContextoIa
179
+ webhook: "/interno/contexto-ia"
180
+ }
181
+ ```
182
+
183
+ ## `execucao`
184
+
185
+ `execucao` explicita comportamento operacional em vez de deixar isso espalhado pelo codigo ou pela cabeca da IA.
186
+
187
+ ```sema
188
+ execucao {
189
+ idempotencia: verdadeiro
190
+ timeout: "15s"
191
+ retry: "fila"
192
+ compensacao: "nenhuma"
193
+ criticidade_operacional: media
194
+ }
195
+ ```
196
+
197
+ Campos canonicos:
198
+
199
+ - `idempotencia`
200
+ - `timeout`
201
+ - `retry`
202
+ - `compensacao`
203
+ - `criticidade_operacional`
204
+
205
+ ## Superficies modernas
206
+
207
+ A Sema nao fica presa em HTTP. As bordas abaixo sao blocos irmaos de `route`, com shape minimo compativel com `task`, `impl`, `vinculos`, `execucao` e `effects`.
208
+
209
+ ```sema
210
+ worker preparar_briefing {
211
+ task: medir_drift
212
+ vinculos {
213
+ arquivo: "pacotes/cli/src/index.ts"
214
+ worker: contexto_ia
215
+ }
216
+ execucao {
217
+ retry: "fila_contexto"
218
+ criticidade_operacional: alta
219
+ }
220
+ }
221
+
222
+ webhook confirmar_contexto {
223
+ task: mapear_projeto
224
+ vinculos {
225
+ webhook: "/interno/contexto-ia"
226
+ }
227
+ execucao {
228
+ timeout: "15s"
229
+ criticidade_operacional: media
230
+ }
231
+ }
232
+ ```
233
+
234
+ ## Flow com dependencia explicita
235
+
236
+ ```sema
237
+ flow operar_contexto_ia {
238
+ entrada: Texto
239
+ etapa mapear usa mapear_projeto com entrada = entrada
240
+ etapa drift usa medir_drift com contrato = entrada depende_de mapear
241
+ etapa briefing usa preparar_briefing com entrada = entrada depende_de drift
242
+ effects {
243
+ auditoria contexto_ia criticidade = alta
244
+ }
245
+ vinculos {
246
+ simbolo: cli.src.index.comandoContextoIa
247
+ }
248
+ }
249
+ ```
250
+
251
+ ## Forma canonica
252
+
253
+ O formatador passa a preferir:
254
+
255
+ - `vinculos` com `arquivo` antes de `simbolo`
256
+ - `execucao` com `idempotencia`, `timeout`, `retry`, `compensacao` e `criticidade_operacional`
257
+ - strings operacionais como `arquivo`, `timeout`, `retry` e `compensacao` com aspas
258
+ - tipos compostos sem espacos quebrados em `Lista<T>` e `Mapa<K, V>`
259
+
260
+ ## Resumo pratico
261
+
262
+ Se a duvida for "isso vai ajudar a IA a editar com menos chute?", a sintaxe nova aponta para quatro coisas:
263
+
264
+ - contrato rico
265
+ - vinculo rastreavel
266
+ - execucao explicita
267
+ - superficie moderna de primeira classe
@@ -0,0 +1,107 @@
1
+ module exemplos.automacao {
2
+ state onboarding_status {
3
+ origem: automacao
4
+ fields {
5
+ lead_id: Id
6
+ etapa_atual: Texto
7
+ concluido: Booleano
8
+ }
9
+ }
10
+
11
+ task executar_onboarding {
12
+ input {
13
+ lead_id: Id required
14
+ email: Email required
15
+ }
16
+ output {
17
+ protocolo: Id
18
+ }
19
+ rules {
20
+ lead_id deve_ser valido
21
+ email deve_ser email_valido
22
+ }
23
+ effects {
24
+ consulta crm
25
+ persistencia conta
26
+ notificacao email detalhe_boas_vindas
27
+ auditoria onboarding
28
+ }
29
+ guarantees {
30
+ protocolo existe
31
+ persistencia concluida
32
+ }
33
+ tests {
34
+ caso "onboarding completo" {
35
+ given {
36
+ lead_id: "lead_1"
37
+ email: "cliente@empresa.com"
38
+ }
39
+
40
+ expect {
41
+ sucesso: verdadeiro
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ task registrar_auditoria {
48
+ input {
49
+ protocolo: Id required
50
+ }
51
+ output {
52
+ auditoria_id: Id
53
+ }
54
+ effects {
55
+ auditoria onboarding
56
+ }
57
+ guarantees {
58
+ auditoria_id existe
59
+ }
60
+ tests {
61
+ caso "auditoria registrada" {
62
+ given {
63
+ protocolo: "prot_1"
64
+ }
65
+
66
+ expect {
67
+ sucesso: verdadeiro
68
+ }
69
+ }
70
+ }
71
+ }
72
+
73
+ task registrar_falha_onboarding {
74
+ input {
75
+ lead_id: Id required
76
+ }
77
+ output {
78
+ protocolo_falha: Id
79
+ }
80
+ effects {
81
+ auditoria falha_onboarding
82
+ persistencia onboarding_falha
83
+ }
84
+ guarantees {
85
+ protocolo_falha existe
86
+ }
87
+ tests {
88
+ caso "falha registrada" {
89
+ given {
90
+ lead_id: "lead_1"
91
+ }
92
+
93
+ expect {
94
+ sucesso: verdadeiro
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ flow onboarding_cliente {
101
+ lead_id: Id
102
+ email: Email
103
+ etapa receber usa executar_onboarding com lead_id = lead_id, email = email quando (sucesso existe ou persistencia concluida) em_sucesso auditar em_erro registrar_falha
104
+ etapa auditar usa registrar_auditoria com protocolo = receber.protocolo depende_de receber
105
+ etapa registrar_falha usa registrar_falha_onboarding com lead_id = lead_id depende_de receber
106
+ }
107
+ }
@@ -0,0 +1,54 @@
1
+ module exemplos.cadastro.usuario {
2
+ docs {
3
+ resumo: "Cadastro de usuario com entidade,validacoes e persistencia declarada."
4
+ }
5
+
6
+ entity Usuario {
7
+ fields {
8
+ id: Id
9
+ nome: Texto
10
+ email: Email
11
+ ativo: Booleano
12
+ }
13
+ }
14
+
15
+ task criar_usuario {
16
+ input {
17
+ nome: Texto required
18
+ email: Email required
19
+ }
20
+ output {
21
+ usuario: Usuario
22
+ }
23
+ rules {
24
+ nome deve_ser preenchido
25
+ email deve_ser email_valido
26
+ email deve_ser unico em Usuario.email
27
+ }
28
+ effects {
29
+ persistencia Usuario
30
+ evento usuario_criado
31
+ auditoria cadastro_usuario
32
+ }
33
+ guarantees {
34
+ usuario existe
35
+ persistencia concluida
36
+ }
37
+ error {
38
+ email_duplicado: "Ja existe usuario com este email."
39
+ entrada_invalida: "Os dados informados nao atendem as regras."
40
+ }
41
+ tests {
42
+ caso "cria usuario valido" {
43
+ given {
44
+ nome: "Ana"
45
+ email: "ana@empresa.com"
46
+ }
47
+
48
+ expect {
49
+ sucesso: verdadeiro
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,78 @@
1
+ module exemplos.calculadora {
2
+ docs {
3
+ resumo: "Operacoes aritmeticas simples com garantias e testes."
4
+ }
5
+
6
+ comments {
7
+ observacao: "Exemplo base para demonstrar tarefas semanticas puras."
8
+ }
9
+
10
+ task somar {
11
+ input {
12
+ a: Numero required
13
+ b: Numero required
14
+ }
15
+ output {
16
+ resultado: Numero
17
+ }
18
+ rules {
19
+ a deve_ser numero_valido
20
+ b deve_ser numero_valido
21
+ }
22
+ effects {
23
+ auditoria operacao soma
24
+ }
25
+ guarantees {
26
+ resultado existe
27
+ }
28
+ error {
29
+ entrada_invalida: "Os valores precisam ser numericos."
30
+ }
31
+ tests {
32
+ caso "soma basica" {
33
+ given {
34
+ a: 2
35
+ b: 3
36
+ }
37
+
38
+ expect {
39
+ sucesso: verdadeiro
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ task dividir {
46
+ input {
47
+ dividendo: Numero required
48
+ divisor: Numero required
49
+ }
50
+ output {
51
+ resultado: Numero
52
+ }
53
+ rules {
54
+ divisor deve_ser diferente_de_zero
55
+ }
56
+ effects {
57
+ auditoria operacao divisao
58
+ }
59
+ guarantees {
60
+ resultado existe
61
+ }
62
+ error {
63
+ divisor_zero: "Nao e permitido dividir por zero."
64
+ }
65
+ tests {
66
+ caso "divisao valida" {
67
+ given {
68
+ dividendo: 10
69
+ divisor: 2
70
+ }
71
+
72
+ expect {
73
+ sucesso: verdadeiro
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }