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 +1 -1
- package/package.json +1 -1
- package/readme.md +4 -298
- package/src/commands/init.js +0 -5
- package/src/services/InitService.js +0 -17
- package/src/services/InitService.spec.md +5 -13
- package/src/workflows/mddd-preview.yml.js +0 -61
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.
|
|
24
|
+
.version('7.1.1');
|
|
25
25
|
|
|
26
26
|
// ==========================================
|
|
27
27
|
// COMMAND: md init
|
package/package.json
CHANGED
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
|
|
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.
|
|
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
|
|
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),
|
|
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.
|
package/src/commands/init.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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 -->
|
|
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 | `
|
|
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(
|
|
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');
|