mddd-cli 7.1.0 → 7.1.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/bin/cli.js CHANGED
@@ -21,7 +21,7 @@ const program = new Command();
21
21
  program
22
22
  .name('md')
23
23
  .description('Manager for co-located specifications for Mermaid Diagram Driven Development (MDDD)')
24
- .version('7.1.0');
24
+ .version('7.1.1');
25
25
 
26
26
  // ==========================================
27
27
  // COMMAND: md init
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mddd-cli",
3
- "version": "7.1.0",
3
+ "version": "7.1.1",
4
4
  "description": "Official CLI for modular, co-located, and versioned Mermaid Diagram Driven Development (MDDD).",
5
5
  "type": "module",
6
6
  "exports": "./bin/cli.js",
package/readme.md CHANGED
@@ -6,15 +6,6 @@
6
6
 
7
7
  ---
8
8
 
9
- <p align="center">
10
- <a href="#english">🇺🇸 English</a> •
11
- <a href="#portuguese">🇧🇷 Português</a>
12
- </p>
13
-
14
- ---
15
-
16
- <a id="english"></a>
17
-
18
9
  # 🇺🇸 English
19
10
 
20
11
  An agnostic, ultra-lightweight, and surgical CLI for implementing **MDDD (Mermaid Diagram Driven Development)** in a modular, co-located, and strictly versioned way.
@@ -144,7 +135,7 @@ npm install -g mddd-cli
144
135
 
145
136
  ## 🚀 Quick Start Guide
146
137
 
147
- The MDDD workflow is based on skills to orchestrate the AI in the chat.
138
+ The MDDD protocol is based on skills to orchestrate AI agents development.
148
139
 
149
140
  ### 1. Initialize your project
150
141
 
@@ -155,13 +146,13 @@ md init
155
146
 
