@semacode/cli 1.5.16 → 1.5.17

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 (175) hide show
  1. package/AGENTS.md +272 -0
  2. package/LICENSE +22 -0
  3. package/SEMA_BRIEF.curto.txt +9 -0
  4. package/SEMA_BRIEF.md +70 -0
  5. package/SEMA_BRIEF.micro.txt +7 -0
  6. package/SEMA_INDEX.json +921 -0
  7. package/dist/angular-consumer-standalone.d.ts +6 -0
  8. package/dist/angular-consumer-standalone.js.map +1 -0
  9. package/dist/cpp-symbols.d.ts +10 -0
  10. package/dist/cpp-symbols.js.map +1 -0
  11. package/dist/docs.d.ts +56 -0
  12. package/dist/docs.js.map +1 -0
  13. package/dist/dotnet-http.d.ts +23 -0
  14. package/dist/dotnet-http.js.map +1 -0
  15. package/dist/drift.d.ts +225 -0
  16. package/dist/drift.js.map +1 -0
  17. package/dist/go-http.d.ts +23 -0
  18. package/dist/go-http.js.map +1 -0
  19. package/dist/importador.d.ts +31 -0
  20. package/dist/importador.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/java-http.d.ts +23 -0
  24. package/dist/java-http.js.map +1 -0
  25. package/dist/lua-symbols.d.ts +10 -0
  26. package/dist/lua-symbols.js.map +1 -0
  27. package/dist/php-symbols.d.ts +24 -0
  28. package/dist/php-symbols.js.map +1 -0
  29. package/dist/projeto.d.ts +53 -0
  30. package/dist/projeto.js.map +1 -0
  31. package/dist/python-http.d.ts +23 -0
  32. package/dist/python-http.js.map +1 -0
  33. package/dist/rust-http.d.ts +23 -0
  34. package/dist/rust-http.js.map +1 -0
  35. package/dist/tipos.d.ts +3 -0
  36. package/dist/tipos.js.map +1 -0
  37. package/dist/typescript-http.d.ts +35 -0
  38. package/dist/typescript-http.js.map +1 -0
  39. package/docs/AGENT_STARTER.md +102 -0
  40. package/docs/cli.md +119 -0
  41. package/docs/como-ensinar-a-sema-para-ia.md +149 -0
  42. package/docs/deploy.md +70 -0
  43. package/docs/documentacao.md +63 -0
  44. package/docs/env.md +56 -0
  45. package/docs/extensao-vscode.md +45 -0
  46. package/docs/fluxo-pratico-ia-sema.md +177 -0
  47. package/docs/instalacao-e-primeiro-uso.md +112 -0
  48. package/docs/integracao-com-ia.md +101 -0
  49. package/docs/mcp.md +53 -0
  50. package/docs/pagamento-ponta-a-ponta.md +155 -0
  51. package/docs/persistencia-vendor-first.md +145 -0
  52. package/docs/prompt-base-ia-sema.md +104 -0
  53. package/docs/rollback.md +47 -0
  54. package/docs/sintaxe.md +410 -0
  55. package/exemplos/agendamento.sema +106 -0
  56. package/exemplos/assinatura.sema +136 -0
  57. package/exemplos/auditoria.sema +88 -0
  58. package/exemplos/autenticacao.sema +125 -0
  59. package/exemplos/automacao.sema +107 -0
  60. package/exemplos/cadastro_usuario.sema +54 -0
  61. package/exemplos/calculadora.sema +78 -0
  62. package/exemplos/crud_simples.sema +89 -0
  63. package/exemplos/estoque.sema +126 -0
  64. package/exemplos/exportacao.sema +94 -0
  65. package/exemplos/fila.sema +131 -0
  66. package/exemplos/integracao_externa.sema +94 -0
  67. package/exemplos/multi_tenant.sema +140 -0
  68. package/exemplos/notificacao.sema +98 -0
  69. package/exemplos/operacao_estrategia.sema +402 -0
  70. package/exemplos/pagamento.sema +222 -0
  71. package/exemplos/pagamento_dominio.sema +35 -0
  72. package/exemplos/pedido.sema +119 -0
  73. package/exemplos/permissao.sema +121 -0
  74. package/exemplos/persistencia_vendor_first.sema +86 -0
  75. package/exemplos/relatorio.sema +93 -0
  76. package/exemplos/testes_embutidos.sema +45 -0
  77. package/exemplos/tratamento_erro.sema +157 -0
  78. package/exemplos/upload_arquivo.sema +93 -0
  79. package/exemplos/webhook.sema +96 -0
  80. package/llms-full.txt +34 -0
  81. package/llms.txt +17 -0
  82. package/node_modules/@sema/gerador-css/dist/index.d.ts +3 -0
  83. package/node_modules/@sema/gerador-css/dist/index.js +592 -0
  84. package/node_modules/@sema/gerador-css/dist/index.js.map +1 -0
  85. package/node_modules/@sema/gerador-css/package.json +7 -0
  86. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  87. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  88. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  89. package/node_modules/@sema/gerador-dart/package.json +7 -0
  90. package/node_modules/@sema/gerador-html/dist/index.d.ts +3 -0
  91. package/node_modules/@sema/gerador-html/dist/index.js +163 -0
  92. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -0
  93. package/node_modules/@sema/gerador-html/package.json +7 -0
  94. package/node_modules/@sema/gerador-javascript/dist/index.d.ts +3 -0
  95. package/node_modules/@sema/gerador-javascript/dist/index.js +421 -0
  96. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -0
  97. package/node_modules/@sema/gerador-javascript/package.json +7 -0
  98. package/node_modules/@sema/gerador-lua/dist/index.d.ts +3 -0
  99. package/node_modules/@sema/gerador-lua/dist/index.js +328 -0
  100. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -0
  101. package/node_modules/@sema/gerador-lua/package.json +7 -0
  102. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  103. package/node_modules/@sema/gerador-python/dist/index.js +729 -0
  104. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  105. package/node_modules/@sema/gerador-python/package.json +7 -0
  106. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  107. package/node_modules/@sema/gerador-typescript/dist/index.js +793 -0
  108. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  109. package/node_modules/@sema/gerador-typescript/package.json +7 -0
  110. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +125 -0
  111. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  112. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  113. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  114. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  115. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  116. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  117. package/node_modules/@sema/nucleo/dist/formatador/index.js +488 -0
  118. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  119. package/node_modules/@sema/nucleo/dist/index.d.ts +35 -0
  120. package/node_modules/@sema/nucleo/dist/index.js +96 -0
  121. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  122. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  123. package/node_modules/@sema/nucleo/dist/ir/conversor.js +1072 -0
  124. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  125. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +377 -0
  126. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  127. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  128. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  129. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  130. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  131. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  132. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +82 -0
  133. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  134. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  135. package/node_modules/@sema/nucleo/dist/parser/parser.js +807 -0
  136. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  137. package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +39 -0
  138. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +294 -0
  139. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +1 -0
  140. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +58 -0
  141. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1912 -0
  142. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  143. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +104 -0
  144. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +445 -0
  145. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  146. package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +91 -0
  147. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +258 -0
  148. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +1 -0
  149. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  150. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  151. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  152. package/node_modules/@sema/nucleo/package.json +7 -0
  153. package/node_modules/@sema/padroes/dist/index.d.ts +25 -0
  154. package/node_modules/@sema/padroes/dist/index.js +316 -0
  155. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  156. package/node_modules/@sema/padroes/package.json +7 -0
  157. package/package.json +35 -26
  158. package/semacode-cli-1.3.1.tgz +0 -0
  159. package/src/angular-consumer-standalone.ts +0 -312
  160. package/src/cpp-symbols.ts +0 -82
  161. package/src/docs.ts +0 -535
  162. package/src/dotnet-http.ts +0 -355
  163. package/src/drift.ts +0 -4933
  164. package/src/go-http.ts +0 -118
  165. package/src/importador.ts +0 -3891
  166. package/src/index.ts +0 -5641
  167. package/src/java-http.ts +0 -247
  168. package/src/lua-symbols.ts +0 -114
  169. package/src/php-symbols.ts +0 -462
  170. package/src/projeto.ts +0 -862
  171. package/src/python-http.ts +0 -258
  172. package/src/rust-http.ts +0 -125
  173. package/src/tipos.ts +0 -24
  174. package/src/typescript-http.ts +0 -1076
  175. package/tsconfig.json +0 -20
