@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.
Files changed (81) hide show
  1. package/.env.example +30 -0
  2. package/CHANGELOG.md +46 -0
  3. package/CODE_OF_CONDUCT.md +37 -0
  4. package/CONTRIBUTING.md +66 -0
  5. package/LICENSE +674 -0
  6. package/README.md +288 -0
  7. package/SECURITY.md +37 -0
  8. package/VERSION +1 -0
  9. package/cli/dai.mjs +692 -0
  10. package/cli/lib/ac-hash.mjs +74 -0
  11. package/cli/lib/args.mjs +23 -0
  12. package/cli/lib/bootstrap.mjs +74 -0
  13. package/cli/lib/env.mjs +23 -0
  14. package/cli/lib/forge-api.mjs +96 -0
  15. package/cli/lib/forge-url.mjs +61 -0
  16. package/cli/lib/fsutil.mjs +24 -0
  17. package/cli/lib/implements.mjs +94 -0
  18. package/cli/lib/link-us.mjs +59 -0
  19. package/cli/lib/pm-adapter.mjs +59 -0
  20. package/cli/lib/pm-clickup.mjs +54 -0
  21. package/cli/lib/pm-jira.mjs +123 -0
  22. package/cli/lib/pr.mjs +53 -0
  23. package/cli/lib/us.mjs +36 -0
  24. package/docs/EJEMPLO-END-TO-END.md +330 -0
  25. package/docs/MANIFIESTO.md +114 -0
  26. package/docs/METODOLOGIA.md +254 -0
  27. package/docs/PROBAR.md +91 -0
  28. package/docs/SCRUM-CON-IA.md +190 -0
  29. package/docs/adr/0001-contrato-ac-hash.md +86 -0
  30. package/docs/adr/0002-agnostico-del-asistente.md +87 -0
  31. package/docs/adr/0003-deteccion-y-estampado-son-comandos.md +73 -0
  32. package/docs/adr/0004-ubicacion-y-schema-implements.md +94 -0
  33. package/docs/adr/0005-superficie-comandos-y-stamp.md +65 -0
  34. package/docs/adr/0006-distribucion-y-licencia.md +59 -0
  35. package/docs/adr/0007-modelo-de-autenticacion.md +63 -0
  36. package/docs/adr/README.md +19 -0
  37. package/docs/detalle/01-refinamiento.md +33 -0
  38. package/docs/detalle/02-planning.md +27 -0
  39. package/docs/detalle/03-ramas.md +32 -0
  40. package/docs/detalle/04-tdd.md +35 -0
  41. package/docs/detalle/05-smoke.md +32 -0
  42. package/docs/detalle/06-code-review.md +34 -0
  43. package/docs/detalle/07-merge-trazabilidad.md +33 -0
  44. package/docs/detalle/08-daily.md +29 -0
  45. package/docs/detalle/09-review.md +25 -0
  46. package/docs/detalle/10-retro.md +27 -0
  47. package/docs/detalle/README.md +20 -0
  48. package/docs/glosario.md +79 -0
  49. package/docs/guias/dev.md +66 -0
  50. package/docs/guias/lead.md +53 -0
  51. package/docs/guias/po.md +50 -0
  52. package/governance/branch-naming.md +36 -0
  53. package/governance/ci-rules.md +57 -0
  54. package/governance/commit-convention.md +76 -0
  55. package/index.html +479 -0
  56. package/install.sh +19 -0
  57. package/manifest.yaml +76 -0
  58. package/package.json +55 -0
  59. package/skills/dai-review/SKILL.md +78 -0
  60. package/skills/doc-to-backlog/SKILL.md +70 -0
  61. package/skills/doc-to-backlog/templates/backlog-candidato.md +49 -0
  62. package/skills/grill-epic/SKILL.md +76 -0
  63. package/skills/grill-intent/SKILL.md +43 -0
  64. package/skills/grill-intent/templates/intent.md +36 -0
  65. package/skills/grill-user-story/SKILL.md +76 -0
  66. package/skills/grill-user-story/templates/user-story.md +61 -0
  67. package/skills/link-us/SKILL.md +42 -0
  68. package/skills/link-us/templates/implements.yaml +16 -0
  69. package/skills/tdd/SKILL.md +109 -0
  70. package/skills/tdd/deep-modules.md +33 -0
  71. package/skills/tdd/interface-design.md +31 -0
  72. package/skills/tdd/mocking.md +59 -0
  73. package/skills/tdd/refactoring.md +10 -0
  74. package/skills/tdd/tests.md +61 -0
  75. package/templates/adr.md +43 -0
  76. package/templates/commit-msg +48 -0
  77. package/templates/definition-of-done.md +50 -0
  78. package/templates/definition-of-ready.md +51 -0
  79. package/templates/epica.md +62 -0
  80. package/templates/formato-us.md +129 -0
  81. package/templates/pull-request.md +62 -0
package/README.md ADDED
@@ -0,0 +1,288 @@
1
+ # dai — Desarrollo Asistido por IA
2
+
3
+ [![CI](https://github.com/dforce2055/dai/actions/workflows/ci.yml/badge.svg)](https://github.com/dforce2055/dai/actions/workflows/ci.yml)
4
+ [![license: GPL-3.0](https://img.shields.io/badge/license-GPLv3-blue.svg)](LICENSE)
5
+ [![node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](package.json)
6
+ [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
7
+ [![sitio](https://img.shields.io/badge/sitio-dforce2055.github.io%2Fdai-6366f1.svg)](https://dforce2055.github.io/dai/)
8
+ <!-- El badge de npm se agrega tras `npm publish` (snippet en RELEASING.md):
9
+ [![npm](https://img.shields.io/npm/v/@dforce2055/dai.svg)](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