156
147
  ```
157
148
 
158
- This will create the `AGENTS.md` and `SKILL.md` files in the root directory, containing the global instructions that will guide the AI in understanding the MDDD methodology and interacting with Git logs. You can rename `AGENTS.md` to any .rules file you need (.cursorrules, .clinerules, etc.).
149
+ This will create the `AGENTS.md` and `SKILL.md` files in the root directory, containing the global instructions that will guide the AI in understanding the MDDD methodology and interacting with Git logs.
159
150
 
160
151
  ### 2. Audit legacy files or make new ones.
161
152
 
162
153
  - Tell AI to `md-audit` the file you want to review. If it's clean and concise, AI will create the spec based on it. If it's not, then AI will propose a refactoring with the "to-be" spec.
163
154
 
164
- - Tell AI to `md-new` a specification you need, connect to a Jira/Task, to a Figma/Design or simple tell AI what you need.
155
+ - Tell AI to `md-new` a specification you need, connect to a Jira/Task, to a Figma/Design or simple tell AI what to do.
165
156
 
166
157
  ### 3. Implement the specification.
167
158
 
@@ -237,7 +228,7 @@ src/
237
228
  | Command | Description |
238
229
  | :--- | :--- |
239
230
  | `md init` | Configures the `AGENTS.md` file and the SKILL.md files which instructs the AI how to behave. Run this everytime you update MDDD-CLI NPM Package. |
240
- | `md status` | Generates a beautiful MDDD coverage report with metrics from all `.spec.md` files. Shows specs classification (Cohesive/Chaotic), task progress, version changes, and impact metrics. |
231
+ | `md status` | Generates a beautiful MDDD coverage report with metrics from all `.spec.md` files. Shows specs classification (Cohesive/Chaotic), discovery tasks progress, version changes, and impact metrics. |
241
232
 
242
233
  ### Project Architecture
243
234
 
@@ -261,8 +252,6 @@ src/
261
252
  │ ├── InitService.js
262
253
  │ ├── InitService.spec.md
263
254
  │ └── SpecFinderService.js
264
- └── workflows/
265
- └── mddd-preview.yml.js # GitHub Actions workflow
266
255
 
267
256
  tests/
268
257
  ├── commands/
@@ -292,286 +281,3 @@ If you encounter any issues, open a [GitHub Issue](https://github.com/JulioCRFil
292
281
  ## 📄 License
293
282
 
294
283
  Distributed under the MIT license. See the [LICENSE](./LICENSE) file for more information.
295
-
296
- ---
297
- <a id="portuguese"></a>
298
-
299
- # 🇧🇷 Português
300
-
301
- Uma CLI agnóstica, ultra-leve e cirúrgica para implementar **MDDD (Mermaid Diagram Driven Development)** de forma modular, colocalizada e estritamente versionada.
302
-
303
- Esta ferramenta automatiza a criação e a conexão de arquivos de especificação visual (Markdown + Mermaid + Matrizes de Decisão) através do comando `md init`. O objetivo é envelopar as regras de negócio em arquivos `.spec.md` para que qualquer ferramenta de IA (**Cursor, Windsurf, Claude Code, GitHub Copilot**, etc.) use esses assets como a **Fonte Única da Verdade** antes de tocar no código produtivo.
304
-
305
- ---
306
-
307
- ## 📌 O Conceito: MDDD vs. Especificações em Texto
308
-
309
- Ao contrário de frameworks tradicionais de especificação que geram dezenas de arquivos de texto e "deltas" que poluem o seu repositório, o MDDD introduz um paradigma **Visual-First & Focado em Fluxo**:
310
-
311
- 1. **Um Mapa Real da Arquitetura:** Em vez de mapas em formato de texto chapado, o MDDD permite conectar micro-especificações em uma visão macro do sistema. Ele se comporta como um mapa geográfico real de toda a sua arquitetura de software.
312
- 2. **Projetado para Alta Complexidade e CRUDs Gigantes:** Estados complexos, validações de múltiplos perfis e regras de negócio densas são estruturadas dentro de **Matrizes de Decisão** em tabelas markdown. Isso elimina a saturação visual dos layouts e resolve comportamentos complexos com precisão matemática.
313
- 3. **Poluição Zero de Arquivos (Nativo do Git):** Os requisitos mudam e são versionados diretamente no próprio local original. As IAs que utilizam recursos de terminal ou **MCP (Model Context Protocol)** podem consultar o histórico do Git instantaneamente para entender as mudanças evolutivas, significando zero arquivos temporários ou lixo arquitetural.
314
-
315
- ---
316
-
317
- ## ⚖️ MDDD vs. OpenSpec (SDD)
318
-
319
- | Funcionalidade / Paradigma | OpenSpec (Specification Driven Development) | MDDD (Mermaid Diagram Driven Development) |
320
- | --- | --- | --- |
321
- | **Estrutura Lógica** | Parágrafos textuais, regras verbosas e cenários conversacionais. | Matrizes de Decisão Binárias/Factuais + Topologias Estruturais Estritas. |
322
- | **Consumo de Contexto da IA** | Alto consumo de tokens devido a descrições comportamentais massivas em texto. | Consumo ultra-baixo de tokens através de tabelas de verdade concisas em matrizes. |
323
- | **Estimativa de Tokens (10 regras)** | **~8.000 – 12.000 tokens** (parágrafos + descrições de cenário + casos de borda) | **~800 – 1.500 tokens** (10 linhas × 6 colunas de fatores ≈ 60 células de texto curto) |
324
- | **Estimativa de Tokens (50 regras)** | **~40.000 – 60.000 tokens** (janela de contexto inteira pode ser consumida) | **~4.000 – 7.500 tokens** (ainda cabe confortavelmente em um contexto pequeno) |
325
- | **Escalabilidade** | Adicionar regras cria blocos de texto massivos propensos a fragmentação de prompt. | Adicionar regras escala horizontalmente anexando colunas precisas de fatores. |
326
- | **Controle de Ambiguidade** | Alto risco de alucinação de LLM ao interpretar frases aninhadas de "se/senão". | Precisão matemática pura; processamento determinístico via linhas de matriz. |
327
- | **Pegada da Ferramenta** | Boilerplate massivo com poluição de arquivos internos e estruturas complexas de pastas. | Ultra-leve e modular: um router enxuto + módulos de comando e serviço claramente separados, cada um facilmente auditável. |
328
-
329
- ### 🚀 Por que as Matrizes de Decisão MDDD Superam o OpenSpec:
330
-
331
- * **Tokens Previsíveis:** Para uma LLM, ler essa tabela é idêntico a processar uma matriz binária de verdade. Ela bate o olho nas colunas de fatores primitivos (`Tenant Ativo?`, `Kill Switch Global Ativo?`) e sabe exatamente se a combinação resulta em `ALLOW` ou `DENY` sem gastar processamento léxico ou tokens desnecessários.
332
- * **10× a 15× Menos Tokens:** Uma regra de negócio complexa com 6 fatores variáveis custa ~800 tokens em MDDD vs ~8.000+ tokens em OpenSpec (parágrafos + descrições de casos de borda). Conforme as regras crescem, MDDD se mantém linear enquanto OpenSpec cresce exponencialmente em verborragia.
333
- * **Infinitas Colunas = Infinitas Variáveis:** Se o seu sistema ganhar uma nova regra arquitetural (ex: `Ambiente é Produção?` ou `IP em White-list?`), basta adicionar uma nova coluna na matriz. A lógica de negócio expande horizontalmente sem poluir ou quebrar os fluxos visuais do Mermaid.
334
- * **Substituição Real do OpenSpec:** O OpenSpec precisa escrever parágrafos descritivos e cenários de teste para cobrir combinações complexas de restrições. O MDDD resolve isso em uma única linha de tabela determinística, economizando o contexto do prompt e eliminando completamente alucinações da IA.
335
-
336
- ---
337
-
338
- ## 🛠️ O Pipeline MDDD
339
-
340
- | Etapa | Ator | Ação / Gatilho | O que acontece |
341
- | --- | --- | --- | --- |
342
- | **1. Entrada** | Humano | Solicitação de Funcionalidade | O usuário propõe uma funcionalidade em linguagem natural, aponta a IA diretamente para uma Issue/Task do Jira ou GitHub, ou pede para a IA auditar um arquivo legado. |
343
- | **2. Concepção** | IA | Autogeração | A IA avalia o escopo e constrói o arquivo `.spec.md` completo com diagramas de fluxo, ciclos de vida e as **Matrizes de Decisão** necessárias. |
344
- | **3. Alinhamento** | Humano | Revisão Interativa | O usuário revisa a especificação dentro do editor. Os refinamentos são feitos de forma iterativa conversando com a IA. |
345
- | **4. Planning** | IA | Quebra de Tarefas | Com a spec aprovada, a IA extrai um checklist granular e atômico dos passos de desenvolvimento diretamente dentro do arquivo. |
346
- | **5. Execução** | IA | Geração de Código | A IA implementa o código produtivo e os testes baseando-se estritamente nas specs, atualizando o versionamento semântico ao concluir. |
347
-
348
- ---
349
-
350
- ## ✅ Pré-visualização dos Diagramas Mermaid
351
-
352
- Para visualizar diagramas Mermaid diretamente no seu editor durante o fluxo MDDD, você pode usar extensões que renderizam blocos `mermaid` em arquivos Markdown:
353
-
354
- ### Exemplo de Diagrama Arquitetural
355
-
356
- ```mermaid
357
- sequenceDiagram
358
- autonumber
359
- actor U as Usuário Merchant (Lojista)
360
- actor A as Admin da Plataforma
361
- participant Core as Core da Plataforma (Orquestrador)
362
- participant Registry as Registro de Micro-Apps
363
- participant Sandbox as Sandbox de Execução (Contexto Isolado)
364
- participant TenantDB as Multi-Banco do Tenant
365
- participant Billing as Motor de Tarifação (Uso Medido)
366
-
367
- Note over U, Core: Cenário: Lojista tenta executar um micro-app customizado premium.
368
-
369
- U->>Core: Requisita Execução do App (TenantID, AppID)
370
- Core->>Registry: Busca Manifesto do Micro-App & Permissões de Escopo
371
- Registry-->>Core: Retorna Manifesto (Escopos de API Requeridos, Nível de Tier)
372
-
373
- Note over Core, TenantDB: Validação Dinâmica de Segurança & Multitenancy
374
- Core->>TenantDB: Checa Assinatura do Tenant & Feature Flags
375
- TenantDB-->>Core: Tenant Autorizado (Licença Ativa)
376
-
377
- Core->>Billing: Rastreia Evento de Execução (API de Uso Medido)
378
- activate Billing
379
- Billing->>Billing: Registra Consumo de Tokens/Processamento
380
- deactivate Billing
381
-
382
- Note over Core, Sandbox: Initializing Sandbox em Container
383
- Core->>Sandbox: Injeta Token de Segurança & Proxies de SDK Restritos
384
- Core->>Sandbox: Inicializa o Bundle Frontend/Backend do Micro-App
385
-
386
- activate Sandbox
387
- Sandbox->>Sandbox: Executa Ciclo de Vida do Micro-App (onInit)
388
- Sandbox->>Core: Chamada de API Restrita (Escrita de Dados do Tenant)
389
- Core->>TenantDB: Persiste Mudanças com Segurança no Isolamento do Tenant
390
- Sandbox-->>U: Renderiza Fragmento de UI Isolado / Micro-Frontend
391
- deactivate Sandbox
392
-
393
- Note over A, Core: Admin da Plataforma pode substituir a quente ou depreciar apps globalmente.
394
- A->>Core: Deprecia Versão do App (Flag Global)
395
- Core->>Registry: Atualiza Status para "DEPRECATED"
396
-
397
- ```
398
-
399
- ### Exemplo de Matriz de Decisão de Ciclo de Vida & Runtime de Micro-Apps
400
-
401
- | Tenant Ativo? | App Premium? | Tier de Faturamento Ativo? | Usuário é Admin? | App em White-list? | Kill Switch Global Ativo? | Ação Proposta | Decisão (Resultado) | Estado de Transição (Novo Status) |
402
- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
403
- | ❌ NÃO | - | - | - | - | - | `BOOT_APP` | ❌ **DENY (Negar)** | - |
404
- | ✅ SIM | ❌ NÃO | **FREE** | ❌ NÃO | ✅ SIM | ❌ NÃO | `BOOT_APP` | ✅ **ALLOW (Permitir)** | `ACTIVE_RUNTIME` |
405
- | ✅ SIM | ✅ SIM | **FREE** | - | - | ❌ NÃO | `INSTALL_APP` | ❌ **DENY (Negar)** | - (Dispara Upsell) |
406
- | ✅ SIM | ✅ SIM | **ENTERPRISE** | ✅ SIM | ✅ SIM | ❌ NÃO | `INSTALL_APP` | ✅ **ALLOW (Permitir)** | `INSTALLED` |
407
- | ✅ SIM | - | - | ❌ NÃO | - | ❌ NÃO | `CONFIG_API` | ❌ **DENY (Negar)** | - |
408
- | ✅ SIM | - | - | ✅ SIM | - | ❌ NÃO | `CONFIG_API` | ✅ **ALLOW (Permitir)** | `CONFIGURED` |
409
- | ✅ SIM | - | - | - | - | ✅ SIM | `BOOT_APP` | ❌ **DENY (Negar)** | `MUTED_ISOLATION` |
410
- | ✅ SIM | - | - | - | - | ✅ SIM | `HOT_RELOAD` | ❌ **DENY (Negar)** | - |
411
- | ❌ NÃO | - | - | - | - | - | `PURGE_DATA` | ❌ **DENY (Negar)** | - |
412
-
413
- ---
414
-
415
- ## 📥 Instalação
416
-
417
- Como o pacote está publicado no NPM, a instalação é global e simples:
418
-
419
- ```bash
420
- # Instalação global
421
- npm install -g mddd-cli
422
-
423
- ```
424
-
425
- > **Note:** Certifique-se de ter o **Node.js v18 ou superior** instalado em sua máquina.
426
-
427
- ---
428
-
429
- ## 🚀 Guia de Uso Rápido
430
-
431
- O fluxo MDDD é baseado em skills para orquestrar a IA no chat.
432
-
433
- ### 1. Inicialize seu projeto
434
-
435
- Na raiz do seu projeto, execute:
436
-
437
- ```bash
438
- md init
439
-
440
- ```
441
-
442
- Isso criará os arquivos `AGENTS.md` e `SKILL.md` no diretório raiz, contendo as instruções globais que guiarão a IA na compreensão da metodologia MDDD e na interação com os logs do Git. Você pode renomear `AGENTS.md` para qualquer arquivo .rules que precisar (.cursorrules, .clinerules, etc.).
443
-
444
- ### 2. Auditar arquivos legados ou criar novos.
445
-
446
- * Diga à IA para executar `md-audit` no arquivo que você deseja revisar. Se ele estiver limpo e conciso, a IA criará a especificação com base nele. Caso contrário, a IA proporá uma refatoração com a especificação ideal ("to-be").
447
- * Diga à IA para executar `md-new` para uma especificação que você precisa, conectar a um Jira/Tarefa, a um Figma/Design ou simplesmente diga à IA o que você precisa.
448
-
449
- ### 3. Implementar a especificação.
450
-
451
- Diga à IA para executar `md-impl` apontando para um arquivo .spec. Ela lerá toda a especificação, criará a lista de tarefas e começará a trabalhar nela.
452
-
453
- ### 4. Editar especificações existentes.
454
-
455
- Se você precisar adicionar uma nova funcionalidade ou modificar uma existente, basta dizer à IA para executar `md-edit` no arquivo .spec com as modificações desejadas.
456
- Revise até obter exatamente a especificação de que precisa e, em seguida, diga à IA para executá-lo com `md-impl`.
457
-
458
- ---
459
-
460
- ## 🤖 SKILLS (Gatilhos para IA)
461
-
462
- Após rodar o `md init`, a sua IA passará a entender estes atalhos quando você os digitar no chat:
463
-
464
- | Skill | Descrição |
465
- | --- | --- |
466
- | `md-new` | Inicia o modo de desenho para uma nova feature a partir de texto ou link de issue (gera diagramas/matrizes). |
467
- | `md-edit` | Solicita alterações em um arquivo `.spec.md` existente (incrementa a versão semântica). |
468
- | `md-audit` | Analisa código legado e propõe refatoração visual (Mermaid). |
469
- | `md-impl` | Gera código e testes baseando-se estritamente na estrutura do `.spec.md`, gerenciando o histórico de versões. |
470
- | `mddd-context-map` | Gera um diagrama de arquitetura do produto em múltiplos níveis (flowchart LR) a partir de todos os arquivos `.spec.md`. Classifica specs como MACRO/MICRO, mapeia fluxos de dados e produz um `ARCHITECTURE.spec.md` com nós estilizados e arestas rotuladas. |
471
-
472
- ---
473
-
474
- ## 🗺️ Mapa de Contexto da Arquitetura
475
-
476
- A skill `mddd-context-map` ensina o agente de IA a produzir um **diagrama de arquitetura do produto** que visualiza o sistema em **múltiplos níveis**:
477
-
478
- - **Áreas Macro (domínios)** — cada spec MACRO representa um domínio ou capacidade de negócio de alto nível.
479
- - **Micro componentes/serviços** — specs MICRO são os blocos construtivos dentro de cada domínio.
480
- - **Fluxos de dados** — conexões entre usuários, UI, backend, funções serverless e infraestrutura externa.
481
-
482
- O output é um **`flowchart LR`** estilizado que combina agrupamento por domínio com componentes internos e integrações externas, usando `classDef` para diferenciar os tipos de nós:
483
-
484
- | Classe de Nó | Propósito | Visual |
485
- | :--- | :--- | :--- |
486
- | `userNode` | Pessoas, personas, perfis | Amarelo quente |
487
- | `systemNode` | Serviços/componentes internos | Azul profissional |
488
- | `externalNode` | APIs de terceiros, sistemas parceiros | Vermelho-alaranjado |
489
- | `infraNode` | Bancos de dados, filas, caches | Cinza itálico sutil |
490
-
491
- ### Como usar
492
-
493
- 1. Inicialize seu projeto com `md init` (isso copia o template de arquitetura para `.agents/templates/`).
494
- 2. Peça à IA para gerar o mapa de contexto — ela escaneará todos os arquivos `.spec.md`, classificará como MACRO/MICRO e comporá o diagrama.
495
- 3. O output é salvo em `ARCHITECTURE.spec.md` na raiz do projeto.
496
- 4. Cada diagrama é validado com `npx md validate` antes de ser escrito.
497
-
498
- ---
499
-
500
- ## 🏗️ Arquitetura de Especificação Colocalizada (Co-location)
501
-
502
- As especificações visuais não ficam centralizadas em pastas distantes. Elas vivem no **mesmo diretório** do componente, tela ou feature que descrevem, mapeando o software de forma nativa.
503
-
504
- ```
505
- src/
506
- └── home/
507
- ├── home.spec.md # 🌎 Mapa global do módulo
508
- ├── guest/
509
- │ ├── guest.spec.md # 🔬 Fluxo de tela com Matriz de Decisão
510
- │ └── guest_page.dart # 💻 Código produtivo gerado pela IA
511
- └── consumer/
512
- └── consumer.spec.md # 🔬 Fluxo de tela com Matriz de Decisão
513
-
514
- ```
515
-
516
- ---
517
-
518
- ## 📦 Comandos da CLI
519
-
520
- | Comando | Descrição |
521
- | :--- | :--- |
522
- | `md init` | Configura os arquivos `AGENTS.md` e `SKILL.md` que instruem a IA sobre como se comportar. Execute isto sempre que atualizar o pacote NPM do MDDD-CLI. |
523
- | `md status` | Gera um relatório bonito de cobertura MDDD com métricas de todos os arquivos `.spec.md`. Mostra classificação dos specs (Coeso/Caótico), progresso de tarefas, mudanças de versão e métricas de impacto. |
524
-
525
- ### Arquitetura do Projeto
526
-
527
- O código-fonte da CLI segue uma arquitetura modular limpa, conforme documentado em `bin/cli.spec.md`:
528
-
529
- ```
530
- bin/
531
- ├── cli.js # Router Commander enxuto (< 30 linhas)
532
- └── cli.spec.md # Spec colocalizada (v3.0.0)
533
-
534
- src/
535
- ├── commands/ # Camada de comandos
536
- │ ├── init.js # Comando init
537
- │ ├── listSpecs.js # Comando listSpecs
538
- │ ├── status.js # Comando status
539
- │ ├── status.spec.md # Spec do status
540
- │ └── validator.js # Utilitário de validação
541
- ├── services/ # Serviços compartilhados com DI
542
- │ ├── FileSystemService.js
543
- │ ├── FileSystemService.spec.md
544
- │ ├── InitService.js
545
- │ ├── InitService.spec.md
546
- │ └── SpecFinderService.js
547
- └── workflows/
548
- └── mddd-preview.yml.js # Workflow do GitHub Actions
549
-
550
- tests/
551
- ├── commands/
552
- │ ├── init.spec.js
553
- │ ├── listSpecs.spec.js
554
- │ └── status.spec.js
555
- ```
556
-
557
- ---
558
-
559
- ## 🧪 Tecnologias
560
-
561
- * **Node.js** >= 18
562
- * **Commander.js** — Interface CLI robusta e declarativa
563
- * **Picocolors** — Saída colorida e leve no terminal
564
- * **Mermaid.js** — Diagramação visual como fonte da verdade
565
- * **Test Runner Nativo** (`node:test`) — Testes unitários sem dependências externas
566
-
567
- ---
568
-
569
- ## 💬 Precisa de ajuda?
570
-
571
- Se encontrar qualquer problema, abra uma [Issue no GitHub](https://github.com/JulioCRFilho/mermaid-diagram-driven-development/issues).
572
-
573
- ---
574
-
575
- ## 📄 Licença
576
-
577
- Distribuído sob a licença MIT. Veja o arquivo [LICENSE](./LICENSE) para mais informações.
@@ -5,8 +5,6 @@ import { fileURLToPath } from 'node:url';
5
5
  import path from 'node:path';
6
6
  import pc from 'picocolors';
7
7
 
8
- import { GITHUB_WORKFLOW_CONTENT } from '../workflows/mddd-preview.yml.js';
9
-
10
8
  /**
11
9
  * Resolve and read AGENTS.md from the project root.
12
10
  * @returns {string}
@@ -40,9 +38,6 @@ export async function execute(initService) {
40
38
  // 3. Passa o caminho da pasta oculta de origem para o serviço clonar recursivamente
41
39
  await initService.createSkills(cliSkillsSourceDir, (msg) => console.log(msg));
42
40
 
43
- // 4. Cria o workflow do GitHub
44
- await initService.createGitHubWorkflow(GITHUB_WORKFLOW_CONTENT, (msg) => console.log(msg));
45
-
46
41
  // 5. Copia o spec template para o projeto
47
42
  await initService.createSpecTemplate(cliSpecTemplatePath, (msg) => console.log(msg));
48
43
 
@@ -58,23 +58,6 @@ export class InitService {
58
58
  }
59
59
  }
60
60
 
61
- /**
62
- * Creates (or overwrites) the GitHub Actions workflow for Mermaid diagram preview on PRs.
63
- * @param {string} workflowYaml - The YAML content for the GitHub workflow
64
- * @param {(message: string) => void} logger
65
- * @returns {Promise<string>} Path to the created workflow file
66
- */
67
- async createGitHubWorkflow(workflowYaml, logger) {
68
- const workflowsDir = path.join('.github', 'workflows');
69
- const workflowFile = path.join(workflowsDir, 'mddd-preview.yml');
70
-
71
- this.#fs.ensureDir(workflowsDir);
72
- await this.#fs.writeFile(workflowFile, workflowYaml);
73
- logger(`✅ GitHub workflow created: ${workflowFile}`);
74
-
75
- return workflowFile;
76
- }
77
-
78
61
  /**
79
62
  * Copies the spec template file from the CLI package to the project's .agents/templates/ directory.
80
63
  * @param {string} sourceTemplatePath - Absolute path to the CLI source spec-template.md
@@ -1,6 +1,6 @@
1
1
  # InitService — Specification
2
2
 
3
- **SPEC_VERSION:** v1.2.0 — stable
3
+ **SPEC_VERSION:** v1.3.0 — stable
4
4
  **Classification:** Coeso
5
5
 
6
6
  ## Overview
@@ -14,7 +14,7 @@ Co-located with `src/services/InitService.js`.
14
14
  ## Behavioral Flow (Mermaid)
15
15
 
16
16
  ```mermaid
