@semacode/cli 3.8.4 → 3.8.5

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.
@@ -5,6 +5,7 @@ export interface DocumentoPlanejado {
5
5
  tipo: TipoDocumentoMudanca;
6
6
  motivo: string;
7
7
  permitirCriacao: boolean;
8
+ obrigatoriedade?: "bloqueante" | "recomendada";
8
9
  }
9
10
  export interface DocumentoObrigatorioMudanca {
10
11
  caminho: string;
@@ -20,6 +21,7 @@ export interface DocumentoObrigatorioMudanca {
20
21
  template?: string;
21
22
  templatePendente?: boolean;
22
23
  substancia?: boolean;
24
+ obrigatoriedade: "bloqueante" | "recomendada";
23
25
  }
24
26
  export interface BloqueioDocumentacaoMudanca {
25
27
  tipo: "documentacao_ausente" | "leitura_obrigatoria_nao_comprovada" | "documentacao_template_cru" | "documentacao_sem_substancia" | "arquivo_monolitico" | "codigo_governado_sem_cabecalho";
@@ -38,6 +40,7 @@ export interface ResultadoDocumentacaoObrigatoria {
38
40
  leituraObrigatoria: DocumentoObrigatorioMudanca[];
39
41
  docsAusentes: DocumentoObrigatorioMudanca[];
40
42
  docsCriadas: DocumentoObrigatorioMudanca[];
43
+ leituraRecomendada: DocumentoObrigatorioMudanca[];
41
44
  bloqueios: BloqueioDocumentacaoMudanca[];
42
45
  instrucoes: string[];
43
46
  }
@@ -45,6 +48,7 @@ export interface ResultadoVerificacaoDocumentacaoMudanca {
45
48
  sucesso: boolean;
46
49
  baseProjeto: string;
47
50
  intencao: string;
51
+ leituraRecomendada: DocumentoObrigatorioMudanca[];
48
52
  categorias: string[];
49
53
  docsLidas: string[];
50
54
  leituraObrigatoria: DocumentoObrigatorioMudanca[];
@@ -51,7 +51,7 @@ export async function resolverDocumentacaoObrigatoria(opcoes) {
51
51
  await adicionarDocsRaizExistentes(baseProjeto, registrar);
52
52
  for (const regra of REGRAS_DOCUMENTACAO.filter((item) => categorias.includes(item.categoria))) {
53
53
  for (const doc of regra.docs) {
54
- registrar(doc);
54
+ registrar({ ...doc, obrigatoriedade: "recomendada" });
55
55
  }
56
56
  }
57
57
  await adicionarReadmesDeArquivos(baseProjeto, arquivosAlvo, registrar);
@@ -87,6 +87,7 @@ export async function resolverDocumentacaoObrigatoria(opcoes) {
87
87
  criado,
88
88
  criacaoAutomatica: doc.permitirCriacao,
89
89
  obrigatorio: true,
90
+ obrigatoriedade: doc.obrigatoriedade ?? "bloqueante",
90
91
  template: existe ? undefined : template,
91
92
  };
92
93
  if (existe) {
@@ -101,7 +102,7 @@ export async function resolverDocumentacaoObrigatoria(opcoes) {
101
102
  }
102
103
  const docsAusentes = leituraObrigatoria.filter((doc) => !doc.existe);
103
104
  const docsCriadas = leituraObrigatoria.filter((doc) => doc.criado);
104
- const bloqueios = docsAusentes.map((doc) => ({
105
+ const bloqueios = docsAusentes.filter((doc) => doc.obrigatoriedade !== "recomendada").map((doc) => ({
105
106
  tipo: "documentacao_ausente",
106
107
  severidade: 4,
107
108
  caminho: doc.relativo,
@@ -118,6 +119,9 @@ export async function resolverDocumentacaoObrigatoria(opcoes) {
118
119
  leituraObrigatoria,
119
120
  docsAusentes,
120
121
  docsCriadas,
122
+ leituraRecomendada: leituraObrigatoria
123
+ .filter((doc) => doc.obrigatoriedade === "recomendada")
124
+ .map(compactarDocumentoObrigatorio),
121
125
  bloqueios,
122
126
  instrucoes: [
123
127
  "A IA deve ler todos os itens de leituraObrigatoria antes de executar a mudanca.",
@@ -149,9 +153,9 @@ export async function verificarDocumentacaoMudanca(opcoes) {
149
153
  });
150
154
  const docsLidas = [...new Set((opcoes.docsLidas ?? []).map((doc) => normalizarDocLida(baseProjeto, doc)).filter(Boolean))];
151
155
  const setDocsLidas = new Set(docsLidas);
152
- const docsNaoLidas = impacto.leituraObrigatoria.filter((doc) => doc.existe && !setDocsLidas.has(doc.relativo));
153
- const docsTemplatePendentes = impacto.leituraObrigatoria.filter((doc) => (doc.existe && doc.templatePendente && setDocsLidas.has(doc.relativo)));
154
- const docsSemSubstancia = impacto.leituraObrigatoria.filter((doc) => (doc.existe && !doc.templatePendente && doc.substancia === false));
156
+ const docsNaoLidas = impacto.leituraObrigatoria.filter((doc) => (doc.existe && doc.obrigatoriedade !== "recomendada" && !setDocsLidas.has(doc.relativo)));
157
+ const docsTemplatePendentes = impacto.leituraObrigatoria.filter((doc) => (doc.existe && doc.obrigatoriedade !== "recomendada" && doc.templatePendente && setDocsLidas.has(doc.relativo)));
158
+ const docsSemSubstancia = impacto.leituraObrigatoria.filter((doc) => (doc.existe && doc.obrigatoriedade !== "recomendada" && !doc.templatePendente && doc.substancia === false));
155
159
  const diagnosticosOrcamento = await emitirDiagnosticosArquivosOrcamento({
156
160
  baseProjeto,
157
161
  arquivos: opcoes.arquivosAlvo ?? [],
@@ -201,6 +205,7 @@ export async function verificarDocumentacaoMudanca(opcoes) {
201
205
  intencao: opcoes.intencao,
202
206
  categorias: impacto.categorias,
203
207
  docsLidas,
208
+ leituraRecomendada: impacto.leituraRecomendada,
204
209
  leituraObrigatoria: impacto.leituraObrigatoria.map(compactarDocumentoObrigatorio),
205
210
  docsNaoLidas: docsNaoLidas.map(compactarDocumentoObrigatorio),
206
211
  docsAusentes: impacto.docsAusentes.map(compactarDocumentoObrigatorio),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semacode/cli",
3
- "version": "3.8.4",
3
+ "version": "3.8.5",
4
4
  "description": "Local-first semantic governance CLI for AI agents, proven with Claude, Codex, zCode (GLM) and Kimi: contracts, drift, impact, docs gates, and code generation.",
5
5
  "type": "module",
6
6
  "icon": "logo.png",