@dforce2055/dai 0.8.2 → 0.10.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 (55) hide show
  1. package/{.env.example → .env.dai.example} +3 -3
  2. package/CHANGELOG.md +81 -0
  3. package/README.md +41 -29
  4. package/VERSION +1 -1
  5. package/cli/dai.mjs +175 -44
  6. package/cli/lib/bootstrap.mjs +42 -7
  7. package/cli/lib/env.mjs +12 -0
  8. package/cli/lib/forge-api.mjs +89 -2
  9. package/cli/lib/pm-clickup.mjs +2 -2
  10. package/cli/lib/pm-jira.mjs +2 -2
  11. package/cli/lib/review-findings.mjs +195 -0
  12. package/cli/lib/skills-source.mjs +8 -0
  13. package/docs/EJEMPLO-END-TO-END.md +52 -43
  14. package/docs/MANIFIESTO.md +2 -2
  15. package/docs/METODOLOGIA.md +20 -15
  16. package/docs/PROBAR.md +13 -14
  17. package/docs/SCRUM-CON-IA.md +10 -10
  18. package/docs/adr/0003-deteccion-y-estampado-son-comandos.md +1 -1
  19. package/docs/adr/0006-distribucion-y-licencia.md +1 -1
  20. package/docs/adr/0013-skills-externas-install-from.md +11 -4
  21. package/docs/adr/0015-jira-corporativo.md +1 -1
  22. package/docs/adr/0016-review-inline.md +128 -0
  23. package/docs/adr/0017-env-dai.md +64 -0
  24. package/docs/adr/README.md +2 -0
  25. package/docs/detalle/01-refinamiento.md +6 -5
  26. package/docs/detalle/03-ramas.md +2 -2
  27. package/docs/detalle/04-tdd.md +15 -9
  28. package/docs/detalle/06-code-review.md +8 -5
  29. package/docs/detalle/08-daily.md +1 -1
  30. package/docs/detalle/README.md +1 -1
  31. package/docs/glosario.md +2 -2
  32. package/docs/guias/dev.md +10 -7
  33. package/docs/guias/index.md +12 -0
  34. package/docs/guias/lead.md +1 -1
  35. package/docs/guias/po.md +13 -7
  36. package/docs/index.md +35 -0
  37. package/docs/public/favicon.svg +12 -0
  38. package/docs/public/logo-link.svg +12 -0
  39. package/docs/public/logo.svg +12 -0
  40. package/docs/public/tutoriales/clickup-1-settings.png +0 -0
  41. package/docs/public/tutoriales/clickup-2-api.png +0 -0
  42. package/docs/public/tutoriales/clickup-3-generate-copy.png +0 -0
  43. package/docs/public/tutoriales/jira-1-avatar.png +0 -0
  44. package/docs/public/tutoriales/jira-2-seguridad-tokens.png +0 -0
  45. package/docs/public/tutoriales/jira-3-crear-token.png +0 -0
  46. package/docs/public/tutoriales/jira-4-nombre-vencimiento.png +0 -0
  47. package/docs/public/tutoriales/jira-5-copiar.png +0 -0
  48. package/docs/tutoriales/claves-ssh.md +93 -0
  49. package/docs/tutoriales/configurar-git.md +53 -0
  50. package/docs/tutoriales/index.md +18 -0
  51. package/docs/tutoriales/instalar-glab.md +74 -0
  52. package/docs/tutoriales/token-clickup.md +73 -0
  53. package/docs/tutoriales/token-jira.md +74 -0
  54. package/package.json +9 -3
  55. package/skills/dai-review/SKILL.md +96 -42
@@ -1,6 +1,6 @@
1
- # dai · configuración del adaptador de PM (copiar a .env y completar).
2
- # El .env está gitignoreado para no filtrar secretos. Este .example se versiona.
3
- # Las variables ya exportadas en la shell/CI ganan sobre el .env.
1
+ # dai · configuración del adaptador de PM (copiar a .env.dai y completar).
2
+ # El .env.dai NO se versiona (evita filtrar secretos) y el .env del equipo no se toca
3
+ # (ADR-0017). Este .example se versiona. Precedencia: shell/CI > .env.dai > .env.
4
4
 
5
5
  # ── Backend del tracker ──────────────────────────────────────────────────────
6
6
  # md | jira | clickup
