@dforce2055/dai 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.
- package/.env.example +30 -0
- package/CHANGELOG.md +46 -0
- package/CODE_OF_CONDUCT.md +37 -0
- package/CONTRIBUTING.md +66 -0
- package/LICENSE +674 -0
- package/README.md +288 -0
- package/SECURITY.md +37 -0
- package/VERSION +1 -0
- package/cli/dai.mjs +692 -0
- package/cli/lib/ac-hash.mjs +74 -0
- package/cli/lib/args.mjs +23 -0
- package/cli/lib/bootstrap.mjs +74 -0
- package/cli/lib/env.mjs +23 -0
- package/cli/lib/forge-api.mjs +96 -0
- package/cli/lib/forge-url.mjs +61 -0
- package/cli/lib/fsutil.mjs +24 -0
- package/cli/lib/implements.mjs +94 -0
- package/cli/lib/link-us.mjs +59 -0
- package/cli/lib/pm-adapter.mjs +59 -0
- package/cli/lib/pm-clickup.mjs +54 -0
- package/cli/lib/pm-jira.mjs +123 -0
- package/cli/lib/pr.mjs +53 -0
- package/cli/lib/us.mjs +36 -0
- package/docs/EJEMPLO-END-TO-END.md +330 -0
- package/docs/MANIFIESTO.md +114 -0
- package/docs/METODOLOGIA.md +254 -0
- package/docs/PROBAR.md +91 -0
- package/docs/SCRUM-CON-IA.md +190 -0
- package/docs/adr/0001-contrato-ac-hash.md +86 -0
- package/docs/adr/0002-agnostico-del-asistente.md +87 -0
- package/docs/adr/0003-deteccion-y-estampado-son-comandos.md +73 -0
- package/docs/adr/0004-ubicacion-y-schema-implements.md +94 -0
- package/docs/adr/0005-superficie-comandos-y-stamp.md +65 -0
- package/docs/adr/0006-distribucion-y-licencia.md +59 -0
- package/docs/adr/0007-modelo-de-autenticacion.md +63 -0
- package/docs/adr/README.md +19 -0
- package/docs/detalle/01-refinamiento.md +33 -0
- package/docs/detalle/02-planning.md +27 -0
- package/docs/detalle/03-ramas.md +32 -0
- package/docs/detalle/04-tdd.md +35 -0
- package/docs/detalle/05-smoke.md +32 -0
- package/docs/detalle/06-code-review.md +34 -0
- package/docs/detalle/07-merge-trazabilidad.md +33 -0
- package/docs/detalle/08-daily.md +29 -0
- package/docs/detalle/09-review.md +25 -0
- package/docs/detalle/10-retro.md +27 -0
- package/docs/detalle/README.md +20 -0
- package/docs/glosario.md +79 -0
- package/docs/guias/dev.md +66 -0
- package/docs/guias/lead.md +53 -0
- package/docs/guias/po.md +50 -0
- package/governance/branch-naming.md +36 -0
- package/governance/ci-rules.md +57 -0
- package/governance/commit-convention.md +76 -0
- package/index.html +479 -0
- package/install.sh +19 -0
- package/manifest.yaml +76 -0
- package/package.json +55 -0
- package/skills/dai-review/SKILL.md +78 -0
- package/skills/doc-to-backlog/SKILL.md +70 -0
- package/skills/doc-to-backlog/templates/backlog-candidato.md +49 -0
- package/skills/grill-epic/SKILL.md +76 -0
- package/skills/grill-intent/SKILL.md +43 -0
- package/skills/grill-intent/templates/intent.md +36 -0
- package/skills/grill-user-story/SKILL.md +76 -0
- package/skills/grill-user-story/templates/user-story.md +61 -0
- package/skills/link-us/SKILL.md +42 -0
- package/skills/link-us/templates/implements.yaml +16 -0
- package/skills/tdd/SKILL.md +109 -0
- package/skills/tdd/deep-modules.md +33 -0
- package/skills/tdd/interface-design.md +31 -0
- package/skills/tdd/mocking.md +59 -0
- package/skills/tdd/refactoring.md +10 -0
- package/skills/tdd/tests.md +61 -0
- package/templates/adr.md +43 -0
- package/templates/commit-msg +48 -0
- package/templates/definition-of-done.md +50 -0
- package/templates/definition-of-ready.md +51 -0
- package/templates/epica.md +62 -0
- package/templates/formato-us.md +129 -0
- package/templates/pull-request.md +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# dai — Desarrollo Asistido por IA
|
|
2
|
+
|
|
3
|
+
[](https://github.com/dforce2055/dai/actions/workflows/ci.yml)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](package.json)
|
|
6
|
+
[](CONTRIBUTING.md)
|
|
7
|
+
[](https://dforce2055.github.io/dai/)
|
|
8
|
+
<!-- El badge de npm se agrega tras `npm publish` (snippet en RELEASING.md):
|
|
9
|
+
[](https://www.npmjs.com/package/@dforce2055/dai)
|
|
10
|
+
-->
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
> **dai ayuda a los equipos a desarrollar software en menos tiempo y con más calidad** —
|
|
14
|
+
> sacándose de encima la burocracia para enfocarse en lo que importa: pensar, documentar
|
|
15
|
+
> y construir. La IA acelera; dai mantiene el control y la trazabilidad.
|
|
16
|
+
|
|
17
|
+
## Qué es y qué resuelve
|
|
18
|
+
|
|
19
|
+
Desarrollar con IA es rápido, pero sin método el código se desconecta del *por qué* se
|
|
20
|
+
escribió, aparece el **vibe coding**, y el *qué* (negocio) se mezcla con el *cómo*
|
|
21
|
+
(técnica). **dai es una metodología asistida por IA** que ataca eso combinando tres piezas:
|
|
22
|
+
|
|
23
|
+
- **🖥️ El CLI `dai`** — un comando para cada fase del desarrollo (definir, linkear,
|
|
24
|
+
verificar, revisar, publicar). Mantiene atado el requerimiento al código, del principio
|
|
25
|
+
al fin.
|
|
26
|
+
- **🧩 OpenSpec** — convierte el *qué* en un *cómo* (diseño + tareas) con ayuda de agentes
|
|
27
|
+
de IA, sin que nadie escriba la burocracia técnica a mano.
|
|
28
|
+
- **🤖 La IA** — para debatir, analizar, conectarse a tus herramientas por **MCP** (Jira,
|
|
29
|
+
ClickUp, GitHub, Gitlab) y automatizar el papeleo, para que te enfoques en documentar y construir.
|
|
30
|
+
|
|
31
|
+
Juntas hacen que la IA potencie tu desarrollo **sin perder el control**: todo lo que se
|
|
32
|
+
construye queda linkeado a por qué se construyó, y **la máquina te avisa sola** cuando algo
|
|
33
|
+
se desincroniza. Del solo developer a un equipo entero de desarrollo — el mismo método, con Claude o Copilot.
|
|
34
|
+
|
|
35
|
+
## Cómo funciona (3 ideas)
|
|
36
|
+
|
|
37
|
+
- **Separa el QUÉ del CÓMO**, con dueños distintos, linkeados ida y vuelta.
|
|
38
|
+
- **El link se autora una sola vez** (en el código, `implements.yaml`); la cobertura inversa
|
|
39
|
+
se **genera**, nunca se mantiene a mano.
|
|
40
|
+
- **`@version` = número + hash de criterios**: cuando el QUÉ cambia, los CÓMO atrasados se
|
|
41
|
+
marcan **solos**.
|
|
42
|
+
|
|
43
|
+
## Quickstart
|
|
44
|
+
|
|
45
|
+
Requiere **Node ≥ 18** (el CLI no tiene dependencias). Elige tu rol:
|
|
46
|
+
|
|
47
|
+
### 🟡 Como analista funcional — quiero crear historias o épicas
|
|
48
|
+
|
|
49
|
+
Trabajas en tu asistente (Claude Desktop / Copilot en el IDE), no en la terminal. Una vez,
|
|
50
|
+
deja las skills disponibles:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm i -g @dforce2055/dai # el CLI
|
|
54
|
+
dai install # skills de IA → tu Claude (Desktop y Code)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Y después, en el chat del asistente, según lo que tengas:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
/grill-user-story # una historia → te interroga y la publica en el tracker
|
|
61
|
+
/grill-epic # algo grande → una épica partida en varias US
|
|
62
|
+
/doc-to-backlog <PDF/Word> # un documento de análisis → backlog candidato de épicas + US
|
|
63
|
+
/grill-intent # (opcional) Gate 0: ¿es el problema correcto, antes de escribir?
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
> Las skills **te interrogan** hasta que la historia es testeable (nunca inventan
|
|
67
|
+
> requerimientos: los sacan a preguntas), y la **publican en el tracker** que configuraste
|
|
68
|
+
> (`DAI_PM` en el `.env`): por el **MCP** de Jira/ClickUp si está conectado, o con
|
|
69
|
+
> **`dai publish <us.md>`** si no (crea el issue vía token). Tú respondes y decides.
|
|
70
|
+
|
|
71
|
+
### 🔵 Como dev — tengo una US y voy a implementarla
|
|
72
|
+
|
|
73
|
+
Una vez, preparas el repo:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm i -g @dforce2055/dai
|
|
77
|
+
cd mi-repo && dai init # bootstrap: skills + tracker + OpenSpec + PR template
|
|
78
|
+
# completa el token del tracker en .env (o DAI_PM=md para probar sin credenciales)
|
|
79
|
+
dai doctor # verifica que todo quedó en su lugar
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Y por cada US, el ciclo completo:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
dai link-us <ID> # trae la US del tracker → branch + implements.yaml
|
|
86
|
+
```
|
|
87
|
+
```text
|
|
88
|
+
/opsx:explore → /opsx:propose # exploras la solución y armas el diseño + tareas
|
|
89
|
+
/opsx:apply · /tdd # implementas con tests primero → genera los commits
|
|
90
|
+
```
|
|
91
|
+
```bash
|
|
92
|
+
dai check # ¿tu código sigue al día con la US? ✅ / ⚠️ atrasado
|
|
93
|
+
# revisas tu propio código + smoke test local antes de la PR
|
|
94
|
+
dai pr --assignee <compañero> # crea la PR precargada y se la asigna a un compañero
|
|
95
|
+
```
|
|
96
|
+
```text
|
|
97
|
+
/dai-review <PR> # tu compañero deja un review estándar; un humano aprueba
|
|
98
|
+
```
|
|
99
|
+
```bash
|
|
100
|
+
dai stamp # al mergear: estampa la cobertura en el tracker
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Cómo usarlo — el flujo, paso a paso
|
|
104
|
+
|
|
105
|
+
Guía completa con salidas reales en [`docs/PROBAR.md`](docs/PROBAR.md); un caso narrado en
|
|
106
|
+
[`docs/EJEMPLO-END-TO-END.md`](docs/EJEMPLO-END-TO-END.md).
|
|
107
|
+
|
|
108
|
+
```mermaid
|
|
109
|
+
flowchart TD
|
|
110
|
+
subgraph QUE["🟡 EL QUÉ · funcional (PO / analista)"]
|
|
111
|
+
A["💡 Idea / problema"] -->|"/grill-user-story 🤖"| B["📋 US testeable"]
|
|
112
|
+
B -->|"dai publish ⚙️ · o MCP"| C[("🎯 US en el tracker (Jira / ClickUp)")]
|
|
113
|
+
end
|
|
114
|
+
subgraph COMO["🔵 EL CÓMO · técnico (dev)"]
|
|
115
|
+
C -->|"dai link-us ⚙️"| D["🌿 branch + implements.yaml"]
|
|
116
|
+
D -->|"/opsx:propose 🤖"| E["📐 design + tasks"]
|
|
117
|
+
E -->|"/tdd 🤖"| F["🧪 código + tests"]
|
|
118
|
+
F -->|"dai check ⚙️"| G{"¿al día?"}
|
|
119
|
+
G -->|"✅ sí"| H["🔀 dai pr ⚙️"]
|
|
120
|
+
H -->|"/dai-review 🤖 + 👤 firma"| I["✅ merge"]
|
|
121
|
+
I -->|"dai stamp ⚙️"| J[("🎯 cobertura estampada")]
|
|
122
|
+
end
|
|
123
|
+
G -.->|"⚠️ el QUÉ cambió (@version)"| C
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> **Leyenda:** 🤖 skill de IA · ⚙️ comando `dai` · 👤 un humano firma · 🎯 el tracker.
|
|
127
|
+
> La línea punteada es la **detección de drift**: si el PO edita la US, `dai check` lo marca
|
|
128
|
+
> ⚠️ y volvés a sincronizar. *(El diagrama se renderiza en GitHub; el detalle, en la tabla.)*
|
|
129
|
+
|
|
130
|
+
| # | Fase | Cómo | Quién |
|
|
131
|
+
|---|---|---|---|
|
|
132
|
+
| 1 | **Instalar el CLI** | `npm i -g @dforce2055/dai` (o `npm link` en dev) · `dai --version` | dev |
|
|
133
|
+
| 2 | **Bootstrap del repo** | `dai init` → `.dai` + Claude/Copilot + config + PR template | dev/lead |
|
|
134
|
+
| 3a | **Definir el QUÉ** | `/grill-user-story` (una US) · `/grill-epic` (algo grande) · `/doc-to-backlog` (un doc) — te interrogan hasta una US testeable | PO / analista |
|
|
135
|
+
| 3b | **Publicar la US** | la skill la sube al tracker vía **MCP**, o con **`dai publish <us.md>`** (crea el issue vía token, sin MCP) → devuelve el key | PO / IA |
|
|
136
|
+
| 4 | **Linkear la US** | `dai link-us <ID>` → branch + `openspec/changes/<id>/implements.yaml` | dev |
|
|
137
|
+
| 5 | **Verificar / listar** | `dai check` (¿al día?) · `dai ls` (qué implementa el repo) | dev |
|
|
138
|
+
| 6 | **Resincronizar** *(si el PO editó la US)* | `dai link-us <ID> --resync` | dev |
|
|
139
|
+
| 7 | **Diseñar el CÓMO** | en el asistente: `/opsx:explore` → `/opsx:propose` → design + tasks | dev + IA |
|
|
140
|
+
| 8 | **Implementar** | `/opsx:apply` → implementa la US con TDD y genera los commits | dev + IA |
|
|
141
|
+
| 9 | **Code review propio** | revisas tu implementación (correctitud + calidad) antes de la PR | dev |
|
|
142
|
+
| 10 | **Smoke test** | pides al agente un smoke local del flujo | dev + IA |
|
|
143
|
+
| 11 | **Crear la PR** | `dai pr` → pregunta la branch base, arma el texto, lo muestra, confirma, pushea y crea la PR/MR | dev |
|
|
144
|
+
| 12 | **Review de un partner** | skill `/dai-review <PR>` deja un comentario estándar; un humano aprueba | partner |
|
|
145
|
+
| 13 | **Merge + estampar** | al mergear: `dai stamp` → cobertura inversa en el tracker | dev / CI |
|
|
146
|
+
| 14 | **Cerrar la US** | `dai done` → vuelve a la base, actualiza y borra la branch local (si está mergeada) | dev |
|
|
147
|
+
|
|
148
|
+
> **Paso 3b (publicar):** el MCP crea el issue interactivamente; `dai publish` necesita el
|
|
149
|
+
> token del tracker en `.env` (Jira además `DAI_JIRA_PROJECT`, ClickUp `DAI_CLICKUP_LIST_ID`).
|
|
150
|
+
>
|
|
151
|
+
> **Paso 7 (OpenSpec):** `dai init` te ofrece instalarlo **e inicializarlo** solo. Si los
|
|
152
|
+
> comandos `/opsx:*` no aparecen en el asistente, reinicia el IDE (se cargan al arrancar).
|
|
153
|
+
>
|
|
154
|
+
> **Paso 11 (PR):** necesita un remoto git (`origin`) y `gh`/`glab` autenticado. Sin remoto,
|
|
155
|
+
> dai no crea la PR (te deja el texto listo igual).
|
|
156
|
+
|
|
157
|
+
## Comandos
|
|
158
|
+
|
|
159
|
+
| Comando | Qué hace |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `dai init [<repo>]` | scaffolder interactivo del repo. Flags: `--for claude\|copilot\|both` (asistente, ver arriba) · `--pm md\|jira\|clickup` (tracker) · `--openspec` |
|
|
162
|
+
| `dai install [--global \| --local <repo>] [--force] [--dry-run]` | instala/actualiza las skills de IA en Claude. `--force` re-copia aunque ya existan (para **actualizar** tras una nueva versión). Ej: `dai install --local . --force` (este repo) · `dai install --global --force` (tu Claude) |
|
|
163
|
+
| `dai publish <us.md>` | crea la US en el tracker (Jira/ClickUp/md) desde un `.md` y devuelve el key. Es el fallback del MCP para publicar sin el asistente |
|
|
164
|
+
| `dai link-us <ID> [--us <md>]` | crea branch + `implements.yaml`; sin `--us` trae la US del tracker |
|
|
165
|
+
| `dai link-us <ID> --resync` | re-estampa el `ac_hash` contra la US viva (tras un ⚠️ de check) |
|
|
166
|
+
| `dai check` | compara tu código vs la US viva → ✅ al día / ⚠️ atrasado (exit code = gate de PR) |
|
|
167
|
+
| `dai ls [--json]` | lista las US que implementa el repo + su link al tracker |
|
|
168
|
+
| `dai pr [--assignee u] [--base b] [--draft] [--yes]` | crea TU PR/MR precargada: pregunta la branch base (default `main`), muestra el texto y confirma antes de publicar |
|
|
169
|
+
| `dai stamp` | estampa la cobertura inversa en el tracker (branch + commit-ancla) |
|
|
170
|
+
| `dai done [--base main] [--force]` | cierra la US: vuelve a la base, `fetch --prune` + `pull`, y borra la branch local **si está mergeada** (chequeo estricto; `--force` la borra igual). Redes: no estar en la base, sin cambios sueltos, sin commits sin pushear |
|
|
171
|
+
| `dai forge comment <ref> --body-file <f>` · `dai forge pr <ref>` | comentar / leer una PR/MR (GitHub/GitLab) |
|
|
172
|
+
| `dai ac-hash <us.md>` | calcula el hash de los criterios de aceptación de una US |
|
|
173
|
+
| `dai doctor` · `dai docs <dest>` · `dai --version` | diagnóstico del entorno · copiar la doc · versión |
|
|
174
|
+
|
|
175
|
+
Skills (se invocan en el asistente): `/doc-to-backlog` · `/grill-intent` · `/grill-epic` · `/grill-user-story` · `/link-us` ·
|
|
176
|
+
`/tdd` · `/dai-review`. Config del tracker (`md`\|`jira`\|`clickup`) y tokens: en `.env` —
|
|
177
|
+
ver [`.env.example`](.env.example). Auth (SSH + tokens): [ADR-0007](docs/adr/0007-modelo-de-autenticacion.md).
|
|
178
|
+
|
|
179
|
+
## El flag `--for` — ¿para qué asistente preparo el repo?
|
|
180
|
+
|
|
181
|
+
`dai init` genera los archivos que hacen que las skills de IA (`grill-user-story`,
|
|
182
|
+
`link-us`, etc.) estén disponibles en tu asistente. `--for` elige **para cuál**:
|
|
183
|
+
|
|
184
|
+
| Valor | Genera | Elígelo si… |
|
|
185
|
+
|---|---|---|
|
|
186
|
+
| `--for claude` | `.claude/skills/` + `CLAUDE.md` | tu equipo usa **Claude** (Code / Desktop) |
|
|
187
|
+
| `--for copilot` | `.github/prompts/*.prompt.md` + `.github/copilot-instructions.md` | tu equipo usa **GitHub Copilot** (en VS Code / JetBrains) |
|
|
188
|
+
| `--for both` *(default)* | **ambos** | equipo **mixto** (unos con Claude, otros con Copilot) |
|
|
189
|
+
|
|
190
|
+
- Es **aditivo, no destructivo**: los dos conjuntos conviven sin pisarse (viven en
|
|
191
|
+
carpetas distintas). La **misma** skill se transforma al formato de cada asistente.
|
|
192
|
+
- Si ejecutas `dai init` sin flag, te lo pregunta de forma interactiva.
|
|
193
|
+
- **No afecta el CLI:** `dai link-us` / `check` / `stamp` funcionan igual con cualquier
|
|
194
|
+
`--for` (o ninguno) — el flag solo prepara la **invocación de skills** en el asistente.
|
|
195
|
+
- Ante la duda, `--for both`: cubre a todo el equipo y no cuesta nada.
|
|
196
|
+
|
|
197
|
+
## Lo que obtienes en tu repo
|
|
198
|
+
|
|
199
|
+
Después de `dai init` (con `--for both`):
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
mi-repo/
|
|
203
|
+
├── CLAUDE.md · Constitución del proyecto (auto-cargada por Claude)
|
|
204
|
+
├── .env · configurado con tu tracker (gitignored, completa el token)
|
|
205
|
+
├── .claude/skills/ · Las skills, locales al repo (el equipo las hereda)
|
|
206
|
+
│ └── doc-to-backlog · grill-intent · grill-epic · grill-user-story · link-us · tdd · dai-review
|
|
207
|
+
├── .github/
|
|
208
|
+
│ ├── copilot-instructions.md · La constitución, auto-inyectada en cada chat de Copilot
|
|
209
|
+
│ ├── prompts/*.prompt.md · Las mismas skills, generadas en formato Copilot
|
|
210
|
+
│ └── pull_request_template.md · Molde de PR/MR atado al link
|
|
211
|
+
└── .dai/
|
|
212
|
+
├── templates/ · formato-us · epica · DoR · DoD · adr · pull-request
|
|
213
|
+
└── governance/ · branch-naming · ci-rules · commit-convention
|
|
214
|
+
|
|
215
|
+
Al trabajar se suma:
|
|
216
|
+
└── openspec/changes/<id>/ · implements.yaml (el link) + proposal · design · tasks
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
> **¿Cómo se ve un `implements.yaml`?** Ejemplo lleno + el árbol de dónde vive entre los
|
|
220
|
+
> artefactos de OpenSpec, en [ADR-0004](docs/adr/0004-ubicacion-y-schema-implements.md).
|
|
221
|
+
|
|
222
|
+
### Dónde se invocan las skills (por asistente)
|
|
223
|
+
|
|
224
|
+
Las skills se invocan en el asistente — **no en todas sus superficies** (límite del asistente, no de dai):
|
|
225
|
+
|
|
226
|
+
| Asistente / superficie | ¿Skills? | Mecanismo |
|
|
227
|
+
|---|---|---|
|
|
228
|
+
| **Claude Desktop** | ✅ | `~/.claude/skills/` (global) — sin IDE ni consola |
|
|
229
|
+
| **Claude Code** | ✅ | `~/.claude/skills/` + `.claude/skills/` del repo |
|
|
230
|
+
| **Copilot en VS Code / JetBrains** | ✅ | los `.github/prompts/*.prompt.md` |
|
|
231
|
+
| **Copilot CLI** | ✅ | custom agents |
|
|
232
|
+
| **Copilot app standalone / github.com chat** | ❌ | los prompt files son solo-IDE |
|
|
233
|
+
|
|
234
|
+
El analista sin IDE cierra con **Claude Desktop**; con Copilot necesita **VS Code o el Copilot
|
|
235
|
+
CLI**. El CLI `dai` corre en cualquier terminal, con cualquier asistente o ninguno.
|
|
236
|
+
|
|
237
|
+
## Se adapta a cualquier escala
|
|
238
|
+
|
|
239
|
+
**Un protocolo invariante** para, sólo developer, equipos chicos y grandes,
|
|
240
|
+
una misma ceremonia. **N1** (un dev, todo local) → **N2** (equipo + tracker) → **N3**
|
|
241
|
+
(muchos repos, CI que estampa). Cada capa se agrega cuando es necesario, no antes.
|
|
242
|
+
El dev que lo usa en un equipo chico, está listo para usarlo en equipos grandes distribuidos.
|
|
243
|
+
|
|
244
|
+
## Por dónde empezar a leer
|
|
245
|
+
|
|
246
|
+
1. **[`docs/MANIFIESTO.md`](docs/MANIFIESTO.md)** — la ley: 4 valores + 15 artículos. 5 minutos.
|
|
247
|
+
2. **[`docs/SCRUM-CON-IA.md`](docs/SCRUM-CON-IA.md)** — tu Scrum de siempre, en 10 pasos con IA.
|
|
248
|
+
3. **[`docs/EJEMPLO-END-TO-END.md`](docs/EJEMPLO-END-TO-END.md)** — el golden path sobre una US real.
|
|
249
|
+
4. **[`docs/METODOLOGIA.md`](docs/METODOLOGIA.md)** — el detalle del protocolo y el porqué.
|
|
250
|
+
|
|
251
|
+
Además: [`docs/glosario.md`](docs/glosario.md) · guías por rol ([`po`](docs/guias/po.md) ·
|
|
252
|
+
[`dev`](docs/guias/dev.md) · [`lead`](docs/guias/lead.md)) · [decisiones (ADRs)](docs/adr/) ·
|
|
253
|
+
[landing](index.html).
|
|
254
|
+
|
|
255
|
+
## Qué hay en la caja (el paquete dai)
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
dai/
|
|
259
|
+
├── cli/ 🖥️ el binario `dai` (Node, cero dependencias) + su suite de tests
|
|
260
|
+
├── docs/ 📖 la metodología: MANIFIESTO · METODOLOGIA · SCRUM-CON-IA · EJEMPLO ·
|
|
261
|
+
│ glosario · guias/ · detalle/ (10 pasos) · adr/ (0001–0007)
|
|
262
|
+
├── templates/ 🧩 los moldes (formato-us · epica · DoR · DoD · adr · pull-request)
|
|
263
|
+
├── skills/ 🤖 doc-to-backlog · grill-intent · grill-epic · grill-user-story · link-us · tdd · dai-review
|
|
264
|
+
├── governance/ 🛡️ branch-naming · ci-rules · commit-convention
|
|
265
|
+
├── index.html 📊 landing autocontenido (la historia); publicable por GitHub Pages
|
|
266
|
+
└── manifest.yaml · VERSION · install.sh (shim) · .env.example
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Licencia
|
|
270
|
+
|
|
271
|
+
**GPLv3** (`GPL-3.0-or-later`) — ver [`LICENSE`](LICENSE). Software libre: puedes verlo,
|
|
272
|
+
auditarlo, modificarlo y redistribuirlo; si distribuyes una versión modificada, tiene que
|
|
273
|
+
quedar también libre. *Libre no es gratis*: se puede cobrar por uso, soporte o desarrollo.
|
|
274
|
+
Detalle en [ADR-0006](docs/adr/0006-distribucion-y-licencia.md).
|
|
275
|
+
|
|
276
|
+
> **Ayúdanos a mejorar dai** 🌱 — es software libre y una **metodología viva**: se hace mejor
|
|
277
|
+
> con la comunidad. Si te sirve, cuenta tu experiencia, reporta lo que falle y propón mejoras.
|
|
278
|
+
> Toda contribución al método o a la herramienta es bienvenida. Empieza por
|
|
279
|
+
> [`CONTRIBUTING.md`](CONTRIBUTING.md).
|
|
280
|
+
|
|
281
|
+
## Agradecimientos
|
|
282
|
+
|
|
283
|
+
dai se apoya en ideas y aprendizajes de la comunidad. En particular, gracias a
|
|
284
|
+
**[Matt Pocock](https://github.com/mattpocock)** por su aporte con las *skills* y por su
|
|
285
|
+
[canal de YouTube](https://www.youtube.com/@mattpocockuk) explicándolas — su trabajo nos ayudó
|
|
286
|
+
a construir esta herramienta.
|
|
287
|
+
|
|
288
|
+
Seguridad: [`SECURITY.md`](SECURITY.md) · Conducta: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Política de seguridad
|
|
2
|
+
|
|
3
|
+
## Reportar una vulnerabilidad
|
|
4
|
+
|
|
5
|
+
Si encuentras un problema de seguridad, **no abras un issue público**. Escribe a
|
|
6
|
+
**dperez2055@gmail.com** con:
|
|
7
|
+
|
|
8
|
+
- Descripción del problema y su impacto.
|
|
9
|
+
- Pasos para reproducirlo.
|
|
10
|
+
- Versión afectada (`dai --version`).
|
|
11
|
+
|
|
12
|
+
Vas a recibir acuse de recibo. Se coordina la corrección y la divulgación una vez que
|
|
13
|
+
haya un fix disponible.
|
|
14
|
+
|
|
15
|
+
## Modelo de seguridad de dai
|
|
16
|
+
|
|
17
|
+
- **Sin secretos en el repo.** Los tokens viven en `.env` (gitignored) o en el secret
|
|
18
|
+
store del CI, nunca versionados. Solo se versiona `.env.example` (nombres, no
|
|
19
|
+
valores). Ver [ADR-0007](docs/adr/0007-modelo-de-autenticacion.md).
|
|
20
|
+
- **Sin contraseñas.** git usa **SSH**; forge y tracker usan **tokens scopeados** y
|
|
21
|
+
revocables, con el mínimo scope necesario.
|
|
22
|
+
- **Cero dependencias de runtime.** No hay árbol de dependencias transitivas que
|
|
23
|
+
auditar ni por el que entren vulnerabilidades. El CLI usa solo la stdlib de Node.
|
|
24
|
+
- **Sin ejecución de shell con input del usuario.** Las llamadas a git usan
|
|
25
|
+
`execFileSync` con argumentos como array (no `shell: true`), evitando inyección.
|
|
26
|
+
|
|
27
|
+
## Buenas prácticas para quien usa dai
|
|
28
|
+
|
|
29
|
+
- Usa **tokens de mínimo scope** (para comentar PRs alcanza con permiso de
|
|
30
|
+
pull-requests/notes; no un PAT de acceso total).
|
|
31
|
+
- **Rota** los tokens periódicamente y revoca los que no uses.
|
|
32
|
+
- Nunca pegues un token en el código, en un commit, ni en el `implements.yaml`.
|
|
33
|
+
- Revisa qué se publica antes de un release: `npm pack --dry-run`.
|
|
34
|
+
|
|
35
|
+
## Versiones soportadas
|
|
36
|
+
|
|
37
|
+
Se da soporte a la última versión publicada. Actualiza antes de reportar.
|
package/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.0
|