17
- %% @spec-version v1.2.0
17
+ %% @spec-version v1.3.0
18
18
  stateDiagram-v2
19
19
  [*] --> createSystemPrompt: initService.createSystemPrompt(promptContent)
20
20
  createSystemPrompt --> writeFile: this.#fs.writeFile('AGENTS.md', content)
@@ -24,12 +24,7 @@ stateDiagram-v2
24
24
  ensureAgentsDir --> ensureTargetSkillsDir: this.#fs.ensureDir('.agents/skills')
25
25
  ensureTargetSkillsDir --> cpSyncSkills: fs.cpSync(source, target, recursive)
26
26
  cpSyncSkills --> logSkills: logger per copied skill
27
- logSkills --> createGitHubWorkflow: initService.createGitHubWorkflow(workflowYaml, logger)
28
-
29
- createGitHubWorkflow --> ensureWorkflowDir: this.#fs.ensureDir('.github/workflows')
30
- ensureWorkflowDir --> writeWorkflowFile: this.#fs.writeFile('.github/workflows/mddd-preview.yml', content)
31
- writeWorkflowFile --> logWorkflow: logger(`✅ GitHub workflow created`)
32
- logWorkflow --> createSpecTemplate: initService.createSpecTemplate(sourceTemplatePath, logger)
27
+ logSkills --> createSpecTemplate: initService.createSpecTemplate(sourceTemplatePath, logger)
33
28
 
