@semacode/cli 1.5.28 → 1.5.29
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 +279 -265
- package/AGENT_CONTEXT_PACK.json +164 -0
- package/README.md +144 -144
- package/SEMA_BRIEF.curto.txt +7 -7
- package/SEMA_BRIEF.md +464 -65
- package/SEMA_BRIEF.micro.txt +6 -6
- package/SEMA_INDEX.json +6723 -669
- package/dist/bridge.d.ts +52 -0
- package/dist/bridge.js +318 -0
- package/dist/bridge.js.map +1 -0
- package/dist/comandos.d.ts +11 -0
- package/dist/comandos.js +110 -0
- package/dist/comandos.js.map +1 -0
- package/dist/contexto.d.ts +34 -0
- package/dist/contexto.js +197 -0
- package/dist/contexto.js.map +1 -0
- package/dist/drift.d.ts +1 -1
- package/dist/drift.js +32 -5
- package/dist/drift.js.map +1 -1
- package/dist/index.js +391 -64
- package/dist/index.js.map +1 -1
- package/dist/lua-symbols.d.ts +0 -6
- package/dist/lua-symbols.js +11 -78
- package/dist/lua-symbols.js.map +1 -1
- package/dist/projeto.js +6 -0
- package/dist/projeto.js.map +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/AGENT_STARTER.md +109 -109
- package/docs/api.md +82 -0
- package/docs/cli.md +175 -175
- package/docs/como-ensinar-a-sema-para-ia.md +155 -155
- package/docs/deploy.md +93 -93
- package/docs/documentacao.md +88 -88
- package/docs/env.md +105 -105
- package/docs/extensao-vscode.md +53 -53
- package/docs/fluxo-pratico-ia-sema.md +187 -187
- package/docs/instalacao-e-primeiro-uso.md +134 -134
- package/docs/integracao-com-ia.md +110 -110
- package/docs/mcp.md +292 -292
- package/docs/pagamento-ponta-a-ponta.md +171 -171
- package/docs/persistencia-vendor-first.md +151 -151
- package/docs/prompt-base-ia-sema.md +111 -111
- package/docs/repositories.md +54 -54
- package/docs/rollback.md +49 -49
- package/docs/seguranca.md +126 -126
- package/docs/sintaxe.md +218 -218
- package/exemplos/author_obra_comum.sema +294 -294
- package/exemplos/author_tema_sensivel.sema +264 -264
- package/exemplos/profile_game.sema +114 -114
- package/exemplos/profile_legal.sema +105 -105
- package/exemplos/profile_ops.sema +110 -110
- package/exemplos/profile_research.sema +104 -104
- package/exemplos/profile_software.sema +123 -123
- package/exemplos/profile_workflow_n8n.sema +99 -99
- package/llms-full.txt +10 -9
- package/llms.txt +8 -7
- 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/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/index.d.ts +17 -0
- package/node_modules/@sema/nucleo/dist/index.js +28 -0
- package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +4 -0
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
- package/node_modules/@sema/nucleo/dist/parser/parser.js +2 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +3 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.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 -10
- package/dist/php-symbols.d.ts +0 -24
- package/dist/php-symbols.js +0 -375
- package/dist/php-symbols.js.map +0 -1
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
module exemplos.profile.game {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Starter do Profile Game: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois loop jogavel, jogador, estado, state, regras, transicoes, falha, derrota, balanceamento, abuso, exploit, telemetria, replay e metricas."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
state partida_status {
|
|
7
|
-
fields {
|
|
8
|
-
estado: StatusPartida
|
|
9
|
-
}
|
|
10
|
-
invariants {
|
|
11
|
-
estado existe
|
|
12
|
-
}
|
|
13
|
-
transitions {
|
|
14
|
-
PREPARANDO -> EM_JOGO
|
|
15
|
-
EM_JOGO -> VITORIA
|
|
16
|
-
EM_JOGO -> DERROTA
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
enum StatusPartida {
|
|
21
|
-
PREPARANDO,
|
|
22
|
-
EM_JOGO,
|
|
23
|
-
VITORIA,
|
|
24
|
-
DERROTA
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type LoopJogo {
|
|
28
|
-
fields {
|
|
29
|
-
objetivo: Texto
|
|
30
|
-
jogador: Texto
|
|
31
|
-
estado: Texto
|
|
32
|
-
regras: Lista
|
|
33
|
-
telemetria: Lista
|
|
34
|
-
}
|
|
35
|
-
invariants {
|
|
36
|
-
objetivo existe
|
|
37
|
-
jogador existe
|
|
38
|
-
estado existe
|
|
39
|
-
regras existe
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
task validar_loop_jogavel {
|
|
44
|
-
input {
|
|
45
|
-
loop: Texto required
|
|
46
|
-
jogador: Texto required
|
|
47
|
-
estado: Texto required
|
|
48
|
-
regras: Lista required
|
|
49
|
-
estado_state: Texto
|
|
50
|
-
transicoes: Texto
|
|
51
|
-
falha: Texto
|
|
52
|
-
derrota: Texto
|
|
53
|
-
balanceamento: Texto
|
|
54
|
-
abuso: Texto
|
|
55
|
-
exploit: Texto
|
|
56
|
-
telemetria: Texto
|
|
57
|
-
replay: Texto
|
|
58
|
-
metricas: Texto
|
|
59
|
-
}
|
|
60
|
-
output {
|
|
61
|
-
jogavel: Booleano
|
|
62
|
-
bloqueios: Lista
|
|
63
|
-
}
|
|
64
|
-
rules {
|
|
65
|
-
loop deve_ser jogavel
|
|
66
|
-
jogador deve_ser declarado
|
|
67
|
-
estado deve_ser persistente
|
|
68
|
-
estado_state deve_ser explicito
|
|
69
|
-
regras deve_ser testaveis
|
|
70
|
-
transicoes deve_ser declaradas
|
|
71
|
-
falha deve_ser possivel
|
|
72
|
-
derrota deve_ser legivel
|
|
73
|
-
balanceamento deve_ser testavel
|
|
74
|
-
abuso deve_ser mapeado
|
|
75
|
-
exploit deve_ser bloqueado
|
|
76
|
-
telemetria deve_ser declarada
|
|
77
|
-
replay deve_ser opcional
|
|
78
|
-
metricas deve_ser coletaveis
|
|
79
|
-
}
|
|
80
|
-
effects {
|
|
81
|
-
evento game_loop_validado criticidade = baixa
|
|
82
|
-
auditoria game_loop criticidade = media
|
|
83
|
-
}
|
|
84
|
-
forbidden {
|
|
85
|
-
vitoria_sem_custo
|
|
86
|
-
exploit_sem_mitigacao
|
|
87
|
-
falha_invisivel
|
|
88
|
-
}
|
|
89
|
-
execucao {
|
|
90
|
-
idempotencia: verdadeiro
|
|
91
|
-
timeout: "10s"
|
|
92
|
-
criticidade_operacional: media
|
|
93
|
-
}
|
|
94
|
-
guarantees {
|
|
95
|
-
jogavel existe
|
|
96
|
-
bloqueios existe
|
|
97
|
-
}
|
|
98
|
-
tests {
|
|
99
|
-
caso "loop tem estado e falha" {
|
|
100
|
-
given {
|
|
101
|
-
loop: "explorar, escolher risco, resolver encontro"
|
|
102
|
-
jogador: "piloto"
|
|
103
|
-
estado: "energia e mapa"
|
|
104
|
-
regras: "transicoes PREPARANDO EM_JOGO DERROTA"
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
expect {
|
|
108
|
-
sucesso: verdadeiro
|
|
109
|
-
jogavel: verdadeiro
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
1
|
+
module exemplos.profile.game {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Starter do Profile Game: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois loop jogavel, jogador, estado, state, regras, transicoes, falha, derrota, balanceamento, abuso, exploit, telemetria, replay e metricas."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
state partida_status {
|
|
7
|
+
fields {
|
|
8
|
+
estado: StatusPartida
|
|
9
|
+
}
|
|
10
|
+
invariants {
|
|
11
|
+
estado existe
|
|
12
|
+
}
|
|
13
|
+
transitions {
|
|
14
|
+
PREPARANDO -> EM_JOGO
|
|
15
|
+
EM_JOGO -> VITORIA
|
|
16
|
+
EM_JOGO -> DERROTA
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
enum StatusPartida {
|
|
21
|
+
PREPARANDO,
|
|
22
|
+
EM_JOGO,
|
|
23
|
+
VITORIA,
|
|
24
|
+
DERROTA
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type LoopJogo {
|
|
28
|
+
fields {
|
|
29
|
+
objetivo: Texto
|
|
30
|
+
jogador: Texto
|
|
31
|
+
estado: Texto
|
|
32
|
+
regras: Lista
|
|
33
|
+
telemetria: Lista
|
|
34
|
+
}
|
|
35
|
+
invariants {
|
|
36
|
+
objetivo existe
|
|
37
|
+
jogador existe
|
|
38
|
+
estado existe
|
|
39
|
+
regras existe
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
task validar_loop_jogavel {
|
|
44
|
+
input {
|
|
45
|
+
loop: Texto required
|
|
46
|
+
jogador: Texto required
|
|
47
|
+
estado: Texto required
|
|
48
|
+
regras: Lista required
|
|
49
|
+
estado_state: Texto
|
|
50
|
+
transicoes: Texto
|
|
51
|
+
falha: Texto
|
|
52
|
+
derrota: Texto
|
|
53
|
+
balanceamento: Texto
|
|
54
|
+
abuso: Texto
|
|
55
|
+
exploit: Texto
|
|
56
|
+
telemetria: Texto
|
|
57
|
+
replay: Texto
|
|
58
|
+
metricas: Texto
|
|
59
|
+
}
|
|
60
|
+
output {
|
|
61
|
+
jogavel: Booleano
|
|
62
|
+
bloqueios: Lista
|
|
63
|
+
}
|
|
64
|
+
rules {
|
|
65
|
+
loop deve_ser jogavel
|
|
66
|
+
jogador deve_ser declarado
|
|
67
|
+
estado deve_ser persistente
|
|
68
|
+
estado_state deve_ser explicito
|
|
69
|
+
regras deve_ser testaveis
|
|
70
|
+
transicoes deve_ser declaradas
|
|
71
|
+
falha deve_ser possivel
|
|
72
|
+
derrota deve_ser legivel
|
|
73
|
+
balanceamento deve_ser testavel
|
|
74
|
+
abuso deve_ser mapeado
|
|
75
|
+
exploit deve_ser bloqueado
|
|
76
|
+
telemetria deve_ser declarada
|
|
77
|
+
replay deve_ser opcional
|
|
78
|
+
metricas deve_ser coletaveis
|
|
79
|
+
}
|
|
80
|
+
effects {
|
|
81
|
+
evento game_loop_validado criticidade = baixa
|
|
82
|
+
auditoria game_loop criticidade = media
|
|
83
|
+
}
|
|
84
|
+
forbidden {
|
|
85
|
+
vitoria_sem_custo
|
|
86
|
+
exploit_sem_mitigacao
|
|
87
|
+
falha_invisivel
|
|
88
|
+
}
|
|
89
|
+
execucao {
|
|
90
|
+
idempotencia: verdadeiro
|
|
91
|
+
timeout: "10s"
|
|
92
|
+
criticidade_operacional: media
|
|
93
|
+
}
|
|
94
|
+
guarantees {
|
|
95
|
+
jogavel existe
|
|
96
|
+
bloqueios existe
|
|
97
|
+
}
|
|
98
|
+
tests {
|
|
99
|
+
caso "loop tem estado e falha" {
|
|
100
|
+
given {
|
|
101
|
+
loop: "explorar, escolher risco, resolver encontro"
|
|
102
|
+
jogador: "piloto"
|
|
103
|
+
estado: "energia e mapa"
|
|
104
|
+
regras: "transicoes PREPARANDO EM_JOGO DERROTA"
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
expect {
|
|
108
|
+
sucesso: verdadeiro
|
|
109
|
+
jogavel: verdadeiro
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
module exemplos.profile.legal {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Starter do Profile Legal: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois jurisdicao, escopo, limite, fonte normativa, lei, regulamento, documento, citacao, evidencia, revisao_humana, advogado, aprovador, bloqueio, auditoria, retencao, correlacao e motivo."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
type ContextoLegal {
|
|
7
|
-
fields {
|
|
8
|
-
jurisdicao: Texto
|
|
9
|
-
escopo: Texto
|
|
10
|
-
limite: Texto
|
|
11
|
-
fontes: Lista
|
|
12
|
-
revisao_humana: Booleano
|
|
13
|
-
}
|
|
14
|
-
invariants {
|
|
15
|
-
jurisdicao existe
|
|
16
|
-
escopo existe
|
|
17
|
-
limite existe
|
|
18
|
-
fontes existe
|
|
19
|
-
revisao_humana existe
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
task validar_minuta_legal {
|
|
24
|
-
input {
|
|
25
|
-
jurisdicao: Texto required
|
|
26
|
-
escopo: Texto required
|
|
27
|
-
fonte: Texto required
|
|
28
|
-
documento: Texto required
|
|
29
|
-
limite: Texto
|
|
30
|
-
norma: Texto
|
|
31
|
-
lei: Texto
|
|
32
|
-
regulamento: Texto
|
|
33
|
-
citacao: Texto
|
|
34
|
-
evidencia: Texto
|
|
35
|
-
revisao_humana: Texto
|
|
36
|
-
advogado: Texto
|
|
37
|
-
}
|
|
38
|
-
output {
|
|
39
|
-
aprovado: Booleano
|
|
40
|
-
bloqueio: Lista
|
|
41
|
-
}
|
|
42
|
-
rules {
|
|
43
|
-
jurisdicao deve_ser declarada
|
|
44
|
-
escopo deve_ser limitado
|
|
45
|
-
limite deve_ser explicito
|
|
46
|
-
fonte deve_ser normativa
|
|
47
|
-
norma deve_ser verificavel
|
|
48
|
-
lei deve_ser citavel
|
|
49
|
-
regulamento deve_ser citavel
|
|
50
|
-
documento deve_ser anexado
|
|
51
|
-
citacao deve_ser rastreavel
|
|
52
|
-
evidencia deve_ser preservada
|
|
53
|
-
revisao_humana deve_ser obrigatoria
|
|
54
|
-
advogado deve_ser aprovador
|
|
55
|
-
}
|
|
56
|
-
effects {
|
|
57
|
-
auditoria legal_minuta criticidade = media
|
|
58
|
-
}
|
|
59
|
-
authz {
|
|
60
|
-
escopo: legal.validar_minuta
|
|
61
|
-
tenant: opcional
|
|
62
|
-
}
|
|
63
|
-
dados {
|
|
64
|
-
classificacao_padrao: interno
|
|
65
|
-
redacao_log: obrigatoria
|
|
66
|
-
}
|
|
67
|
-
audit {
|
|
68
|
-
evento: exemplos.legal.minuta.validada
|
|
69
|
-
ator: advogado
|
|
70
|
-
correlacao: request_id
|
|
71
|
-
retencao: "180d"
|
|
72
|
-
motivo: obrigatorio
|
|
73
|
-
}
|
|
74
|
-
forbidden {
|
|
75
|
-
parecer_final_sem_revisao_humana
|
|
76
|
-
citacao_inventada
|
|
77
|
-
orientacao_juridica_sem_limite
|
|
78
|
-
}
|
|
79
|
-
execucao {
|
|
80
|
-
idempotencia: verdadeiro
|
|
81
|
-
timeout: "20s"
|
|
82
|
-
retry: "nenhum"
|
|
83
|
-
criticidade_operacional: media
|
|
84
|
-
}
|
|
85
|
-
guarantees {
|
|
86
|
-
aprovado existe
|
|
87
|
-
bloqueio existe
|
|
88
|
-
}
|
|
89
|
-
tests {
|
|
90
|
-
caso "minuta exige fonte e humano" {
|
|
91
|
-
given {
|
|
92
|
-
jurisdicao: "BR"
|
|
93
|
-
escopo: "contrato comercial"
|
|
94
|
-
fonte: "lei e regulamento"
|
|
95
|
-
documento: "documento com citacao e evidencia"
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
expect {
|
|
99
|
-
sucesso: verdadeiro
|
|
100
|
-
aprovado: verdadeiro
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
1
|
+
module exemplos.profile.legal {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Starter do Profile Legal: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois jurisdicao, escopo, limite, fonte normativa, lei, regulamento, documento, citacao, evidencia, revisao_humana, advogado, aprovador, bloqueio, auditoria, retencao, correlacao e motivo."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
type ContextoLegal {
|
|
7
|
+
fields {
|
|
8
|
+
jurisdicao: Texto
|
|
9
|
+
escopo: Texto
|
|
10
|
+
limite: Texto
|
|
11
|
+
fontes: Lista
|
|
12
|
+
revisao_humana: Booleano
|
|
13
|
+
}
|
|
14
|
+
invariants {
|
|
15
|
+
jurisdicao existe
|
|
16
|
+
escopo existe
|
|
17
|
+
limite existe
|
|
18
|
+
fontes existe
|
|
19
|
+
revisao_humana existe
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
task validar_minuta_legal {
|
|
24
|
+
input {
|
|
25
|
+
jurisdicao: Texto required
|
|
26
|
+
escopo: Texto required
|
|
27
|
+
fonte: Texto required
|
|
28
|
+
documento: Texto required
|
|
29
|
+
limite: Texto
|
|
30
|
+
norma: Texto
|
|
31
|
+
lei: Texto
|
|
32
|
+
regulamento: Texto
|
|
33
|
+
citacao: Texto
|
|
34
|
+
evidencia: Texto
|
|
35
|
+
revisao_humana: Texto
|
|
36
|
+
advogado: Texto
|
|
37
|
+
}
|
|
38
|
+
output {
|
|
39
|
+
aprovado: Booleano
|
|
40
|
+
bloqueio: Lista
|
|
41
|
+
}
|
|
42
|
+
rules {
|
|
43
|
+
jurisdicao deve_ser declarada
|
|
44
|
+
escopo deve_ser limitado
|
|
45
|
+
limite deve_ser explicito
|
|
46
|
+
fonte deve_ser normativa
|
|
47
|
+
norma deve_ser verificavel
|
|
48
|
+
lei deve_ser citavel
|
|
49
|
+
regulamento deve_ser citavel
|
|
50
|
+
documento deve_ser anexado
|
|
51
|
+
citacao deve_ser rastreavel
|
|
52
|
+
evidencia deve_ser preservada
|
|
53
|
+
revisao_humana deve_ser obrigatoria
|
|
54
|
+
advogado deve_ser aprovador
|
|
55
|
+
}
|
|
56
|
+
effects {
|
|
57
|
+
auditoria legal_minuta criticidade = media
|
|
58
|
+
}
|
|
59
|
+
authz {
|
|
60
|
+
escopo: legal.validar_minuta
|
|
61
|
+
tenant: opcional
|
|
62
|
+
}
|
|
63
|
+
dados {
|
|
64
|
+
classificacao_padrao: interno
|
|
65
|
+
redacao_log: obrigatoria
|
|
66
|
+
}
|
|
67
|
+
audit {
|
|
68
|
+
evento: exemplos.legal.minuta.validada
|
|
69
|
+
ator: advogado
|
|
70
|
+
correlacao: request_id
|
|
71
|
+
retencao: "180d"
|
|
72
|
+
motivo: obrigatorio
|
|
73
|
+
}
|
|
74
|
+
forbidden {
|
|
75
|
+
parecer_final_sem_revisao_humana
|
|
76
|
+
citacao_inventada
|
|
77
|
+
orientacao_juridica_sem_limite
|
|
78
|
+
}
|
|
79
|
+
execucao {
|
|
80
|
+
idempotencia: verdadeiro
|
|
81
|
+
timeout: "20s"
|
|
82
|
+
retry: "nenhum"
|
|
83
|
+
criticidade_operacional: media
|
|
84
|
+
}
|
|
85
|
+
guarantees {
|
|
86
|
+
aprovado existe
|
|
87
|
+
bloqueio existe
|
|
88
|
+
}
|
|
89
|
+
tests {
|
|
90
|
+
caso "minuta exige fonte e humano" {
|
|
91
|
+
given {
|
|
92
|
+
jurisdicao: "BR"
|
|
93
|
+
escopo: "contrato comercial"
|
|
94
|
+
fonte: "lei e regulamento"
|
|
95
|
+
documento: "documento com citacao e evidencia"
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
expect {
|
|
99
|
+
sucesso: verdadeiro
|
|
100
|
+
aprovado: verdadeiro
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
module exemplos.profile.ops {
|
|
2
|
-
docs {
|
|
3
|
-
resumo: "Starter do Profile Ops: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois runbook, rollback, recuperacao, healthcheck, metricas, logs, traces, observabilidade, incidente, severidade, responsavel, oncall, segredos, acesso e authz."
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
type RunbookOperacional {
|
|
7
|
-
fields {
|
|
8
|
-
runbook: Texto
|
|
9
|
-
rollback: Texto
|
|
10
|
-
healthcheck: Texto
|
|
11
|
-
responsavel: Texto
|
|
12
|
-
severidade: Texto
|
|
13
|
-
}
|
|
14
|
-
invariants {
|
|
15
|
-
runbook existe
|
|
16
|
-
rollback existe
|
|
17
|
-
healthcheck existe
|
|
18
|
-
responsavel existe
|
|
19
|
-
severidade existe
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
task validar_operacao_deploy {
|
|
24
|
-
input {
|
|
25
|
-
runbook: Texto required
|
|
26
|
-
rollback: Texto required
|
|
27
|
-
healthcheck: Texto required
|
|
28
|
-
responsavel: Texto required
|
|
29
|
-
recuperacao: Texto
|
|
30
|
-
metricas: Texto
|
|
31
|
-
logs: Texto
|
|
32
|
-
traces: Texto
|
|
33
|
-
observabilidade: Texto
|
|
34
|
-
incidente: Texto
|
|
35
|
-
severidade: Texto
|
|
36
|
-
segredos: Texto
|
|
37
|
-
acesso: Texto
|
|
38
|
-
authz: Texto
|
|
39
|
-
}
|
|
40
|
-
output {
|
|
41
|
-
operavel: Booleano
|
|
42
|
-
bloqueios: Lista
|
|
43
|
-
}
|
|
44
|
-
rules {
|
|
45
|
-
runbook deve_ser preenchido
|
|
46
|
-
rollback deve_ser testado
|
|
47
|
-
recuperacao deve_ser declarada
|
|
48
|
-
healthcheck deve_ser verificavel
|
|
49
|
-
metricas deve_ser declaradas
|
|
50
|
-
logs deve_ser preservados
|
|
51
|
-
traces deve_ser opcionais
|
|
52
|
-
observabilidade deve_ser suficiente
|
|
53
|
-
incidente deve_ser classificado
|
|
54
|
-
severidade deve_ser definida
|
|
55
|
-
responsavel deve_ser oncall
|
|
56
|
-
segredos deve_ser protegidos
|
|
57
|
-
acesso deve_ser limitado
|
|
58
|
-
authz deve_ser revisado
|
|
59
|
-
}
|
|
60
|
-
effects {
|
|
61
|
-
auditoria ops_deploy criticidade = media
|
|
62
|
-
}
|
|
63
|
-
authz {
|
|
64
|
-
escopo: ops.validar_deploy
|
|
65
|
-
tenant: opcional
|
|
66
|
-
}
|
|
67
|
-
dados {
|
|
68
|
-
classificacao_padrao: interno
|
|
69
|
-
redacao_log: obrigatoria
|
|
70
|
-
}
|
|
71
|
-
audit {
|
|
72
|
-
evento: exemplos.ops.deploy.validado
|
|
73
|
-
ator: operador
|
|
74
|
-
correlacao: request_id
|
|
75
|
-
retencao: "90d"
|
|
76
|
-
motivo: obrigatorio
|
|
77
|
-
}
|
|
78
|
-
forbidden {
|
|
79
|
-
deploy_sem_rollback
|
|
80
|
-
secret_em_log
|
|
81
|
-
incidente_sem_responsavel
|
|
82
|
-
}
|
|
83
|
-
execucao {
|
|
84
|
-
idempotencia: verdadeiro
|
|
85
|
-
timeout: "15s"
|
|
86
|
-
retry: "nenhum"
|
|
87
|
-
compensacao: "rollback"
|
|
88
|
-
criticidade_operacional: media
|
|
89
|
-
}
|
|
90
|
-
guarantees {
|
|
91
|
-
operavel existe
|
|
92
|
-
bloqueios existe
|
|
93
|
-
}
|
|
94
|
-
tests {
|
|
95
|
-
caso "deploy operavel" {
|
|
96
|
-
given {
|
|
97
|
-
runbook: "runbook de incidente com severidade"
|
|
98
|
-
rollback: "rollback testado"
|
|
99
|
-
healthcheck: "healthcheck metricas logs traces"
|
|
100
|
-
responsavel: "oncall"
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
expect {
|
|
104
|
-
sucesso: verdadeiro
|
|
105
|
-
operavel: verdadeiro
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
1
|
+
module exemplos.profile.ops {
|
|
2
|
+
docs {
|
|
3
|
+
resumo: "Starter do Profile Ops: contrato primeiro. Criar, editar ou remover contrato antes de qualquer acao; depois runbook, rollback, recuperacao, healthcheck, metricas, logs, traces, observabilidade, incidente, severidade, responsavel, oncall, segredos, acesso e authz."
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
type RunbookOperacional {
|
|
7
|
+
fields {
|
|
8
|
+
runbook: Texto
|
|
9
|
+
rollback: Texto
|
|
10
|
+
healthcheck: Texto
|
|
11
|
+
responsavel: Texto
|
|
12
|
+
severidade: Texto
|
|
13
|
+
}
|
|
14
|
+
invariants {
|
|
15
|
+
runbook existe
|
|
16
|
+
rollback existe
|
|
17
|
+
healthcheck existe
|
|
18
|
+
responsavel existe
|
|
19
|
+
severidade existe
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
task validar_operacao_deploy {
|
|
24
|
+
input {
|
|
25
|
+
runbook: Texto required
|
|
26
|
+
rollback: Texto required
|
|
27
|
+
healthcheck: Texto required
|
|
28
|
+
responsavel: Texto required
|
|
29
|
+
recuperacao: Texto
|
|
30
|
+
metricas: Texto
|
|
31
|
+
logs: Texto
|
|
32
|
+
traces: Texto
|
|
33
|
+
observabilidade: Texto
|
|
34
|
+
incidente: Texto
|
|
35
|
+
severidade: Texto
|
|
36
|
+
segredos: Texto
|
|
37
|
+
acesso: Texto
|
|
38
|
+
authz: Texto
|
|
39
|
+
}
|
|
40
|
+
output {
|
|
41
|
+
operavel: Booleano
|
|
42
|
+
bloqueios: Lista
|
|
43
|
+
}
|
|
44
|
+
rules {
|
|
45
|
+
runbook deve_ser preenchido
|
|
46
|
+
rollback deve_ser testado
|
|
47
|
+
recuperacao deve_ser declarada
|
|
48
|
+
healthcheck deve_ser verificavel
|
|
49
|
+
metricas deve_ser declaradas
|
|
50
|
+
logs deve_ser preservados
|
|
51
|
+
traces deve_ser opcionais
|
|
52
|
+
observabilidade deve_ser suficiente
|
|
53
|
+
incidente deve_ser classificado
|
|
54
|
+
severidade deve_ser definida
|
|
55
|
+
responsavel deve_ser oncall
|
|
56
|
+
segredos deve_ser protegidos
|
|
57
|
+
acesso deve_ser limitado
|
|
58
|
+
authz deve_ser revisado
|
|
59
|
+
}
|
|
60
|
+
effects {
|
|
61
|
+
auditoria ops_deploy criticidade = media
|
|
62
|
+
}
|
|
63
|
+
authz {
|
|
64
|
+
escopo: ops.validar_deploy
|
|
65
|
+
tenant: opcional
|
|
66
|
+
}
|
|
67
|
+
dados {
|
|
68
|
+
classificacao_padrao: interno
|
|
69
|
+
redacao_log: obrigatoria
|
|
70
|
+
}
|
|
71
|
+
audit {
|
|
72
|
+
evento: exemplos.ops.deploy.validado
|
|
73
|
+
ator: operador
|
|
74
|
+
correlacao: request_id
|
|
75
|
+
retencao: "90d"
|
|
76
|
+
motivo: obrigatorio
|
|
77
|
+
}
|
|
78
|
+
forbidden {
|
|
79
|
+
deploy_sem_rollback
|
|
80
|
+
secret_em_log
|
|
81
|
+
incidente_sem_responsavel
|
|
82
|
+
}
|
|
83
|
+
execucao {
|
|
84
|
+
idempotencia: verdadeiro
|
|
85
|
+
timeout: "15s"
|
|
86
|
+
retry: "nenhum"
|
|
87
|
+
compensacao: "rollback"
|
|
88
|
+
criticidade_operacional: media
|
|
89
|
+
}
|
|
90
|
+
guarantees {
|
|
91
|
+
operavel existe
|
|
92
|
+
bloqueios existe
|
|
93
|
+
}
|
|
94
|
+
tests {
|
|
95
|
+
caso "deploy operavel" {
|
|
96
|
+
given {
|
|
97
|
+
runbook: "runbook de incidente com severidade"
|
|
98
|
+
rollback: "rollback testado"
|
|
99
|
+
healthcheck: "healthcheck metricas logs traces"
|
|
100
|
+
responsavel: "oncall"
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
expect {
|
|
104
|
+
sucesso: verdadeiro
|
|
105
|
+
operavel: verdadeiro
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|