sabia 2.0.0-beta.1 → 2.0.1
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/compilar.mjs +6 -3
- package/package.json +1 -1
- package/sabia.mjs +1 -2
package/compilar.mjs
CHANGED
|
@@ -24,6 +24,7 @@ const ancoras = (texto) => new Set([...texto.matchAll(/^#+ (.+)$/gm)].map((m) =>
|
|
|
24
24
|
|
|
25
25
|
export const VIZINHOS = "## Entrada: vizinhos";
|
|
26
26
|
export const SPRINT = ["exige", "nao"];
|
|
27
|
+
export const BRANCH = ["fatia", "nao"];
|
|
27
28
|
|
|
28
29
|
/** As linhas "- <estado> → <destino>" da seção Entrada: vizinhos do corpo do mestre (null sem a seção). */
|
|
29
30
|
function vizinhos(corpo, pulo) {
|
|
@@ -191,9 +192,10 @@ export function validar(m) {
|
|
|
191
192
|
}
|
|
192
193
|
for (const x of fl.passos) {
|
|
193
194
|
if (x.id === "grafo") e(fl.arq, 2, "passo grafo: id reservado (o compilador gera references/<fluxo>/grafo.md)");
|
|
194
|
-
if (x.id === "entrada" && !x.de) e(fl.arq, 2, 'passo entrada: id reservado ao passo compartilhado → {"id": "entrada", "de": "entrada", "sprint": "exige|nao"}');
|
|
195
|
+
if (x.id === "entrada" && !x.de) e(fl.arq, 2, 'passo entrada: id reservado ao passo compartilhado → {"id": "entrada", "de": "entrada", "sprint": "exige|nao", "branch": "fatia|nao"}');
|
|
195
196
|
if (x.de) {
|
|
196
197
|
if (!SPRINT.includes(x.sprint)) e(fl.arq, 2, `passo ${x.id}: sprint "${x.sprint ?? ""}" (use ${SPRINT.join(" ou ")})`);
|
|
198
|
+
if (!BRANCH.includes(x.branch)) e(fl.arq, 2, `passo ${x.id}: branch "${x.branch ?? ""}" (use ${BRANCH.join(" ou ")})`);
|
|
197
199
|
if (fs.existsSync(path.join(path.dirname(fl.arq), "passos", `${x.id}.md`))) e(fl.arq, 2, `passo ${x.id}: vem de fluxo/${x.de}.md; apague passos/${x.id}.md`);
|
|
198
200
|
if (!fs.existsSync(x.arq)) { e(fl.arq, 2, `passo ${x.id}: de "${x.de}" sem fluxo/${x.de}.md`); continue; }
|
|
199
201
|
}
|
|
@@ -483,7 +485,8 @@ function tiposMd(m, ctx) {
|
|
|
483
485
|
"Catálogo fechado: todo artefato da especificação e do ELM é de um destes tipos, e um toolkit não cria tipo. A coluna",
|
|
484
486
|
"Desviável diz os passos de Cria que são o ponto de desvio (⇢): neles, o toolkit que traz uma skill com o fluxo e o",
|
|
485
487
|
"padrão do tipo (`tipos` no `toolkit.json`) escreve esse artefato; nos outros passos de Cria, o tipo é sempre do Sabiá. O envelope OKF de todos",
|
|
486
|
-
`é o do [\`okf-elm.md\`](${base}/sa-prd/references/okf-elm.md) da \`sa-prd\`; o corpo é o do padrão do tipo. Tipo **pendente** está declarado, mas ainda não tem padrão nem fluxo: não é criado nem publicado.`,
|
|
488
|
+
`é o do [\`okf-elm.md\`](${base}/sa-prd/references/okf-elm.md) da \`sa-prd\`; o corpo é o do padrão do tipo. Tipo **pendente** está declarado, mas ainda não tem padrão nem fluxo: não é criado nem publicado.`,
|
|
489
|
+
`Na coluna Arquivo, \`nn\` = 2 dígitos a partir de \`01\`, por tipo, em cada pasta \`elm/\`; na fatia, segue a numeração do épico (a cópia de um conceito do épico fica com o mesmo nome, e o novo continua a série); \`<slug>\` pela regra do \`backlog.md\` da \`sa-fatiar\` (seção Formato).`, "",
|
|
487
490
|
"| Sigla | Nome | Arquivo | Cria | Padrão | ELM | Requisito | Desviável | Publica depois de | Embute | Rubrica |",
|
|
488
491
|
"|---|---|---|---|---|---|---|---|---|---|---|"];
|
|
489
492
|
for (const sg of Object.keys(m.tipos)) {
|
|
@@ -544,7 +547,7 @@ function escreverSkill(m, s, out, ctx, versao = null) {
|
|
|
544
547
|
for (const fl of fluxosDa(m, s)) {
|
|
545
548
|
fs.mkdirSync(path.join(out, "references", fl.fluxo), { recursive: true });
|
|
546
549
|
fs.writeFileSync(path.join(out, "references", fl.fluxo, "grafo.md"), grafoMd(fl));
|
|
547
|
-
const linhaSprint = (x) => (x.de ? `Sprint deste fluxo: \`${x.sprint}\`. Vizinhos: a seção Entrada: vizinhos do [Fluxo ${fl.fluxo}](${base}/${s}/SKILL.md#${slug(`Fluxo ${fl.fluxo}`)}).\n\n` : "");
|
|
550
|
+
const linhaSprint = (x) => (x.de ? `Sprint deste fluxo: \`${x.sprint}\`. Branch deste fluxo: \`${x.branch}\`. Vizinhos: a seção Entrada: vizinhos do [Fluxo ${fl.fluxo}](${base}/${s}/SKILL.md#${slug(`Fluxo ${fl.fluxo}`)}).\n\n` : "");
|
|
548
551
|
for (const x of fl.passos)
|
|
549
552
|
fs.writeFileSync(path.join(out, "references", fl.fluxo, `${x.id}.md`), italico(x.dados.resumo) + linhaSprint(x) + reescrever(x.corpo, x.arq, ctx).replace(/^\n+/, ""));
|
|
550
553
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sabia",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Instala, atualiza e desinstala o Sabiá e os toolkits dele no Kiro e no opencode, com um inventário em ~/.sabia/, e explica a rota dos fluxos (sabia rota).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/sabia.mjs
CHANGED
|
@@ -664,8 +664,7 @@ export function listarToolkits(opcoes = {}) {
|
|
|
664
664
|
l[0] = `↳ ${l[0]}`;
|
|
665
665
|
linhas.splice(i < 0 ? linhas.length : i + 1, 0, l);
|
|
666
666
|
}
|
|
667
|
-
ctx.log(["
|
|
668
|
-
...linhas.map((l) => `| ${l.join(" | ")} |`)].join("\n"));
|
|
667
|
+
ctx.log(colunas([["TOOLKIT", "AUTOR", "NO ÍNDICE", "INSTALADO", "NESTE PROJETO", "DESCRIÇÃO"], ...linhas]));
|
|
669
668
|
return linhas;
|
|
670
669
|
}
|
|
671
670
|
|