expxdev 0.1.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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -0
  3. package/dist/cli/argumentos.d.ts +22 -0
  4. package/dist/cli/argumentos.js +85 -0
  5. package/dist/cli/argumentos.js.map +1 -0
  6. package/dist/cli/expx-bin.d.ts +2 -0
  7. package/dist/cli/expx-bin.js +40 -0
  8. package/dist/cli/expx-bin.js.map +1 -0
  9. package/dist/cli/expx.d.ts +13 -0
  10. package/dist/cli/expx.js +123 -0
  11. package/dist/cli/expx.js.map +1 -0
  12. package/dist/cli/init-flags.d.ts +34 -0
  13. package/dist/cli/init-flags.js +83 -0
  14. package/dist/cli/init-flags.js.map +1 -0
  15. package/dist/cli/init.d.ts +34 -0
  16. package/dist/cli/init.js +103 -0
  17. package/dist/cli/init.js.map +1 -0
  18. package/dist/cli/principal.d.ts +2 -0
  19. package/dist/cli/principal.js +107 -0
  20. package/dist/cli/principal.js.map +1 -0
  21. package/dist/cli/projeto.d.ts +19 -0
  22. package/dist/cli/projeto.js +28 -0
  23. package/dist/cli/projeto.js.map +1 -0
  24. package/dist/cli/selecao.d.ts +19 -0
  25. package/dist/cli/selecao.js +28 -0
  26. package/dist/cli/selecao.js.map +1 -0
  27. package/dist/cli/selecionar.d.ts +23 -0
  28. package/dist/cli/selecionar.js +45 -0
  29. package/dist/cli/selecionar.js.map +1 -0
  30. package/dist/cli/subcomandos.d.ts +25 -0
  31. package/dist/cli/subcomandos.js +43 -0
  32. package/dist/cli/subcomandos.js.map +1 -0
  33. package/dist/doctor/efeito.d.ts +17 -0
  34. package/dist/doctor/efeito.js +18 -0
  35. package/dist/doctor/efeito.js.map +1 -0
  36. package/dist/doctor/verificadores.d.ts +21 -0
  37. package/dist/doctor/verificadores.js +158 -0
  38. package/dist/doctor/verificadores.js.map +1 -0
  39. package/dist/harness/backup.d.ts +15 -0
  40. package/dist/harness/backup.js +29 -0
  41. package/dist/harness/backup.js.map +1 -0
  42. package/dist/harness/instalar.d.ts +31 -0
  43. package/dist/harness/instalar.js +43 -0
  44. package/dist/harness/instalar.js.map +1 -0
  45. package/dist/harness/opencode.d.ts +18 -0
  46. package/dist/harness/opencode.js +32 -0
  47. package/dist/harness/opencode.js.map +1 -0
  48. package/dist/harness/settings.d.ts +36 -0
  49. package/dist/harness/settings.js +66 -0
  50. package/dist/harness/settings.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.js +9 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/nucleo/busca.d.ts +28 -0
  55. package/dist/nucleo/busca.js +29 -0
  56. package/dist/nucleo/busca.js.map +1 -0
  57. package/dist/nucleo/caminhos.d.ts +21 -0
  58. package/dist/nucleo/caminhos.js +64 -0
  59. package/dist/nucleo/caminhos.js.map +1 -0
  60. package/dist/nucleo/catalogo.d.ts +20 -0
  61. package/dist/nucleo/catalogo.js +50 -0
  62. package/dist/nucleo/catalogo.js.map +1 -0
  63. package/dist/nucleo/integridade.d.ts +20 -0
  64. package/dist/nucleo/integridade.js +75 -0
  65. package/dist/nucleo/integridade.js.map +1 -0
  66. package/dist/nucleo/layout.d.ts +23 -0
  67. package/dist/nucleo/layout.js +73 -0
  68. package/dist/nucleo/layout.js.map +1 -0
  69. package/dist/nucleo/lock.d.ts +61 -0
  70. package/dist/nucleo/lock.js +96 -0
  71. package/dist/nucleo/lock.js.map +1 -0
  72. package/dist/nucleo/versao.d.ts +35 -0
  73. package/dist/nucleo/versao.js +63 -0
  74. package/dist/nucleo/versao.js.map +1 -0
  75. package/dist/parser/conformidade/regras.d.ts +41 -0
  76. package/dist/parser/conformidade/regras.js +209 -0
  77. package/dist/parser/conformidade/regras.js.map +1 -0
  78. package/dist/parser/descoberta/trabalhos.d.ts +35 -0
  79. package/dist/parser/descoberta/trabalhos.js +28 -0
  80. package/dist/parser/descoberta/trabalhos.js.map +1 -0
  81. package/dist/parser/descoberta/varredura.d.ts +4 -0
  82. package/dist/parser/descoberta/varredura.js +79 -0
  83. package/dist/parser/descoberta/varredura.js.map +1 -0
  84. package/dist/parser/esquema/cabecalho.d.ts +60 -0
  85. package/dist/parser/esquema/cabecalho.js +57 -0
  86. package/dist/parser/esquema/cabecalho.js.map +1 -0
  87. package/dist/parser/esquema/enums.d.ts +114 -0
  88. package/dist/parser/esquema/enums.js +64 -0
  89. package/dist/parser/esquema/enums.js.map +1 -0
  90. package/dist/parser/esquema/kinds.d.ts +768 -0
  91. package/dist/parser/esquema/kinds.js +231 -0
  92. package/dist/parser/esquema/kinds.js.map +1 -0
  93. package/dist/parser/leitura/arquivo.d.ts +9 -0
  94. package/dist/parser/leitura/arquivo.js +25 -0
  95. package/dist/parser/leitura/arquivo.js.map +1 -0
  96. package/dist/parser/leitura/frontmatter.d.ts +31 -0
  97. package/dist/parser/leitura/frontmatter.js +77 -0
  98. package/dist/parser/leitura/frontmatter.js.map +1 -0
  99. package/dist/parser/leitura/rejeicao.d.ts +43 -0
  100. package/dist/parser/leitura/rejeicao.js +73 -0
  101. package/dist/parser/leitura/rejeicao.js.map +1 -0
  102. package/dist/parser/projeto/montar.d.ts +62 -0
  103. package/dist/parser/projeto/montar.js +149 -0
  104. package/dist/parser/projeto/montar.js.map +1 -0
  105. package/dist/plugin/atomico.d.ts +13 -0
  106. package/dist/plugin/atomico.js +42 -0
  107. package/dist/plugin/atomico.js.map +1 -0
  108. package/dist/plugin/manifestos.d.ts +38 -0
  109. package/dist/plugin/manifestos.js +57 -0
  110. package/dist/plugin/manifestos.js.map +1 -0
  111. package/dist/plugin/montagem.d.ts +22 -0
  112. package/dist/plugin/montagem.js +30 -0
  113. package/dist/plugin/montagem.js.map +1 -0
  114. package/dist/relatorio/markdown.d.ts +22 -0
  115. package/dist/relatorio/markdown.js +0 -0
  116. package/dist/relatorio/markdown.js.map +1 -0
  117. package/dist/relatorio/pagina.d.ts +22 -0
  118. package/dist/relatorio/pagina.js +338 -0
  119. package/dist/relatorio/pagina.js.map +1 -0
  120. package/dist/servidor/estado.d.ts +16 -0
  121. package/dist/servidor/estado.js +16 -0
  122. package/dist/servidor/estado.js.map +1 -0
  123. package/dist/servidor/http.d.ts +22 -0
  124. package/dist/servidor/http.js +164 -0
  125. package/dist/servidor/http.js.map +1 -0
  126. package/dist/servidor/observador.d.ts +12 -0
  127. package/dist/servidor/observador.js +37 -0
  128. package/dist/servidor/observador.js.map +1 -0
  129. package/dist/servidor/painel.d.ts +24 -0
  130. package/dist/servidor/painel.js +49 -0
  131. package/dist/servidor/painel.js.map +1 -0
  132. package/dist/teste/layouts-fixture.d.ts +16 -0
  133. package/dist/teste/layouts-fixture.js +9 -0
  134. package/dist/teste/layouts-fixture.js.map +1 -0
  135. package/dist/teste/projeto-temporario.d.ts +14 -0
  136. package/dist/teste/projeto-temporario.js +16 -0
  137. package/dist/teste/projeto-temporario.js.map +1 -0
  138. package/dist/teste/repo-fixture.d.ts +27 -0
  139. package/dist/teste/repo-fixture.js +49 -0
  140. package/dist/teste/repo-fixture.js.map +1 -0
  141. package/dist/update/comparar.d.ts +33 -0
  142. package/dist/update/comparar.js +67 -0
  143. package/dist/update/comparar.js.map +1 -0
  144. package/dist/update/compatibilidade.d.ts +19 -0
  145. package/dist/update/compatibilidade.js +36 -0
  146. package/dist/update/compatibilidade.js.map +1 -0
  147. package/dist/update/flags.d.ts +47 -0
  148. package/dist/update/flags.js +123 -0
  149. package/dist/update/flags.js.map +1 -0
  150. package/dist/update/modificacao.d.ts +23 -0
  151. package/dist/update/modificacao.js +36 -0
  152. package/dist/update/modificacao.js.map +1 -0
  153. package/package.json +73 -0
  154. package/ui/dist/assets/index-BmDTogQZ.js +14 -0
  155. package/ui/dist/assets/index-DUzbt2M7.css +1 -0
  156. package/ui/dist/index.html +13 -0