34
29
  createSpecTemplate --> ensureTemplatesDir: this.#fs.ensureDir('.agents/templates')
35
30
  ensureTemplatesDir --> writeTemplateFile: this.#fs.writeFile('.agents/templates/spec-template.md', content)
@@ -45,12 +40,10 @@ stateDiagram-v2
45
40
  | :--- | :--- | :--- | :---: | :--- | :--- |
46
41
  | 1 | `createSystemPrompt(promptContent)` | Input: `string`<br>Output: `Promise<void>` | ❌ No | Delegated to `#fs.writeFile` | ✅ Writes `AGENTS.md` |
47
42
  | 2 | `createSkills(sourceSkillsDir, logger)` | Input: `string` (source dir) + logger fn<br>Output: `Promise<void>` | ✅ Checks `fs.existsSync(sourceSkillsDir)` | Throws `Error` if source dir not found | ✅ Creates `.agents/`, `.agents/skills/`, copies all skill folders recursively |
48
- | 3 | `createGitHubWorkflow(workflowYaml, logger)` | Input: `string` + logger fn<br>Output: `Promise<string>` | No | Delegated to `#fs` methods | ✅ Creates `.github/workflows/mddd-preview.yml` |
49
- | 4 | `createSpecTemplate(sourceTemplatePath, logger)` | Input: `string` (source path) + logger fn<br>Output: `Promise<void>` | ✅ Checks `fs.existsSync(sourceTemplatePath)` | Throws `Error` if source file not found | ✅ Creates `.agents/templates/`, writes `spec-template.md` |
43
+ | 3 | `createSpecTemplate(sourceTemplatePath, logger)` | Input: `string` (source path) + logger fn<br>Output: `Promise<void>` | Checks `fs.existsSync(sourceTemplatePath)` | Throws `Error` if source file not found | ✅ Creates `.agents/templates/`, writes `spec-template.md` |
50
44
  | 5 | `this.#fs.ensureDir(agentsDir)` | Path: `'.agents'` | ✅ Internal in FS: conditional mkdir | Delegated | ✅ Dir creation |