package/CHANGELOG.md CHANGED
@@ -3,6 +3,85 @@
3
3
  Formato basado en [Keep a Changelog](https://keepachangelog.com/). Versionado semver
4
4
  (ver `VERSION`).
5
5
 
6
+ ## [0.10.0] — 2026-07-18
7
+
8
+ **La config de dai deja de vivir en el `.env` del equipo y pasa a un `.env.dai` propio (no
9
+ versionado). Resuelve el caso de las empresas que versionan el `.env` como política: dai no
10
+ toca ese archivo y guarda sus secretos donde git realmente los ignora. Y `dai init` estrena
11
+ una bienvenida con el Sol de Mayo en bloques.**
12
+
13
+ ### Agregado
14
+ - **Banner de bienvenida en `dai init`**: el Sol de Mayo de dai en bloques (cuerpo y rayos
15
+ rectos en oro, rayos ondulados en celeste) junto al título, más un preview de lo que se va
16
+ a configurar. Cero dependencias (solo ANSI); degrada a ASCII sin color en no-TTY o con
17
+ `NO_COLOR`.
18
+ - **`dai skills install --from npm:@scope/pkg`** — nueva fuente para skills externas
19
+ ([ADR-0013](docs/adr/0013-skills-externas-install-from.md)): además de git URL y path
20
+ local, ahora un **paquete npm**. dai hace `npm install` a un temp (respetando el `.npmrc`
21
+ del repo, así resuelve **registries privados con scope**; `npm pack` no sirve con los
22
+ registries de grupo de GitLab). Es común distribuir skills como paquete npm; antes había
23
+ que materializarlo a mano.
24
+ - **Descripciones en bloque YAML (`|` / `>`) en el frontmatter de las skills.** El parser
25
+ de frontmatter ahora lee bloques literales/plegados multilínea (antes tomaba solo la
26
+ primera línea `|` y el validador lo rechazaba). Es como se escriben las skills reales:
27
+ descripciones ricas con "USAR CUANDO / NO USAR CUANDO" que el agente usa para elegirlas.
28
+
29
+ ### Cambiado
30
+ - **`dai init` escribe en `.env.dai` + `.env.dai.example`, no en `.env`/`.env.example`**
31
+ ([ADR-0017](docs/adr/0017-env-dai.md)). El `.env` del equipo queda intacto (dai solo lo
32
+ lee). `.env.dai` (secretos) se gitignorea; `.env.dai.example` (plantilla) se versiona.
33
+ En un repo sin `.env`, dai ya no crea uno: es del equipo, no de dai.
34
+ - **El loader lee `.env.dai` y `.env`** con precedencia **shell/CI > `.env.dai` > `.env`**.
35
+ Seguir leyendo `.env` mantiene la compatibilidad: los repos que ya tenían los `DAI_*` ahí
36
+ no se rompen.
37
+ - **`.gitignore`**: dai ignora `.env.dai` (su archivo), no `.env`. Ya no fuerza un ignore
38
+ sobre un archivo que muchas orgs versionan a propósito.
39
+ - Se renombró el `.env.example` del paquete a `.env.dai.example`, y se actualizaron doctor,
40
+ mensajes de init/sync, tutoriales, constitución y README a la nueva convención.
41
+
42
+ ### Interno
43
+ - **228 tests** (+4 desde 0.9.0): precedencia de `loadDaiEnv` (shell > `.env.dai` > `.env`),
44
+ compat con `.env`, y sin-archivos. Smokes de `dai init` con y sin `.env` preexistente.
45
+
46
+ ## [0.9.0] — 2026-07-17
47
+
48
+ **El review de dai deja de ser un comentario al final del hilo y pasa a ser un review
49
+ _inline_: un resumen más un comentario anclado a cada `archivo:línea`, clasificado
50
+ low/medium/high — como el de Copilot, pero con la puerta humana y la validación que a
51
+ Copilot le faltan.**
52
+
53
+ ### Agregado
54
+ - **`dai forge review <ref> --from <review.json>`** — review inline en GitHub y GitLab.
55
+ La skill `dai-review` produce un `review.json` (el criterio); el CLI hace lo mecánico
56
+ (ADR-0002): **valida que cada `path:line` exista de verdad en el diff** —traído con git,
57
+ local, por SSH— antes de salir a la red. Inventar líneas es el error más común de un
58
+ LLM revisando código, y el forge responde `422` sin decir cuál falló; en GitHub, que es
59
+ atómico, un hallazgo inventado tira los buenos. Lo descartado y lo filtrado **se
60
+ reportan**, nunca se caen en silencio.
61
+ - **Puerta humana explícita.** Sin `--yes` no se postea nada: se muestra el preview y se
62
+ corta. `--dry-run` valida sin postear. Modo desatendido para reviews simples
63
+ (`--yes --min-severity --min-confidence --max-comments`), pero es una **excepción que
64
+ el humano pide**, no un default. El review sale siempre con `event: COMMENT`, nunca
65
+ `APPROVE` — dai comenta, la persona firma ([Art. 5](docs/MANIFIESTO.md#art-5)).
66
+ - **Aviso de release en Discord.** Publicar un release de GitHub dispara el workflow
67
+ `discord-release.yml`, que postea al canal vía el secreto `DISCORD_WEBHOOK_URL`. El
68
+ secreto vive en GitHub Actions, nunca en el repo; el workflow no viaja en el paquete
69
+ npm (`.github/` fuera de `files`), así que no le impone notificaciones a nadie que use
70
+ dai. Ver [ADR-0016](docs/adr/0016-review-inline.md).
71
+
72
+ ### Cambiado
73
+ - **`getPR` expone `headSha`, `baseRef` y `diffRefs`** — hacían falta para anclar un
74
+ comentario inline (GitHub necesita el sha del head; GitLab exige los tres shas de
75
+ `diff_refs` en cada comentario). `dai init` agrega `.dai/reviews/` al `.gitignore` del
76
+ repo (un review a medio editar no se commitea; `.dai/` sigue versionándose).
77
+
78
+ ### Interno
79
+ - **224 tests** (+40): el parser de diff con varios hunks y archivos borrados, el
80
+ descarte de líneas inventadas por lado, los filtros de severidad/confianza/tope, y la
81
+ asimetría GitHub (atómico) vs. GitLab (no atómico: reporta los parciales en vez de
82
+ fingir atomicidad). Probado end-to-end contra una PR real: el comentario quedó inline
83
+ en el archivo, el review salió `COMMENTED`, y el hallazgo alucinado nunca tocó la red.
84
+
6
85
  ## [0.8.2] — 2026-07-17
7
86
 
8
87
  **Dos agujeros que destapó el uso real, y que tienen la misma forma: dai hacía algo
@@ -366,6 +445,8 @@ ClickUp y Jira Cloud.
366
445
  - Tests de las rutas de red (jira/clickup/forge) con `fetch` mockeado. Sin links rotos;
367
446
  `files` de npm sin tests ni secretos.
368
447
 
448
+ [0.10.0]: https://github.com/dforce2055/dai/releases/tag/v0.10.0
449
+ [0.9.0]: https://github.com/dforce2055/dai/releases/tag/v0.9.0
369
450
  [0.8.2]: https://github.com/dforce2055/dai/releases/tag/v0.8.2
370
451
  [0.8.1]: https://github.com/dforce2055/dai/releases/tag/v0.8.1
371
452
  [0.8.0]: https://github.com/dforce2055/dai/releases/tag/v0.8.0
package/README.md CHANGED
@@ -63,10 +63,10 @@ Y después, en el chat del asistente, según lo que tengas:
63
63
 
64
64
  > Las skills **te interrogan** hasta que la historia es testeable (nunca inventan
65
65
  > requerimientos: los sacan a preguntas), y la **publican en el tracker** que configuraste
66
- > (`DAI_PM` en el `.env`): por el **MCP** de Jira/ClickUp si está conectado, o con
66
+ > (`DAI_PM` en el `.env.dai`): por el **MCP** de Jira/ClickUp si está conectado, o con
67
67
  > **`dai publish <us.md>`** si no (crea el issue vía token). Tú respondes y decides.
68
68
 
69
- ¿Sin MCP, o querés publicar a mano? `dai publish` sube el `.md` al tracker y te devuelve el key:
69
+ ¿Sin MCP, o quieres publicar a mano? `dai publish` sube el `.md` al tracker y te devuelve el key:
70
70
 
71
71
  ```bash
72
72
  dai publish historia.md # crea la US → devuelve el key
@@ -87,7 +87,7 @@ Una vez, preparas el repo:
87
87
  ```bash
88
88
  npm i -g @dforce2055/dai
89
89
  cd mi-repo && dai init # bootstrap: skills + tracker + OpenSpec + PR template
90
- # completa el token del tracker en .env (o DAI_PM=md para probar sin credenciales)
90
+ # completa el token del tracker en .env.dai (o DAI_PM=md para probar sin credenciales)
91
91
  dai doctor # verifica que todo quedó en su lugar
92
92
  ```
93
93
 
@@ -106,18 +106,18 @@ dai check # ¿tu código sigue al día con la US? ✅ /
106
106
  dai pr --assignee <compañero> # crea la PR precargada y se la asigna a un compañero
107
107
  ```
108
108
  ```text
109
- /dai-review <PR> # tu compañero deja un review estándar; un humano aprueba
109
+ /dai-review <PR> # tu compañero deja un review inline (comentario por línea); un humano aprueba
110
110
  ```
111
111
  ```bash
112
112
  dai stamp # al mergear: estampa la cobertura en el tracker
113
113
  ```
114
114
 
115
- > **Para que `dai pr` cree la PR/MR** necesitás el CLI del forge instalado y autenticado, una
115
+ > **Para que `dai pr` cree la PR/MR** necesitas el CLI del forge instalado y autenticado, una
116
116
  > sola vez por máquina:
117
117
  > - **GitHub** → [`gh`](https://cli.github.com) · `gh auth login`
118
118
  > - **GitLab** → [`glab`](https://gitlab.com/gitlab-org/cli) · `glab auth login --hostname <tu-gitlab>`
119
119
  > — en un GitLab self-hosted/corporativo el `--hostname` es **obligatorio**, y el token va con
120
- > scope `api`. (En Windows, tras instalar `glab` con `winget`, abrí una terminal nueva para que
120
+ > scope `api`. (En Windows, tras instalar `glab` con `winget`, abre una terminal nueva para que
121
121
  > tome el PATH.)
122
122
  >
123
123
  > Sin el CLI del forge, `dai pr` **igual pushea tu branch** y te dice qué instalar — después
@@ -164,15 +164,15 @@ flowchart TD
164
164
  | 9 | **Code review propio** | revisas tu implementación (correctitud + calidad) antes de la PR | dev |
165
165
  | 10 | **Smoke test** | pides al agente un smoke local del flujo | dev + IA |
166
166
  | 11 | **Crear la PR** | `dai pr` → pregunta la branch base, arma el texto, lo muestra, confirma, pushea y crea la PR/MR | dev |
167
- | 12 | **Review de un partner** | skill `/dai-review <PR>` deja un comentario estándar; un humano aprueba | partner |
167
+ | 12 | **Review de un partner** | skill `/dai-review <PR>` deja un **review inline** (resumen + un comentario por línea, low/medium/high); te muestra el preview y **espera tu OK** antes de postear; un humano aprueba | partner |
168
168
  | 13 | **Merge + estampar** | al mergear: `dai stamp` → cobertura inversa en el tracker | dev / CI |
169
169
  | 14 | **Cerrar la US** | `dai done` → vuelve a la base, actualiza y borra la branch local (si está mergeada) | dev |
170
170
 
171
171
  > **Paso 3b (publicar):** el MCP crea el issue interactivamente; `dai publish` necesita el
172
- > token del tracker en `.env` (Jira además `DAI_JIRA_PROJECT`, ClickUp `DAI_CLICKUP_LIST_ID`).
172
+ > token del tracker en `.env.dai` (Jira además `DAI_JIRA_PROJECT`, ClickUp `DAI_CLICKUP_LIST_ID`).
173
173
  >
174
174
  > **Paso 7 (OpenSpec):** `dai init` te ofrece instalarlo **e inicializarlo** solo. Si los
175
- > comandos `/opsx:*` no aparecen en el asistente, reinicia el IDE (se cargan al arrancar).
175
+ > comandos `/opsx:*` no aparecen en el asistente, reinicia el IDE (se cargan al iniciar).
176
176
  >
177
177
  > **Paso 11 (PR):** necesita un remoto git (`origin`) y `gh`/`glab` autenticado. Sin remoto,
178
178
  > dai no crea la PR (te deja el texto listo igual).
@@ -183,8 +183,8 @@ flowchart TD
183
183
  |---|---|
184
184
  | `dai init [<repo>]` | scaffolder interactivo del repo. Flags: `--for claude\|copilot\|both\|cursor\|all` (asistente, default `all`) · `--pm md\|jira\|clickup` (tracker) · `--openspec` |
185
185
  | `dai skills install [--global \| --local <repo>] [--force] [--dry-run] [--for claude\|copilot\|cursor\|all]` | instala/actualiza las skills de dai en Claude, Copilot y/o Cursor (`--for all` por defecto; Copilot global → `~/.copilot/skills`, local → `.github/skills/`). `--force` re-copia. Alias: **`dai install`**. Ej: `dai skills install --local . --for cursor --force` |
186
- | `dai skills install --from <git-url\|path>[#ref] [--for …]` | instala **skills externas** (por-stack: .NET, Java, …) desde un repo/dir, **convertidas para los 3 asistentes**. Self-service, one-off, sin registro; `dai sync` no las toca. Colisión con una skill de dai → salta ([ADR-0013](docs/adr/0013-skills-externas-install-from.md)). Ej: `dai skills install --from github.com/mi-org/net-skills` |
187
- | `dai sync [--dry-run] [--for <asistentes>]` | **refresca** skills, constitución, templates y PR template a la versión del CLI — **aditivo** (no pisa tu `CLAUDE.md`), no toca el `.env` ni OpenSpec. Detecta los asistentes del repo o pasás `--for`. `--dry-run` muestra qué cambiaría ([ADR-0010](docs/adr/0010-versionado-y-upgrade.md)) |
186
+ | `dai skills install --from <git-url\|npm:pkg\|path>[#ref] [--for …]` | instala **skills externas** (por-stack: .NET, Java, …) desde un repo/dir/**paquete npm**, **convertidas para los 3 asistentes**. Self-service, one-off, sin registro; `dai sync` no las toca. Colisión con una skill de dai → salta ([ADR-0013](docs/adr/0013-skills-externas-install-from.md)). Ej: `dai skills install --from github.com/mi-org/net-skills` · `dai skills install --from npm:@mi-org/ui-skills` (usa el `.npmrc` del repo → registries privados OK) |
187
+ | `dai sync [--dry-run] [--for <asistentes>]` | **refresca** skills, constitución, templates y PR template a la versión del CLI — **aditivo** (no pisa tu `CLAUDE.md`), no toca el `.env.dai` ni OpenSpec. Detecta los asistentes del repo o pasás `--for`. `--dry-run` muestra qué cambiaría ([ADR-0010](docs/adr/0010-versionado-y-upgrade.md)) |
188
188
  | `dai upgrade [--check] [--dry-run]` · alias `dai update` | **actualiza el CLI global** a la última publicada (`npm i -g …@latest`) — self-update. **No toca el repo**: reporta el drift del scaffold pero deja el `dai sync` al mantenedor. `--check` solo informa · `--dry-run` muestra el comando ([ADR-0012](docs/adr/0012-upgrade-self-update-del-cli.md)) |
189
189
  | `dai publish <us.md> [--parent KEY] [--issuetype T] [--field alias=valor]` | crea la US en el tracker (Jira/ClickUp/md) desde un `.md` y devuelve el key — el fallback del MCP para publicar sin el asistente. `--parent PROJ-42` la cuelga de su épica · `--issuetype Epic` publica una épica (fallback CLI de `grill-epic`) · `--field clasificacion=Mejora` (repetible) manda los campos propios que exige tu Jira, declarados en `.dai/jira-fields.json` ([ADR-0015](docs/adr/0015-jira-corporativo.md)) |
190
190
  | `dai link-us <ID> [--us <md>]` | crea branch + `implements.yaml`; sin `--us` trae la US del tracker |
@@ -195,27 +195,30 @@ flowchart TD
195
195
  | `dai stamp` | estampa la cobertura inversa en el tracker (branch + commit-ancla) |
196
196
  | `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 |
197
197
  | `dai archive [<change>] [--skip-specs]` | **funde los delta specs del change en las specs canónicas** (`openspec/specs/`) y lo archiva. Lo corre el **aprobador** de la PR (gate de aprobación, [ADR-0011](docs/adr/0011-archive-gate-de-aprobacion.md)); detecta el change activo o le pasás el nombre. Envuelve `openspec archive` |
198
- | `dai forge comment <ref> --body-file <f>` · `dai forge pr <ref>` | comentar / leer una PR/MR (GitHub/GitLab) |
198
+ | `dai forge review <ref> --from <review.json>` `[--dry-run\|--yes]` | **review inline**: un resumen + un comentario anclado a cada `archivo:línea`, clasificado low/medium/high. **Valida cada posición contra el diff** (descarta lo que el modelo inventó) antes de postear; sin `--yes` muestra el preview y no postea nada. Modo desatendido: `--min-severity`/`--min-confidence`/`--max-comments`. El review sale con `event: COMMENT`, nunca `APPROVE` ([ADR-0016](docs/adr/0016-review-inline.md)) |
199
+ | `dai forge comment <ref> --body-file <f>` · `dai forge pr <ref>` | comentar / leer una PR/MR (GitHub/GitLab) — el fallback simple, sin anclar |
199
200
  | `dai ac-hash <us.md>` | calcula el hash de los criterios de aceptación de una US |
200
201
  | `dai doctor` · `dai docs <dest>` · `dai version` | diagnóstico del entorno (incluye **version-drift** del scaffold) · copiar la doc · versión (`dai version` avisa si tu repo quedó atrás) |
201
202
 
202
203
  > **🆕 Mantené tu repo al día — `dai sync`.** Las skills, la constitución y los templates son un
203
204
  > *caché derivable* del CLI. Cuando actualizás `dai` (`dai upgrade`), **`dai doctor` y
204
205
  > `dai version` te avisan solos** si tu scaffold quedó atrás — con color y un `⬆️` —, y **`dai sync`**
205
- > lo refresca: **aditivo** (conserva tu `CLAUDE.md` propio), sin tocar el `.env` ni OpenSpec. Probá sin
206
+ > lo refresca: **aditivo** (conserva tu `CLAUDE.md` propio), sin tocar el `.env.dai` ni OpenSpec. Prueba sin
206
207
  > riesgo con `dai sync --dry-run`. El versionado es semver: patch/minor no rompen nada; solo un major
207
208
  > pediría migración. ([ADR-0010](docs/adr/0010-versionado-y-upgrade.md))
208
209
 
209
210
  > **🧩 Skills de cualquier stack — `dai skills install --from`.** Además de las skills de
210
- > dai, cada equipo suma las suyas (por-stack: .NET, Java, Rust…) desde su propio repo:
211
- > `dai skills install --from github.com/tu-org/net-skills`. dai las **convierte para los 3
212
- > asistentes** (Claude/Cursor/Copilot) e instala. **dai es el distribuidor de skills de
213
- > cualquier stack, sin opinar sobre su contenido** self-service, sin registro; `dai sync`
214
- > sigue siendo solo de dai. ([ADR-0013](docs/adr/0013-skills-externas-install-from.md))
211
+ > dai, cada equipo suma las suyas (por-stack: .NET, Java, Rust…) desde su propio repo o
212
+ > **paquete npm**: `dai skills install --from github.com/tu-org/net-skills` · `dai skills
213
+ > install --from npm:@tu-org/ui-skills` (el paquete npm usa el `.npmrc` del repo, así
214
+ > resuelve registries privados con scope). dai las **convierte para los 3 asistentes**
215
+ > (Claude/Cursor/Copilot) e instala. **dai es el distribuidor de skills de cualquier stack,
216
+ > sin opinar sobre su contenido** — self-service, sin registro; `dai sync` sigue siendo solo
217
+ > de dai. ([ADR-0013](docs/adr/0013-skills-externas-install-from.md))
215
218
  >
216
219
  > La fuente puede ser **pública, privada (por SSH) o un path local**: dai no hace auth
217
- > propia, delega en git — **si podés `git clone` el repo, dai instala desde ahí**. Para
218
- > privados usá la forma SSH (`git@github.com:tu-org/net-skills.git`), consistente con el
220
+ > propia, delega en git — **si puedes `git clone` el repo, dai instala desde ahí**. Para
221
+ > privados usa la forma SSH (`git@github.com:tu-org/net-skills.git`), consistente con el
219
222
  > modelo de auth de dai ([ADR-0007](docs/adr/0007-modelo-de-autenticacion.md)). Público =
220
223
  > cero fricción entre equipos/máquinas.
221
224
  >
@@ -228,8 +231,9 @@ flowchart TD
228
231
  > en [`skills/`](skills/).
229
232
 
230
233
  Skills (se invocan en el asistente): `/doc-to-backlog` · `/grill-intent` · `/grill-epic` · `/grill-user-story` · `/link-us` ·
231
- `/tdd` · `/dai-review`. Config del tracker (`md`\|`jira`\|`clickup`) y tokens: en `.env`
232
- ver [`.env.example`](.env.example). Auth (SSH + tokens): [ADR-0007](docs/adr/0007-modelo-de-autenticacion.md).
234
+ `/tdd` · `/dai-review`. Config del tracker (`md`\|`jira`\|`clickup`) y tokens: en `.env.dai`
235
+ (no versionado; el `.env` del equipo no se toca — [ADR-0017](docs/adr/0017-env-dai.md)) —
236
+ ver [`.env.dai.example`](.env.dai.example). Auth (SSH + tokens): [ADR-0007](docs/adr/0007-modelo-de-autenticacion.md).
233
237
 
234
238
  ## El flag `--for` — ¿para qué asistente preparo el repo?
235
239
 
@@ -261,7 +265,7 @@ Después de `dai init` (con `--for all`):
261
265
  ```
262
266
  mi-repo/
263
267
  ├── CLAUDE.md · Constitución del proyecto (auto-cargada por Claude)
264
- ├── .env · configurado con tu tracker (gitignored, completa el token)
268
+ ├── .env.dai · tu tracker (NO versionado, completa el token) + .env.dai.example (plantilla, sí versionada)
265
269
  ├── .claude/skills/ · Las skills, locales al repo (el equipo las hereda)
266
270
  │ └── doc-to-backlog · grill-intent · grill-epic · grill-user-story · link-us · tdd · dai-review
267
271
  ├── .github/
@@ -328,12 +332,12 @@ Además: [`docs/glosario.md`](docs/glosario.md) · guías por rol ([`po`](docs/g
328
332
  dai/
329
333
  ├── cli/ 🖥️ el binario `dai` (Node, cero dependencias) + su suite de tests
330
334
  ├── docs/ 📖 la metodología: MANIFIESTO · METODOLOGIA · SCRUM-CON-IA · EJEMPLO ·
331
- │ glosario · guias/ · detalle/ (10 pasos) · adr/ (0001–0009)
335
+ │ glosario · guias/ · detalle/ (10 pasos) · adr/ (0001–0016)
332
336
  ├── templates/ 🧩 los moldes (formato-us · epica · DoR · DoD · adr · pull-request)
333
337
  ├── skills/ 🤖 doc-to-backlog · grill-intent · grill-epic · grill-user-story · link-us · tdd · dai-review
334
338
  ├── governance/ 🛡️ branch-naming · ci-rules · commit-convention
335
339
  ├── index.html 📊 landing autocontenido (la historia); publicable por GitHub Pages
336
- └── manifest.yaml · VERSION · install.sh (shim) · .env.example
340
+ └── manifest.yaml · VERSION · install.sh (shim) · .env.dai.example
337
341
  ```
338
342
 
339
343
  ## Licencia
@@ -350,9 +354,17 @@ Detalle en [ADR-0006](docs/adr/0006-distribucion-y-licencia.md).
350
354
 
351
355
  ## Agradecimientos
352
356
 
353
- dai se apoya en ideas y aprendizajes de la comunidad. En particular, gracias a
354
- **[Matt Pocock](https://github.com/mattpocock)** por su aporte con las *skills* y por su
355
- [canal de YouTube](https://www.youtube.com/@mattpocockuk) explicándolas — su trabajo nos ayudó
356
- a construir esta herramienta.
357
+ dai se apoya en ideas y herramientas de la comunidad.
358
+
359
+ Un agradecimiento especial a **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** (de
360
+ [Fission AI](https://github.com/Fission-AI), `@fission-ai/openspec`): es la herramienta
361
+ sobre la que se construye todo el **CÓMO** de dai — explorar la solución, proponer el diseño
362
+ y las tareas, e implementar el change (`opsx:explore → propose → apply → archive`). dai no
363
+ la bundlea ni la reemplaza; se apoya en ella para convertir el QUÉ en un plan técnico
364
+ trazable. Sin OpenSpec, la mitad del método no existiría.
365
+
366
+ Y gracias a **[Matt Pocock](https://github.com/mattpocock)** por su aporte con las *skills*
367
+ y por su [canal de YouTube](https://www.youtube.com/@mattpocockuk) explicándolas — su
368
+ trabajo nos ayudó a construir esta herramienta.
357
369
 
358
370
  Seguridad: [`SECURITY.md`](SECURITY.md) · Conducta: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.2
1
+ 0.10.0