@@ -0,0 +1,231 @@
1
+ import { z } from "zod";
2
+ import { DataIso, Estagio, Evidencia, ExpxTool, ModoCausaRaiz, Severidade, StatusDecisao, StatusTask, StatusTrabalho, Suite, TextoUmaLinha, TipoOcorrencia, TipoTrabalho, Veredito, } from "./enums.js";
3
+ import { Kind, VERSAO_SUPORTADA } from "./cabecalho.js";
4
+ const comum = {
5
+ expx_schema: z.literal(VERSAO_SUPORTADA),
6
+ expx_tool: ExpxTool,
7
+ trabalho_id: z.string().trim().min(1),
8
+ };
9
+ const nulavel = (t) => t.nullable();
10
+ /**
11
+ * O campo `arquivos` da task tem DUAS formas nas fontes (lacuna L-04):
12
+ * o contrato declara lista plana, as duas skills gravam `{cria, altera}`.
13
+ * A decisão D-01 aceita as duas e normaliza para o mapa — é o superconjunto,
14
+ * então nenhum arquivo real se perde, seja qual for o lado que se atualize.
15
+ */
16
+ export const Arquivos = z
17
+ .union([
18
+ z.object({
19
+ cria: z.array(z.string()).default([]),
20
+ altera: z.array(z.string()).default([]),
21
+ }),
22
+ z.array(z.string()).transform((lista) => ({ cria: lista, altera: [] })),
23
+ ])
24
+ .transform((v) => ({ cria: v.cria ?? [], altera: v.altera ?? [] }));
25
+ export const Task = z.object({
26
+ id: z.string(),
27
+ titulo: z.string(),
28
+ fase: z.string(),
29
+ status: StatusTask,
30
+ objetivo: z.string(),
31
+ arquivos: Arquivos,
32
+ /**
33
+ * Obrigatório só na primeira task de bug da runx; ausente nos arquivos da
34
+ * sprintx, que não lista o campo no contrato de task (decisão D-07).
35
+ */
36
+ teste_regressao: nulavel(z.string()).optional(),
37
+ /** Obrigatórios e não vazios — a ausência é violação, não rejeição (D-03/D-04). */
38
+ teste_integracao: nulavel(z.string()).optional(),
39
+ teste_funcional: nulavel(z.string()).optional(),
40
+ criterio_aceite: nulavel(z.string()).optional(),
41
+ depende_de: z.array(z.string()).default([]),
42
+ paralelizavel: z.boolean(),
43
+ concluida_em: nulavel(DataIso),
44
+ suite: Suite,
45
+ });
46
+ export const Orquestrador = z.object({
47
+ ...comum,
48
+ kind: z.literal("orquestrador"),
49
+ titulo: z.string(),
50
+ tipo_trabalho: TipoTrabalho,
51
+ tipo_ocorrencia: nulavel(TipoOcorrencia),
52
+ estagio: Estagio,
53
+ status: StatusTrabalho,
54
+ criado_em: DataIso,
55
+ atualizado_em: DataIso,
56
+ concluido_em: nulavel(DataIso),
57
+ sprints: z.array(z.string()).default([]),
58
+ caminho_critico: z.array(z.string()).default([]),
59
+ });
60
+ export const Sprint = z.object({
61
+ ...comum,
62
+ kind: z.literal("sprint"),
63
+ sprint_id: z.string(),
64
+ titulo: z.string(),
65
+ status: StatusTrabalho,
66
+ criterio_saida: nulavel(z.string()).optional(),
67
+ fases: z.array(z.string()).default([]),
68
+ riscos: z.array(z.string()).default([]),
69
+ atualizado_em: DataIso,
70
+ });
71
+ export const Fase = z.object({
72
+ id: z.string(),
73
+ titulo: z.string(),
74
+ status: StatusTrabalho,
75
+ criterio_saida: nulavel(z.string()).optional(),
76
+ paralelizavel: z.boolean(),
77
+ paralela_com: z.array(z.string()).default([]),
78
+ tasks: z.array(z.string()).default([]),
79
+ });
80
+ export const Fases = z.object({
81
+ ...comum,
82
+ kind: z.literal("fases"),
83
+ sprint_id: z.string(),
84
+ atualizado_em: DataIso,
85
+ fases: z.array(Fase).default([]),
86
+ });
87
+ export const Tasks = z.object({
88
+ ...comum,
89
+ kind: z.literal("tasks"),
90
+ sprint_id: z.string(),
91
+ atualizado_em: DataIso,
92
+ tasks: z.array(Task).default([]),
93
+ });
94
+ export const Bloqueio = z.object({
95
+ id: z.string(),
96
+ task: nulavel(z.string()),
97
+ aberto_em: DataIso,
98
+ resolvido_em: nulavel(DataIso),
99
+ descricao: z.string(),
100
+ });
101
+ export const Bloqueios = z.object({
102
+ ...comum,
103
+ kind: z.literal("bloqueios"),
104
+ atualizado_em: DataIso,
105
+ bloqueios: z.array(Bloqueio).default([]),
106
+ });
107
+ /** Kind exclusivo da sprintx; não consta do contrato (lacuna L-02, decisão D-02). */
108
+ export const Decisoes = z.object({
109
+ ...comum,
110
+ kind: z.literal("decisoes"),
111
+ atualizado_em: DataIso,
112
+ decisoes: z
113
+ .array(z.object({
114
+ id: z.string(),
115
+ decisao: z.string(),
116
+ alternativa_descartada: nulavel(z.string()),
117
+ motivo: nulavel(z.string()),
118
+ status: StatusDecisao,
119
+ bloqueante: z.boolean(),
120
+ }))
121
+ .default([]),
122
+ });
123
+ export const Ocorrencia = z.object({
124
+ ...comum,
125
+ kind: z.literal("ocorrencia"),
126
+ titulo: z.string(),
127
+ tipo_ocorrencia: TipoOcorrencia,
128
+ recebido_em: DataIso,
129
+ origem: nulavel(z.string()),
130
+ tem_reproducao: z.boolean(),
131
+ modulo_afetado: z.array(z.string()).default([]),
132
+ /** O contrato não lista a chave neste kind; a runx lista (decisão D-32). */
133
+ atualizado_em: DataIso.optional(),
134
+ });
135
+ export const CausaRaiz = z.object({
136
+ ...comum,
137
+ kind: z.literal("causa_raiz"),
138
+ modo: ModoCausaRaiz,
139
+ /** null quando `modo: analise_impacto` — não há causa a comprovar. */
140
+ comprovada: nulavel(z.boolean()),
141
+ evidencia: nulavel(Evidencia),
142
+ arquivos_impactados: z.array(z.string()).default([]),
143
+ decisoes: z
144
+ .array(z.object({
145
+ id: z.string(),
146
+ decisao: z.string(),
147
+ alternativa_descartada: nulavel(z.string()).optional(),
148
+ motivo: nulavel(z.string()).optional(),
149
+ }))
150
+ .default([]),
151
+ atualizado_em: DataIso,
152
+ });
153
+ export const Qa = z.object({
154
+ ...comum,
155
+ kind: z.literal("qa"),
156
+ veredito: Veredito,
157
+ executado_em: DataIso,
158
+ achados: z
159
+ .array(z.object({
160
+ severidade: Severidade,
161
+ arquivo: nulavel(z.string()).optional(),
162
+ problema: z.string(),
163
+ correcao_sugerida: nulavel(z.string()).optional(),
164
+ }))
165
+ .default([]),
166
+ atualizado_em: DataIso.optional(),
167
+ });
168
+ export const BaseIndice = z.object({
169
+ ...comum,
170
+ kind: z.literal("base_indice"),
171
+ atualizado_em: DataIso,
172
+ areas: z
173
+ .array(z.object({ arquivo: z.string(), titulo: z.string(), lacunas: z.number().int() }))
174
+ .default([]),
175
+ });
176
+ export const RelatorioTecnico = z.object({
177
+ ...comum,
178
+ kind: z.literal("relatorio_tecnico"),
179
+ titulo: z.string(),
180
+ tipo_ocorrencia: TipoOcorrencia,
181
+ fechado_em: DataIso,
182
+ modulo_afetado: z.array(z.string()).default([]),
183
+ arquivos_alterados: z.array(z.string()).default([]),
184
+ testes_adicionados: z.number().int(),
185
+ });
186
+ /** Sem `arquivos_alterados` nem `testes_adicionados`: é o arquivo do cliente. */
187
+ export const RelatorioUso = z.object({
188
+ ...comum,
189
+ kind: z.literal("relatorio_uso"),
190
+ titulo: z.string(),
191
+ tipo_ocorrencia: TipoOcorrencia,
192
+ fechado_em: DataIso,
193
+ modulo_afetado: z.array(z.string()).default([]),
194
+ });
195
+ /** Único kind sem `trabalho_id`: o índice é do sistema inteiro. */
196
+ export const RelatoriosIndice = z.object({
197
+ expx_schema: z.literal(VERSAO_SUPORTADA),
198
+ expx_tool: ExpxTool,
199
+ kind: z.literal("relatorios_indice"),
200
+ atualizado_em: DataIso,
201
+ entradas: z
202
+ .array(z.object({
203
+ data: DataIso,
204
+ oc_id: z.string(),
205
+ tipo: z.string(),
206
+ modulo: nulavel(z.string()).optional(),
207
+ resumo: z.string(),
208
+ pasta: z.string(),
209
+ }))
210
+ .default([]),
211
+ });
212
+ const POR_KIND = {
213
+ orquestrador: Orquestrador,
214
+ sprint: Sprint,
215
+ fases: Fases,
216
+ tasks: Tasks,
217
+ bloqueios: Bloqueios,
218
+ decisoes: Decisoes,
219
+ ocorrencia: Ocorrencia,
220
+ causa_raiz: CausaRaiz,
221
+ qa: Qa,
222
+ base_indice: BaseIndice,
223
+ relatorio_tecnico: RelatorioTecnico,
224
+ relatorio_uso: RelatorioUso,
225
+ relatorios_indice: RelatoriosIndice,
226
+ };
227
+ export function esquemaDoKind(kind) {
228
+ return POR_KIND[kind];
229
+ }
230
+ export { TextoUmaLinha };
231
+ //# sourceMappingURL=kinds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kinds.js","sourceRoot":"","sources":["../../../src/parser/esquema/kinds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { MotivoRejeicao, type Resultado } from "./rejeicao.js";
2
+ /**
3
+ * Lê um arquivo do disco e o classifica. Erro de I/O (arquivo apagado entre a
4
+ * varredura e a leitura, permissão negada) vira rejeição como qualquer outra:
5
+ * o painel nunca cai por causa de um arquivo.
6
+ */
7
+ export declare function lerArquivoDeEstado(caminho: string): Resultado;
8
+ export { MotivoRejeicao };
9
+ export type { Resultado };
@@ -0,0 +1,25 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { classificar, MotivoRejeicao } from "./rejeicao.js";
3
+ /**
4
+ * Lê um arquivo do disco e o classifica. Erro de I/O (arquivo apagado entre a
5
+ * varredura e a leitura, permissão negada) vira rejeição como qualquer outra:
6
+ * o painel nunca cai por causa de um arquivo.
7
+ */
8
+ export function lerArquivoDeEstado(caminho) {
9
+ let conteudo;
10
+ try {
11
+ conteudo = readFileSync(caminho, "utf8");
12
+ }
13
+ catch (e) {
14
+ return {
15
+ tipo: "rejeitado",
16
+ arquivo: caminho,
17
+ motivo: MotivoRejeicao.SemFrontmatter,
18
+ detalhe: `nao foi possivel ler o arquivo: ${e.message}`,
19
+ linha: null,
20
+ };
21
+ }
22
+ return classificar(caminho, conteudo);
23
+ }
24
+ export { MotivoRejeicao };
25
+ //# sourceMappingURL=arquivo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arquivo.js","sourceRoot":"","sources":["../../../src/parser/leitura/arquivo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,cAAc,CAAC,cAAc;YACrC,OAAO,EAAE,mCAAoC,CAAW,CAAC,OAAO,EAAE;YAClE,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Leitura do bloco de frontmatter com posição de linha.
3
+ *
4
+ * Por que não gray-matter aqui: ele devolve o YAML já desserializado, sem
5
+ * posições, e a tela de conformidade precisa apontar arquivo E linha. Além
6
+ * disso, gray-matter mantém um cache global indexado pelo conteúdo — na
7
+ * segunda leitura da mesma string com YAML inválido ele deixa de lançar e
8
+ * devolve `data: {}` em silêncio (ver 00-BLOQUEIOS.md, B-01). Usar o `yaml`
9
+ * direto elimina os dois problemas de uma vez.
10
+ */
11
+ export type FalhaLeitura = {
12
+ ok: false;
13
+ tipo: "sem_frontmatter";
14
+ motivo: string;
15
+ linha: number | null;
16
+ } | {
17
+ ok: false;
18
+ tipo: "yaml_invalido";
19
+ motivo: string;
20
+ linha: number | null;
21
+ };
22
+ export type SucessoLeitura = {
23
+ ok: true;
24
+ dados: unknown;
25
+ /** A prosa abaixo do frontmatter — o painel a exibe nos relatórios. */
26
+ corpo: string;
27
+ /** Caminho do campo → linha 1-based. Itens de lista viram `tasks.0`, `tasks.1`… */
28
+ linhas: Map<string, number>;
29
+ };
30
+ export type ResultadoLeitura = SucessoLeitura | FalhaLeitura;
31
+ export declare function lerFrontmatter(conteudo: string): ResultadoLeitura;
@@ -0,0 +1,77 @@
1
+ import { parseDocument, isMap, isSeq } from "yaml";
2
+ const DELIM = /^---\r?\n/;
3
+ /** Separa o bloco YAML do corpo, exigindo que ele seja a primeira coisa do arquivo (regra 1). */
4
+ function extrairBloco(conteudo) {
5
+ // BOM é removido antes de qualquer coisa; preâmbulo, não (decisão D-25).
6
+ const texto = conteudo.replace(/^/, "");
7
+ if (!DELIM.test(texto))
8
+ return null;
9
+ const inicio = texto.indexOf("\n") + 1;
10
+ const fim = texto.indexOf("\n---", inicio);
11
+ if (fim === -1)
12
+ return null;
13
+ const depois = texto.indexOf("\n", fim + 1);
14
+ return {
15
+ yaml: texto.slice(inicio, fim),
16
+ corpo: depois === -1 ? "" : texto.slice(depois + 1).replace(/^\s*\n/, ""),
17
+ offset: 1,
18
+ };
19
+ }
20
+ /** Linha 1-based de um offset de caractere dentro do bloco. */
21
+ function linhaDe(yaml, offset, base) {
22
+ let linha = base + 1;
23
+ for (let i = 0; i < offset && i < yaml.length; i++) {
24
+ if (yaml[i] === "\n")
25
+ linha++;
26
+ }
27
+ return linha;
28
+ }
29
+ function mapearLinhas(no, yaml, base, prefixo, destino) {
30
+ if (no === null || no === undefined)
31
+ return;
32
+ if (isMap(no)) {
33
+ for (const par of no.items) {
34
+ const chave = String(par.key?.value ?? "");
35
+ const caminho = prefixo ? `${prefixo}.${chave}` : chave;
36
+ const range = par.key?.range;
37
+ if (range)
38
+ destino.set(caminho, linhaDe(yaml, range[0], base));
39
+ mapearLinhas(par.value, yaml, base, caminho, destino);
40
+ }
41
+ return;
42
+ }
43
+ if (isSeq(no)) {
44
+ no.items.forEach((item, i) => {
45
+ const caminho = `${prefixo}.${i}`;
46
+ const range = item?.range;
47
+ if (range)
48
+ destino.set(caminho, linhaDe(yaml, range[0], base));
49
+ mapearLinhas(item, yaml, base, caminho, destino);
50
+ });
51
+ }
52
+ }
53
+ export function lerFrontmatter(conteudo) {
54
+ const bloco = extrairBloco(conteudo);
55
+ if (bloco === null) {
56
+ return {
57
+ ok: false,
58
+ tipo: "sem_frontmatter",
59
+ motivo: "o bloco YAML precisa ser a primeira coisa do arquivo, entre linhas ---",
60
+ linha: null,
61
+ };
62
+ }
63
+ const doc = parseDocument(bloco.yaml, { keepSourceTokens: true });
64
+ if (doc.errors.length > 0) {
65
+ const erro = doc.errors[0];
66
+ return {
67
+ ok: false,
68
+ tipo: "yaml_invalido",
69
+ motivo: erro?.message ?? "YAML invalido",
70
+ linha: erro?.linePos?.[0]?.line != null ? erro.linePos[0].line + bloco.offset : null,
71
+ };
72
+ }
73
+ const linhas = new Map();
74
+ mapearLinhas(doc.contents, bloco.yaml, bloco.offset, "", linhas);
75
+ return { ok: true, dados: doc.toJS(), corpo: bloco.corpo, linhas };
76
+ }
77
+ //# sourceMappingURL=frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../src/parser/leitura/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAa,MAAM,MAAM,CAAC;AA4B9D,MAAM,KAAK,GAAG,WAAW,CAAC;AAE1B,iGAAiG;AACjG,SAAS,YAAY,CAAC,QAAgB;IACpC,yEAAyE;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;QAC9B,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACzE,MAAM,EAAE,CAAC;KACV,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,SAAS,OAAO,CAAC,IAAY,EAAE,MAAc,EAAE,IAAY;IACzD,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,EAAe,EAAE,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,OAA4B;IAC9G,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO;IAC5C,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAE,GAAG,CAAC,GAA2B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YACxD,MAAM,KAAK,GAAI,GAAG,CAAC,GAA4C,EAAE,KAAK,CAAC;YACvE,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,GAAG,CAAC,KAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACd,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,GAAG,OAAO,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAI,IAA6C,EAAE,KAAK,CAAC;YACpE,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,IAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,wEAAwE;YAChF,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,IAAI,EAAE,OAAO,IAAI,eAAe;YACxC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;SACrF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,YAAY,CAAC,GAAG,CAAC,QAAuB,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAEhF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { Kind } from "../esquema/cabecalho.js";
2
+ /**
3
+ * Rejeição x violação (decisões D-03 e D-04).
4
+ *
5
+ * REJEIÇÃO é falha de leitura: o arquivo não pôde ser interpretado como
6
+ * estado válido, então ele não entra no painel — vai para a tela "fora do
7
+ * schema" com o motivo. VIOLAÇÃO é outra coisa: o arquivo foi lido, entrou
8
+ * no painel, e o conteúdo desobedece uma regra do método. Ver conformidade/.
9
+ *
10
+ * Chave obrigatória ausente é VIOLAÇÃO, não rejeição, desde que o kind seja
11
+ * identificável — o painel existe para mostrar o defeito, não para esconder
12
+ * o arquivo (D-04).
13
+ */
14
+ export declare const MotivoRejeicao: {
15
+ readonly SemFrontmatter: "sem frontmatter valido";
16
+ readonly YamlInvalido: "YAML invalido";
17
+ readonly KindDesconhecido: "kind desconhecido";
18
+ readonly VersaoFutura: "versao de schema futura";
19
+ readonly VersaoAusente: "expx_schema ausente ou nao numerico";
20
+ readonly EstruturaInvalida: "estrutura incompativel com o kind";
21
+ };
22
+ export type MotivoRejeicao = (typeof MotivoRejeicao)[keyof typeof MotivoRejeicao];
23
+ export type Rejeicao = {
24
+ tipo: "rejeitado";
25
+ arquivo: string;
26
+ motivo: MotivoRejeicao;
27
+ detalhe: string;
28
+ linha: number | null;
29
+ };
30
+ export type Aceito = {
31
+ tipo: "aceito";
32
+ arquivo: string;
33
+ kind: Kind;
34
+ dados: Record<string, unknown>;
35
+ corpo: string;
36
+ linhas: Map<string, number>;
37
+ };
38
+ export type Resultado = Aceito | Rejeicao;
39
+ /**
40
+ * Lê um arquivo candidato e devolve SEMPRE aceito ou rejeitado — nunca lança.
41
+ * É a garantia de que nenhum arquivo do projeto observado derruba o servidor.
42
+ */
43
+ export declare function classificar(arquivo: string, conteudo: string): Resultado;
@@ -0,0 +1,73 @@
1
+ import { lerFrontmatter } from "./frontmatter.js";
2
+ import { esquemaDoKind } from "../esquema/kinds.js";
3
+ import { Kind, VERSAO_SUPORTADA, lerKind, lerVersao } from "../esquema/cabecalho.js";
4
+ /**
5
+ * Rejeição x violação (decisões D-03 e D-04).
6
+ *
7
+ * REJEIÇÃO é falha de leitura: o arquivo não pôde ser interpretado como
8
+ * estado válido, então ele não entra no painel — vai para a tela "fora do
9
+ * schema" com o motivo. VIOLAÇÃO é outra coisa: o arquivo foi lido, entrou
10
+ * no painel, e o conteúdo desobedece uma regra do método. Ver conformidade/.
11
+ *
12
+ * Chave obrigatória ausente é VIOLAÇÃO, não rejeição, desde que o kind seja
13
+ * identificável — o painel existe para mostrar o defeito, não para esconder
14
+ * o arquivo (D-04).
15
+ */
16
+ export const MotivoRejeicao = {
17
+ SemFrontmatter: "sem frontmatter valido",
18
+ YamlInvalido: "YAML invalido",
19
+ KindDesconhecido: "kind desconhecido",
20
+ VersaoFutura: "versao de schema futura",
21
+ VersaoAusente: "expx_schema ausente ou nao numerico",
22
+ EstruturaInvalida: "estrutura incompativel com o kind",
23
+ };
24
+ function rejeitar(arquivo, motivo, detalhe, linha = null) {
25
+ return { tipo: "rejeitado", arquivo, motivo, detalhe, linha };
26
+ }
27
+ /**
28
+ * Lê um arquivo candidato e devolve SEMPRE aceito ou rejeitado — nunca lança.
29
+ * É a garantia de que nenhum arquivo do projeto observado derruba o servidor.
30
+ */
31
+ export function classificar(arquivo, conteudo) {
32
+ let leitura;
33
+ try {
34
+ leitura = lerFrontmatter(conteudo);
35
+ }
36
+ catch (e) {
37
+ // rede de segurança: nem o parser de YAML deve conseguir derrubar o painel
38
+ return rejeitar(arquivo, MotivoRejeicao.YamlInvalido, String(e), null);
39
+ }
40
+ if (!leitura.ok) {
41
+ const motivo = leitura.tipo === "sem_frontmatter"
42
+ ? MotivoRejeicao.SemFrontmatter
43
+ : MotivoRejeicao.YamlInvalido;
44
+ return rejeitar(arquivo, motivo, leitura.motivo, leitura.linha);
45
+ }
46
+ const versao = lerVersao(leitura.dados);
47
+ if (versao === null) {
48
+ return rejeitar(arquivo, MotivoRejeicao.VersaoAusente, "o arquivo nao declara expx_schema", leitura.linhas.get("expx_schema") ?? null);
49
+ }
50
+ if (versao > VERSAO_SUPORTADA) {
51
+ return rejeitar(arquivo, MotivoRejeicao.VersaoFutura, `arquivo gravado no schema ${versao}; este painel le ate o ${VERSAO_SUPORTADA}. Atualize o painel.`, leitura.linhas.get("expx_schema") ?? null);
52
+ }
53
+ const kind = lerKind(leitura.dados);
54
+ if (kind === null) {
55
+ const bruto = leitura.dados?.["kind"];
56
+ return rejeitar(arquivo, MotivoRejeicao.KindDesconhecido, `kind ${JSON.stringify(bruto)} nao existe no contrato`, leitura.linhas.get("kind") ?? null);
57
+ }
58
+ const r = esquemaDoKind(kind).safeParse(leitura.dados);
59
+ if (!r.success) {
60
+ const primeiro = r.error.issues[0];
61
+ const caminho = primeiro?.path.join(".") ?? "";
62
+ return rejeitar(arquivo, MotivoRejeicao.EstruturaInvalida, `${caminho ? caminho + ": " : ""}${primeiro?.message ?? "estrutura invalida"}`, leitura.linhas.get(caminho) ?? leitura.linhas.get("kind") ?? null);
63
+ }
64
+ return {
65
+ tipo: "aceito",
66
+ arquivo,
67
+ kind,
68
+ dados: r.data,
69
+ corpo: leitura.corpo,
70
+ linhas: leitura.linhas,
71
+ };
72
+ }
73
+ //# sourceMappingURL=rejeicao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejeicao.js","sourceRoot":"","sources":["../../../src/parser/leitura/rejeicao.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { type Trabalho } from "../descoberta/trabalhos.js";
2
+ import type { Rejeicao } from "../leitura/rejeicao.js";
3
+ import type { Fase as FaseYaml, Task, Bloqueio } from "../esquema/kinds.js";
4
+ import type { StatusTrabalho } from "../esquema/enums.js";
5
+ /** Uma task já situada no seu arquivo, para a conformidade poder apontar arquivo e linha. */
6
+ export type TaskSituada = Task & {
7
+ arquivo: string;
8
+ linha: number | null;
9
+ trabalho_id: string;
10
+ sprint_id: string;
11
+ };
12
+ export type FaseMontada = Omit<FaseYaml, "tasks"> & {
13
+ tasks: TaskSituada[];
14
+ progresso: number;
15
+ arquivo: string;
16
+ linha: number | null;
17
+ };
18
+ export type SprintMontada = {
19
+ sprint_id: string;
20
+ titulo: string;
21
+ status: StatusTrabalho;
22
+ criterio_saida: string | null;
23
+ riscos: string[];
24
+ fases: FaseMontada[];
25
+ tasks: TaskSituada[];
26
+ progresso: number;
27
+ arquivo: string | null;
28
+ linha: number | null;
29
+ };
30
+ export type TrabalhoMontado = Omit<Trabalho, "sprints"> & {
31
+ /** As pastas sprint-NN encontradas no disco, já montadas (o Trabalho cru traz só os ids). */
32
+ sprints: SprintMontada[];
33
+ /** A lista `sprints:` declarada no ORQUESTRADOR, preservada para conferência. */
34
+ sprints_declaradas: string[];
35
+ progresso: number;
36
+ bloqueios: BloqueioSituado[];
37
+ };
38
+ export type BloqueioSituado = Bloqueio & {
39
+ aberto: boolean;
40
+ trabalho_id: string;
41
+ arquivo: string;
42
+ linha: number | null;
43
+ };
44
+ export type EntradaHistorico = {
45
+ oc_id: string;
46
+ titulo: string;
47
+ tipo_ocorrencia: string;
48
+ fechado_em: string;
49
+ modulo_afetado: string[];
50
+ pasta: string;
51
+ tecnico: Record<string, unknown> | null;
52
+ uso: Record<string, unknown> | null;
53
+ };
54
+ export type Projeto = {
55
+ raiz: string;
56
+ trabalhos: TrabalhoMontado[];
57
+ bloqueios: BloqueioSituado[];
58
+ historico: EntradaHistorico[];
59
+ rejeicoes: Rejeicao[];
60
+ lido_em: string;
61
+ };
62
+ export declare function montarProjeto(raiz: string, agora?: Date): Projeto;