51
45
  | 6 | `this.#fs.ensureDir(skillsDir)` | Path: `'.agents/skills'` | ✅ Internal in FS: conditional mkdir | Delegated | ✅ Dir creation |
52
- | 7 | `this.#fs.ensureDir(workflowsDir)` | Path: `'.github/workflows'` | ✅ Internal in FS: conditional mkdir | Delegated | ✅ Dir creation |
53
- | 8 | `this.#fs.ensureDir(templatesDir)` | Path: `'.agents/templates'` | ✅ Internal in FS: conditional mkdir | Delegated | ✅ Dir creation |
46
+ | 7 | `this.#fs.ensureDir(templatesDir)` | Path: `'.agents/templates'` | ✅ Internal in FS: conditional mkdir | Delegated | ✅ Dir creation |
54
47
  | 9 | `logger(…)` | stdout message | ❌ No | N/A | ❌ None |
55
48
 
56
49
  ---
@@ -80,7 +73,6 @@ stateDiagram-v2
80
73
  | :--- | :--- | :---: | :--- |
81
74
  | 2026-06-09 | Cline (md-audit) | v1.2.1 | **Fixed SPEC_VERSION header format** (added colon separator per template spec) and **added Classification: Coeso** — aligns with the existing code quality (DI, modular, well-structured orchestration). PATCH bump. |