@@ -0,0 +1,145 @@
1
+ # Persistencia Vendor-First
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.
4
+
5
+ ## Engines publicas
6
+
7
+ - `postgres`
8
+ - `mysql`
9
+ - `sqlite`
10
+ - `mongodb`
11
+ - `redis`
12
+
13
+ ## Exemplo PostgreSQL
14
+
15
+ ```sema
16
+ database principal_postgres {
17
+ engine: postgres
18
+ schema: public
19
+ consistency: forte
20
+ durability: alta
21
+ transaction_model: mvcc
22
+ query_model: sql
23
+ capabilities {
24
+ joins
25
+ views
26
+ foreign_keys
27
+ }
28
+ table pedidos {
29
+ entity: Pedido
30
+ }
31
+ relationship pedido_cliente {
32
+ from: Pedido
33
+ to: Cliente
34
+ }
35
+ query buscar_pedidos {
36
+ mode: sql
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## Exemplo MySQL
42
+
43
+ ```sema
44
+ database principal_mysql {
45
+ engine: mysql
46
+ consistency: forte
47
+ durability: alta
48
+ transaction_model: bloqueio
49
+ query_model: sql
50
+ table faturamento {
51
+ table: faturamento
52
+ }
53
+ index faturamento_status {
54
+ table: faturamento
55
+ }
56
+ query buscar_faturas {
57
+ mode: sql
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## Exemplo SQLite
63
+
64
+ ```sema
65
+ database principal_sqlite {
66
+ engine: sqlite
67
+ consistency: snapshot
68
+ durability: media
69
+ transaction_model: single_thread
70
+ query_model: sql
71
+ table cache_local {
72
+ table: cache_local
73
+ }
74
+ retention limpeza_local {
75
+ retention: "7d"
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## Exemplo MongoDB
81
+
82
+ ```sema
83
+ database principal_mongodb {
84
+ engine: mongodb
85
+ consistency: eventual
86
+ durability: alta
87
+ transaction_model: documento
88
+ query_model: documento
89
+ collection pedidos {
90
+ collection: pedidos
91
+ }
92
+ document pedido_snapshot {
93
+ entity: PedidoSnapshot
94
+ }
95
+ query pipeline_pedido {
96
+ mode: pipeline
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## Exemplo Redis
102
+
103
+ ```sema
104
+ database principal_redis {
105
+ engine: redis
106
+ consistency: eventual
107
+ durability: media
108
+ transaction_model: single_thread
109
+ query_model: chave_valor
110
+ keyspace cache_pedidos {
111
+ ttl: "300s"
112
+ }
113
+ stream eventos_pedido {
114
+ surface: fila
115
+ }
116
+ retention expurgo_cache {
117
+ retention: "300s"
118
+ }
119
+ }
120
+ ```
121
+
122
+ ## Compatibilidade calculada
123
+
124
+ Cada recurso recebe compatibilidade por engine:
125
+
126
+ - `nativo`
127
+ - `adaptado`
128
+ - `parcial`
129
+ - `invalido`
130
+
131
+ Isso deixa explicito quando o contrato esta pedindo portabilidade falsa, por exemplo:
132
+
133
+ - `table` em `redis`
134
+ - `foreign_keys` em engine sem suporte equivalente
135
+ - transacao multi-documento tratada como universal
136
+
137
+ ## Onde isso aparece
138
+
139
+ - parser e AST
140
+ - IR canonica
141
+ - analisador semantico
142
+ - formatador
143
+ - `sema drift`
144
+ - `sema importar`
145
+ - extensao VS Code
@@ -0,0 +1,104 @@
1
+ # Prompt-Base Oficial para IA Trabalhar com Sema
2
+
3
+ Este arquivo serve como prompt-base oficial para qualquer IA que precise ler, escrever, revisar ou transformar arquivos `.sema`.
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.
6
+
7
+ ## Prompt-base
8
+
9
+ Use o texto abaixo como base:
10
+
11
+ ```text
12
+ Voce esta trabalhando com Sema, um Protocolo de Governanca de Intencao para IA e backend vivo.
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.
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.
17
+
18
+ Fontes de verdade, em ordem:
19
+ 1. se o projeto expuser `SEMA_CONTEXT.md`, comece por ele
20
+ 2. `SEMA_BRIEF.md`
21
+ 3. `SEMA_INDEX.json`
22
+ 4. README do projeto
23
+ 5. gramatica e documentacao de sintaxe da Sema
24
+ 6. especificacao semantica da linguagem
25
+ 7. exemplos oficiais, com prioridade para o vertical de pagamento
26
+ 8. `sema resumo` e `briefing.min.json` quando a IA for pequena
27
+ 9. AST, IR e diagnosticos exportados pela CLI em JSON quando a capacidade aguentar
28
+
29
+ Regras de operacao:
30
+ - preserve o significado semantico
31
+ - use o formatador oficial da Sema como fonte unica de estilo
32
+ - use diagnosticos estruturados como contrato de correcao
33
+ - use a IR como fonte de verdade semantica quando houver duvida
34
+ - nao conclua uma alteracao sem validar e verificar o modulo
35
+ - trate `importar` como bootstrap revisavel, nao como contrato final automatico
36
+ - trate `drift` como medicao de verdade contra codigo vivo
37
+ - trate `impl` como ponte entre task e simbolo real
38
+ - nao invente regra de negocio que o contrato e o codigo nao sustentem
39
+
40
+ Antes de editar `.sema`, entenda:
41
+ - o module alvo
42
+ - os contratos de task, route, error, effects, guarantees, state e flow
43
+ - os exemplos oficiais relacionados
44
+
45
+ Depois de editar `.sema`, execute este fluxo:
46
+ 1. formatar
47
+ 2. validar
48
+ 3. diagnosticar, se houver falha
49
+ 4. verificar
50
+
51
+ Se houver conflito entre texto livre e IR/diagnosticos, priorize a IR e os diagnosticos da CLI.
52
+
53
+ Se algo nao estiver claro, siga a forma ja usada nos exemplos oficiais. Nao improvise sem base.
54
+ ```
55
+
56
+ ## Variacao curta
57
+
58
+ Se voce quiser um prompt menor para uso frequente:
59
+
60
+ ```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
+ ```
63
+
64
+ Se voce quiser um prompt ainda mais curto e pronto para colar, use:
65
+
66
+ ```bash
67
+ sema prompt-curto caminho/arquivo.sema --curto --para mudanca
68
+ ```
69
+
70
+ ## Variacao para revisao
71
+
72
+ Use esta versao quando a IA for revisar `.sema` em vez de criar:
73
+
74
+ ```text
75
+ 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.
76
+ ```
77
+
78
+ ## Variacao para geracao
79
+
80
+ Use esta versao quando a IA for escrever modulo novo:
81
+
82
+ ```text
83
+ 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
+ ```
85
+
86
+ ## Variacao para correcao guiada por diagnostico
87
+
88
+ Use esta versao quando a IA ja tiver erro concreto para corrigir:
89
+
90
+ ```text
91
+ 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.
92
+ ```
93
+
94
+ ## O que sempre anexar junto do prompt
95
+
96
+ Idealmente, acompanhe o prompt com:
97
+
98
+ - o arquivo `.sema` alvo
99
+ - o resultado de `sema ast --json`
100
+ - o resultado de `sema ir --json`
101
+ - o resultado de `sema diagnosticos --json`, se houver erro
102
+ - um exemplo oficial parecido
103
+
104
+ Sem isso, a IA pode ate acertar. Com isso, ela trabalha direito.
@@ -0,0 +1,47 @@
1
+ # Rollback
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.
4
+
5
+ ## Quando aplicar
6
+
7
+ - CLI ou MCP publicados quebram instalacao basica.
8
+ - VSIX publicada nao inicia ou quebra o Language Server.
9
+ - Instaladores baixam asset errado.
10
+ - Release notes ou checksums apontam para artefato invalido.
11
+
12
+ ## Primeira resposta
13
+
14
+ 1. Marque o problema no GitHub Release.
15
+ 2. Reponte `latest` no NPM para a ultima versao boa, quando necessario:
16
+
17
+ ```bash
18
+ npm dist-tag add @semacode/cli@<versao-boa> latest
19
+ npm dist-tag add @semacode/mcp@<versao-boa> latest
20
+ ```
21
+
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.
24
+
25
+ ## Validacao de rollback
26
+
27
+ ```bash
28
+ npm view @semacode/cli dist-tags --json
29
+ npm view @semacode/mcp dist-tags --json
30
+ npm install -g @semacode/cli@latest
31
+ npm install -g @semacode/mcp@latest
32
+ sema --version
33
+ sema-mcp --help
34
+ ```
35
+
36
+ ## Git
37
+
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.
39
+
40
+ Se o tag foi criado errado e ainda nao existe release consumida:
41
+
42
+ ```bash
43
+ git tag -d v<versao>
44
+ git push origin :refs/tags/v<versao>
45
+ ```
46
+
47
+ Use isso somente antes de usuarios consumirem o tag.
@@ -0,0 +1,410 @@
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`
12
+
13
+ ## Blocos de primeira classe
14
+
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`
57
+
58
+ ## Subblocos comuns
59
+
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`
81
+
82
+ ## 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
+
93
+ Formas suportadas:
94
+
95
+ - `Lista<T>`
96
+ - `Mapa<K, V>`
97
+ - `Opcional<T>`
98
+ - `T1|T2`
99
+ - `T?`
100
+
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.
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
+ ```
409
+
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.