82
75
  | 2026-06-04 | Cline (md-edit) | v1.2.0 | **New method `createSpecTemplate`.** Added to support `md init` copying `.agents/templates/spec-template.md` from the CLI package to the project. Reads the template file content via `fs.readFileSync`, ensures `.agents/templates/` dir exists, then writes `spec-template.md` via `#fs.writeFile`. Updated behavioral flow diagram with new states (`createSpecTemplate → ensureTemplatesDir → writeTemplateFile → logTemplate`). Updated Decision Matrix with steps 4, 8. SPEC_VERSION bumped from v1.1.0 to v1.2.0 (minor — new method). |
83
- | 2026-05-28 | Cline (md-edit) | v1.1.0 | **New method `createGitHubWorkflow`.** Added to support `md init` creating `.github/workflows/mddd-preview.yml`. Updated behavioral flow diagram with new states. Updated Decision Matrix with steps 3, 7, 8. SPEC_VERSION bumped from v1.0.0 to v1.1.0 (minor — new method). Status promoted from **draft** to **stable** — implementation and tests verified. |
84
76
  | 2026-05-28 | Cline (md-audit) | v1.0.0 | **Spec created by md-audit.** Reverse-engineered from `src/services/InitService.js` (52 lines). Code classified as **Clean / Service with DI**. All orchestration steps documented with primitive factor analysis. No modifications to production code. |
85
77
 
86
78
  </details>
@@ -1,61 +0,0 @@
1
- /**
2
- * GitHub Actions workflow YAML for automated full specification and native Mermaid preview on PRs.
3
- * Extracted from init.js v1.5.0 domain extraction.
4
- */
5
- export const GITHUB_WORKFLOW_CONTENT = [
6
- "name: 🗺️ MDDD Full Spec Preview",
7
- "",
8
- "on:",
9
- " pull_request:",
10
- " paths:",
11
- " - '**/*.spec.md'",
12
- "",
13
- "jobs:",
14
- " render-preview:",
15
- " runs-on: ubuntu-latest",
16
- " permissions:",
17
- " pull-requests: write",
18
- " contents: read",
19
- "",
20
- " steps:",
21
- " - name: ⬇️ Checkout Repository",
22
- " uses: actions/checkout@v4",
23
- " with:",
24
- " fetch-depth: 0", // CRUCIAL: Traz o histórico completo para o git diff funcionar
25
- "",
26
- " - name: 📸 Build Preview Comment",
27
- " id: build-comment",
28
- ' run: |',
29
- ' echo "comment<<EOF" >> "$GITHUB_OUTPUT"',
30
- ' echo "### 🗺️ MDDD - Design Changes Detected!" >> "$GITHUB_OUTPUT"',
31
- ' echo "Review the proposed specification and visual topology below before approving." >> "$GITHUB_OUTPUT"',
32
- ' echo "" >> "$GITHUB_OUTPUT"',
33
- "",
34
- ' # Busca os arquivos modificados comparando dinamicamente com a branch destino do PR',
35
- ' CHANGED=$(git diff --name-only "origin/${{ github.base_ref }}...HEAD" -- "*.spec.md" 2>/dev/null || echo "")',
36
- "",
37
- " for file in $CHANGED; do",
38
- ' [ -f "$file" ] || continue',
39
- ' echo "" >> "$GITHUB_OUTPUT"',
40
- ' echo "#### 📄 File: \`${file}\`" >> "$GITHUB_OUTPUT"',
41
- ' echo "" >> "$GITHUB_OUTPUT"',
42
- ' echo "<details open>" >> "$GITHUB_OUTPUT"',
43
- ' echo "<summary>Click to collapse full specification preview</summary>" >> "$GITHUB_OUTPUT"',
44
- ' echo "" >> "$GITHUB_OUTPUT"',
45
- "",
46
- ' # Injeta o conteúdo completo do arquivo markdown',
47
- ' cat "$file" >> "$GITHUB_OUTPUT"',
48
- ' echo "" >> "$GITHUB_OUTPUT"',
49
- "",
50
- ' echo "</details>" >> "$GITHUB_OUTPUT"',
51
- ' echo "" >> "$GITHUB_OUTPUT"',
52
- " done",
53
- "",
54
- ' echo "EOF" >> "$GITHUB_OUTPUT"',
55
- "",
56
- " - name: 💬 Comment Preview on PR",
57
- " uses: thollander/actions-comment-pull-request@v2",
58
- " with:",
59
- ' message: "${{ steps.build-comment.outputs.comment }}"',
60
- " comment_tag: 'mddd-design-preview'",
61
- ].join('\n');