@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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Paso 6 — Code review: el dev primero, después un partner
|
|
2
|
+
|
|
3
|
+
← vuelve a [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md)
|
|
4
|
+
|
|
5
|
+
## En qué consiste en detalle
|
|
6
|
+
|
|
7
|
+
Dos revisiones distintas:
|
|
8
|
+
|
|
9
|
+
1. **El dev revisa su propia implementación** — la que produjo la IA, minucioso y con
|
|
10
|
+
criterio (correctitud, casos borde, seguridad, calidad). Es responsable del código, no
|
|
11
|
+
la IA (anti vibe-coding). Recién con eso en orden, y todo **commiteado**, crea la PR.
|
|
12
|
+
2. **Un partner revisa la PR** y **firma** aprobación/rechazo. Se apoya en la skill
|
|
13
|
+
`dai-review` para un primer pase consciente de la metodología: corre `dai check` (¿la US
|
|
14
|
+
quedó atrasada?), valida el DoD, revisa el código (🔴 errores / 🟡 mejoras / ✅ bien) y
|
|
15
|
+
deja un **comentario estándar** en la PR/MR — le saca el ruido para que firme lo que importa.
|
|
16
|
+
|
|
17
|
+
## Herramientas
|
|
18
|
+
|
|
19
|
+
- Skill [`dai-review`](../../skills/dai-review/SKILL.md) — GitHub y GitLab, postea por
|
|
20
|
+
MCP del forge o por `dai forge comment` (token).
|
|
21
|
+
- `dai check` ([ADR-0003](../adr/0003-deteccion-y-estampado-son-comandos.md)).
|
|
22
|
+
- Gate de cierre: [`definition-of-done.md`](../../templates/definition-of-done.md).
|
|
23
|
+
|
|
24
|
+
## Qué firma el humano
|
|
25
|
+
|
|
26
|
+
El **partner aprueba o rechaza** ([Art. 5](../MANIFIESTO.md#art-5)). La IA comenta y sugiere; **nunca** firma
|
|
27
|
+
la aprobación.
|
|
28
|
+
|
|
29
|
+
## Antipatrones
|
|
30
|
+
|
|
31
|
+
- **Rubber-stamp** ("LGTM" sin leer) → el review deja de valer.
|
|
32
|
+
- **Que la IA "apruebe"** → prohibido; aprueba una persona.
|
|
33
|
+
- **Hallazgos abstractos** ("mejorar la calidad") → sin archivo:línea, no es accionable.
|
|
34
|
+
- **Aprobar con `dai check` en ⚠️ atrasado** → se implementó una versión vieja del QUÉ.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Paso 7 — Merge: la trazabilidad se estampa sola
|
|
2
|
+
|
|
3
|
+
← vuelve a [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md)
|
|
4
|
+
|
|
5
|
+
## En qué consiste en detalle
|
|
6
|
+
|
|
7
|
+
Al mergear se corre `dai stamp` (el dev en modo distribuido, o el CI si está
|
|
8
|
+
automatizado — [ADR-0003](../adr/0003-deteccion-y-estampado-son-comandos.md)). Lee el
|
|
9
|
+
`implements.yaml`, compara el hash estampado contra la US viva, y **escribe la
|
|
10
|
+
cobertura inversa** en el tracker: qué repo/change implementa la US, contra qué
|
|
11
|
+
versión, con estado ✅/⚠️ y links (branch + commit-ancla).
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
dai check # ¿estoy atrasado respecto de la US? (read-only, gate de PR)
|
|
15
|
+
dai stamp # escribe la cobertura en el tracker (branch + commit)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Herramientas
|
|
19
|
+
|
|
20
|
+
- `dai check` / `dai stamp` — mismos comandos los corra un humano o el CI.
|
|
21
|
+
- Contenido del stamp: [ADR-0005](../adr/0005-superficie-comandos-y-stamp.md).
|
|
22
|
+
|
|
23
|
+
## Qué firma el humano
|
|
24
|
+
|
|
25
|
+
**Nadie mantiene la matriz a mano** — ese es el punto ([Art. 10](../MANIFIESTO.md#art-10)). El humano a lo sumo
|
|
26
|
+
*dispara* `dai stamp`; el contenido lo deriva la máquina.
|
|
27
|
+
|
|
28
|
+
## Antipatrones
|
|
29
|
+
|
|
30
|
+
- **Actualizar el estado del ticket a mano** → desincronización garantizada.
|
|
31
|
+
- **Escribir el link en los dos lados** → se desincroniza al primer cambio (Art. 9).
|
|
32
|
+
- **Guardar solo la branch en el stamp** → 404 al borrarse; va con commit-ancla.
|
|
33
|
+
- **Creer que hace falta "un CI en Jira"** → es un comando; el tracker no ejecuta nada.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Paso 8 — Daily standup (humano, a propósito)
|
|
2
|
+
|
|
3
|
+
← vuelve a [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md)
|
|
4
|
+
|
|
5
|
+
## En qué consiste en detalle
|
|
6
|
+
|
|
7
|
+
15 minutos: qué hice, qué voy a hacer, qué me traba. Es **sincronización**, no
|
|
8
|
+
reporte de estado. Se hace **a mano, sin IA, a propósito**.
|
|
9
|
+
|
|
10
|
+
## Por qué no metemos IA acá
|
|
11
|
+
|
|
12
|
+
La IA *podría* auto-generar el "qué se hizo" desde git + el tracker. **No lo hacemos**:
|
|
13
|
+
el daily es donde el equipo se **apropia** del proceso, lo entiende y se coordina de
|
|
14
|
+
verdad. Automatizarlo le sacaría al equipo la propiedad del ritual ([Art. 6](../MANIFIESTO.md#art-6)).
|
|
15
|
+
|
|
16
|
+
## Qué firma el humano
|
|
17
|
+
|
|
18
|
+
Todo. La conversación *es* el valor.
|
|
19
|
+
|
|
20
|
+
## Dónde sí ayuda la máquina (sin reemplazar el ritual)
|
|
21
|
+
|
|
22
|
+
Si alguien quiere datos frescos para el daily, `dai ls` / `dai check` muestran en qué
|
|
23
|
+
está cada quien y qué quedó atrasado — como **insumo**, no como reemplazo de la charla.
|
|
24
|
+
|
|
25
|
+
## Antipatrones
|
|
26
|
+
|
|
27
|
+
- **Convertirlo en reporte** hacia arriba → deja de ser sincronización.
|
|
28
|
+
- **Automatizar el "qué hice"** → mata la apropiación (por eso es HITL).
|
|
29
|
+
- **Que dure 40 minutos** → no es la reunión de diseño; para eso, otro espacio.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Paso 9 — Sprint Review / Demo
|
|
2
|
+
|
|
3
|
+
← vuelve a [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md)
|
|
4
|
+
|
|
5
|
+
## En qué consiste en detalle
|
|
6
|
+
|
|
7
|
+
Se muestra lo terminado al PO y stakeholders. La aceptación es **contra los criterios
|
|
8
|
+
de aceptación de la US** — que ya eran tests (paso 4). Si el QUÉ evolucionó mientras
|
|
9
|
+
tanto, el `@version` lo gritó antes (`dai check` en ⚠️), así que **no hay sorpresas**
|
|
10
|
+
del tipo "esto no era lo que pide".
|
|
11
|
+
|
|
12
|
+
## Herramientas
|
|
13
|
+
|
|
14
|
+
- Los criterios Gherkin de la US como guion de la demo.
|
|
15
|
+
- `dai check` para confirmar que lo demostrado está **al día** con la US vigente.
|
|
16
|
+
|
|
17
|
+
## Qué firma el humano
|
|
18
|
+
|
|
19
|
+
El **PO acepta o rechaza** ([Art. 5](../MANIFIESTO.md#art-5)). La demo la corre una persona.
|
|
20
|
+
|
|
21
|
+
## Antipatrones
|
|
22
|
+
|
|
23
|
+
- **Demostrar contra una US atrasada** → aceptas algo que ya no es lo pedido.
|
|
24
|
+
- **Criterios que no eran tests** → la demo se vuelve subjetiva ("a mí me anda").
|
|
25
|
+
- **Descubrir el desajuste en la demo** → tenía que haber saltado con `dai check` antes.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Paso 10 — Retrospective (humano, con datos)
|
|
2
|
+
|
|
3
|
+
← vuelve a [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md)
|
|
4
|
+
|
|
5
|
+
## En qué consiste en detalle
|
|
6
|
+
|
|
7
|
+
El equipo mira **cómo trabajó** (no el producto) y elige **1–2 mejoras** para el
|
|
8
|
+
próximo sprint. Es un ritual **humano**. Lo que aporta la máquina son **datos**, no
|
|
9
|
+
conclusiones.
|
|
10
|
+
|
|
11
|
+
## Dónde ayuda la máquina
|
|
12
|
+
|
|
13
|
+
La matriz de trazabilidad y las métricas de las US dan evidencia real de dónde se
|
|
14
|
+
trabó el flujo: US que quedaron atrasadas seguido, pasos que siempre se hacen a mano,
|
|
15
|
+
smokes que faltan. `dai ls` / `dai check` sobre los repos son un buen insumo.
|
|
16
|
+
|
|
17
|
+
## Qué firma el humano
|
|
18
|
+
|
|
19
|
+
Todo el análisis y las decisiones de mejora. La IA no propone la mejora; el equipo la
|
|
20
|
+
decide con los datos a la vista ([Art. 6](../MANIFIESTO.md#art-6)).
|
|
21
|
+
|
|
22
|
+
## Antipatrones
|
|
23
|
+
|
|
24
|
+
- **Mejorar "la sensación"** sin datos → la matriz existe justo para evitar eso.
|
|
25
|
+
- **Automatizar la retro** → es humana, como el daily.
|
|
26
|
+
- **Salir con 10 acciones** → 1–2 mejoras reales valen más que una lista que nadie hace.
|
|
27
|
+
- **No cerrar el loop** → la mejora del sprint pasado debería verse en los datos de este.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Detalle por paso — la ceremonia con IA, ampliada
|
|
2
|
+
|
|
3
|
+
El zoom de cada uno de los 10 pasos de [`SCRUM-CON-IA.md`](../SCRUM-CON-IA.md). Cada
|
|
4
|
+
archivo: en qué consiste en detalle, la herramienta con ejemplos, qué firma la persona (HITL) y
|
|
5
|
+
los antipatrones a evitar.
|
|
6
|
+
|
|
7
|
+
| # | Paso | IA |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| [01](01-refinamiento.md) | Refinamiento (idea → US testeable) | ●●● |
|
|
10
|
+
| [02](02-planning.md) | Planning (derivar el CÓMO) | ●● |
|
|
11
|
+
| [03](03-ramas.md) | Rama ligada al QUÉ | ●●● |
|
|
12
|
+
| [04](04-tdd.md) | TDD (test primero) | ●●● |
|
|
13
|
+
| [05](05-smoke.md) | Smoke end-to-end | ●● |
|
|
14
|
+
| [06](06-code-review.md) | Code review (IA + partner) | ●● |
|
|
15
|
+
| [07](07-merge-trazabilidad.md) | Merge + trazabilidad | ●●● |
|
|
16
|
+
| [08](08-daily.md) | Daily (**humano**) | ○ |
|
|
17
|
+
| [09](09-review.md) | Review / Demo | ● |
|
|
18
|
+
| [10](10-retro.md) | Retro (**humano**) | ○ |
|
|
19
|
+
|
|
20
|
+
`●●● = la IA hace el trabajo pesado` · `○ = humano puro (HITL)`
|
package/docs/glosario.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Glosario — el vocabulario común de dai
|
|
2
|
+
|
|
3
|
+
> Si el equipo no nombra las cosas igual, no puede razonar junto. Este es el
|
|
4
|
+
> vocabulario **del método**. Cada proyecto además mantiene su **glosario de
|
|
5
|
+
> dominio** (los términos del negocio) — son cosas distintas: este define *cómo
|
|
6
|
+
> trabajamos*, el otro define *sobre qué*.
|
|
7
|
+
|
|
8
|
+
## Los dos lados
|
|
9
|
+
|
|
10
|
+
| Término | Qué es |
|
|
11
|
+
|---|---|
|
|
12
|
+
| **QUÉ** | El requerimiento funcional: qué hay que hacer y por qué. Dueño: PO/funcional. |
|
|
13
|
+
| **CÓMO** | La implementación técnica: cómo se construye. Dueño: dev/ingeniero. |
|
|
14
|
+
| **US (User Story)** | La unidad del QUÉ. Formato canónico en `templates/formato-us.md`. |
|
|
15
|
+
| **Criterio de aceptación (AC)** | Condición testeable en Gherkin (Dado/Cuando/Entonces). Si no es un test en potencia, no es un AC. |
|
|
16
|
+
| **Capacidad** | La unidad de linkeo: una US entera. El link es a este nivel, no por AC. |
|
|
17
|
+
|
|
18
|
+
## El link y la trazabilidad
|
|
19
|
+
|
|
20
|
+
| Término | Qué es |
|
|
21
|
+
|---|---|
|
|
22
|
+
| **Link (QUÉ↔CÓMO)** | La relación entre un requerimiento y su implementación. |
|
|
23
|
+
| **`implements`** | La declaración `implements: <id>@<version>` en el código. El **único** link autorado a mano. |
|
|
24
|
+
| **`implements.yaml`** | El archivo, en el change del repo, que contiene ese link. Lo genera `link-us`. Ejemplo lleno + árbol de dónde vive entre los artefactos de OpenSpec: [ADR-0004](adr/0004-ubicacion-y-schema-implements.md). |
|
|
25
|
+
| **Trazabilidad inversa / cobertura** | El mapa "quién implementó este QUÉ". **Se genera, nunca se escribe.** |
|
|
26
|
+
| **Índice / router** | La tabla central que dice qué ID vive en qué repos. Es un router, **no un almacén**: no guarda el detalle. |
|
|
27
|
+
| **Federación (dos niveles)** | Cómo se guarda la trazabilidad a escala: Nivel 1 = índice central chico; Nivel 2 = detalle en cada repo, resuelto on-demand. *(Es un eje distinto de los niveles de ceremonia N1/N2/N3: acá "nivel" es dónde vive el dato, no el tamaño del equipo.)* |
|
|
28
|
+
| **Matriz de trazabilidad** | La vista "repo × versión × estado (al día / atrasado)". Derivada, no mantenida a mano. |
|
|
29
|
+
|
|
30
|
+
## El versionado
|
|
31
|
+
|
|
32
|
+
| Término | Qué es |
|
|
33
|
+
|---|---|
|
|
34
|
+
| **`spec_version`** | Número legible (`v1`, `v2`…). Lo sube la persona para **comunicar** un cambio del QUÉ. |
|
|
35
|
+
| **`ac_hash`** | Hash del bloque de criterios normalizado. Lo calcula la máquina para **detectar** cambios. |
|
|
36
|
+
| **`@version`** | El par `spec_version + ac_hash`. Lo que hace que un cambio del QUÉ marque solo a los CÓMO atrasados. |
|
|
37
|
+
| **Atrasado (⚠️)** | Un CÓMO cuyo `ac_hash` ya no coincide con el de la US vigente. |
|
|
38
|
+
|
|
39
|
+
## El proceso
|
|
40
|
+
|
|
41
|
+
| Término | Qué es |
|
|
42
|
+
|---|---|
|
|
43
|
+
| **Gate 0** | El desafío al *problema* antes de escribir spec (`grill-intent`). Puede terminar en "no lo construyas". |
|
|
44
|
+
| **DoR (Definition of Ready)** | El contrato de cuándo una US puede entrar a implementarse. |
|
|
45
|
+
| **DoD (Definition of Done)** | El contrato de cuándo el CÓMO está terminado. |
|
|
46
|
+
| **PR / MR (Pull / Merge Request)** | La unidad revisable del CÓMO. En dai lleva **dos activos**, y el review cubre ambos: (1) la **implementación** (el código) y (2) el **spec trazable** (el `implements.yaml` con el link a la US y el `@version` verificado). Sin el segundo, el CI bloquea el PR. Template en `../templates/pull-request.md`. |
|
|
47
|
+
| **Change** | La unidad de trabajo de OpenSpec (proposal + design + tasks + specs). |
|
|
48
|
+
| **ADR (Architecture Decision Record)** | El registro de una decisión estructural: contexto, decisión, consecuencias. Chico e **inmutable** — si algo cambia, se escribe uno nuevo que supersede al viejo. Template en `../templates/adr.md`; los de dai, en [`adr/`](adr/). |
|
|
49
|
+
| **TDD (Test-Driven Development)** | Escribir el test **antes** que el código: RED (test que falla) → GREEN (código mínimo) → REFACTOR. En dai cada AC se vuelve un test (skill `tdd`); es el antídoto del vibe coding. |
|
|
50
|
+
| **Vertical slice** | Un test → una implementación → repetir. Lo opuesto a "todos los tests, después todo el código". |
|
|
51
|
+
| **Smoke** | Escenario end-to-end que verifica que el flujo grueso no se rompió. |
|
|
52
|
+
|
|
53
|
+
## La maquinaria (CI/CD)
|
|
54
|
+
|
|
55
|
+
| Término | Qué es |
|
|
56
|
+
|---|---|
|
|
57
|
+
| **CI (Integración Continua)** | La automatización que corre en cada *push* / PR: compila, corre los tests y valida el repo. **En dai**, el CI ejecuta `dai check` como *gate* del PR (valida que el link exista y que el `ac_hash` coincida con la US viva) y, al mergear, `dai stamp` (estampa la cobertura inversa en el tracker — nadie la escribe a mano). Qué valida, en [`governance/ci-rules.md`](../governance/ci-rules.md). |
|
|
58
|
+
| **CD (Despliegue Continuo)** | La automatización que lleva la versión a los ambientes (`dev` / `test` / `pre` / `prod`) y reporta a cuál llegó. **En dai**, el CD alimenta la **matriz repo × ambiente**: *implementado ≠ desplegado* — el CI dice "el repo implementó `@v3`", el CD dice "`@v3` está viva en `pre`". |
|
|
59
|
+
| **CI/CD** | Juntos, la "plomería" que **blinda** el método sin depender de que la gente se acuerde (enforcement, no vigilancia). En dai es **opcional** (ADR-0003): aparece sobre todo en **N3** (organización grande). En **N1/N2** los mismos comandos (`dai check`, `dai stamp`) corren a mano o por un git-hook — la trazabilidad es idéntica; solo cambia **quién** los dispara. dai **no trae** su propio CI/CD: se apoya en el pipeline que la organización ya tenga. |
|
|
60
|
+
|
|
61
|
+
## Los principios
|
|
62
|
+
|
|
63
|
+
| Término | Qué es |
|
|
64
|
+
|---|---|
|
|
65
|
+
| **Artículos (Art. N) / Manifiesto** | Cuando un doc cita "Art. 10" o "Art. 14", se refiere a uno de los **15 artículos** de la constitución del método, en [MANIFIESTO.md](MANIFIESTO.md). Cada `Art. N` linkea directo a su regla (`#art-N`). Son cortos a propósito — un manifiesto que no se cita de memoria no gobierna nada. |
|
|
66
|
+
| **SDD (Spec-Driven Development)** | El paradigma donde la **especificación maneja el código**, no al revés: primero el QUÉ (US) y el diseño, después la implementación. dai —con OpenSpec— es SDD; lo opuesto al *code-first* y al vibe coding. |
|
|
67
|
+
| **PRD / SRS** | El documento monolítico de requisitos (*Product Requirements Document* / *Software Requirements Specification*). **dai no usa uno**: descompone el QUÉ en épica + US testeables (unidades linkeables y hasheables). Si ya tienes un PRD, `doc-to-backlog` lo **ingiere** y lo vuelve backlog — dai consume el documento, no te obliga a mantenerlo. |
|
|
68
|
+
| **HITL (Human-in-the-loop)** | La IA asiste; la persona decide y firma. Los rituales de coordinación son humanos. |
|
|
69
|
+
| **Vibe coding** | Improvisar código sobre una idea vaga. Lo que el método prohíbe ([Art. 7](./MANIFIESTO.md#art-7)). |
|
|
70
|
+
| **Colapso de roles** | Cuando una persona es PO y dev: los gates se aligeran, el link no desaparece. |
|
|
71
|
+
| **Nivel de ceremonia (N1/N2/N3)** | Los tres niveles de "plomería" según el tamaño del equipo. **N1** — un dev solo, todo local, sin herramientas externas. **N2** — equipo compacto, con tracker (Jira/ClickUp) + `implements.yaml`. **N3** — organización grande, federada: muchos repos, equipos separados, CI que estampa. El protocolo QUÉ↔CÓMO es **el mismo** en los tres; solo cambia la maquinaria. Detalle en [METODOLOGIA §3](METODOLOGIA.md). |
|
|
72
|
+
|
|
73
|
+
## Los roles
|
|
74
|
+
|
|
75
|
+
| Término | Qué es |
|
|
76
|
+
|---|---|
|
|
77
|
+
| **PO / funcional** | Dueño del QUÉ. Ver `guias/po.md`. |
|
|
78
|
+
| **Dev / ingeniero** | Dueño del CÓMO y del link. Ver `guias/dev.md`. |
|
|
79
|
+
| **Lead / SM / arquitecto** | Custodio de las invariantes y del nivel de ceremonia. Ver `guias/lead.md`. |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Guía del dev / ingeniero
|
|
2
|
+
|
|
3
|
+
> Tu trabajo en una frase: **defines e implementas el CÓMO, y autoras el link al QUÉ.**
|
|
4
|
+
> El QUÉ ya viene definido y testeable — tú no lo re-discutes, lo implementas.
|
|
5
|
+
|
|
6
|
+
## Lo que eres dueño
|
|
7
|
+
|
|
8
|
+
- El **CÓMO**: diseño técnico, modelo de datos, arquitectura de la solución.
|
|
9
|
+
- Las **tareas técnicas** (las derivas tú, desde la US, con OpenSpec).
|
|
10
|
+
- El **link** (`implements.yaml`): es el **único** que se autora a mano ([Art. 9](../MANIFIESTO.md#art-9)).
|
|
11
|
+
- El **código** y su **spec técnica**.
|
|
12
|
+
|
|
13
|
+
## Lo que NO tocas
|
|
14
|
+
|
|
15
|
+
- El contenido funcional de la US ni sus criterios → eso es del PO (Art. 1).
|
|
16
|
+
- Si te parece que el QUÉ está mal, **no lo corrijas por tu cuenta**: devuelve la US
|
|
17
|
+
al PO (reframe). No decidas negocio desde el código.
|
|
18
|
+
|
|
19
|
+
## Tu día a día
|
|
20
|
+
|
|
21
|
+
1. **Agarras una US** que cumple el [DoR](../../templates/definition-of-ready.md) → `/link-us ABC-###`. Crea la rama y el
|
|
22
|
+
`implements.yaml` **desde el ID, sin que tipees el key a mano** (Art. 8, Art. 9).
|
|
23
|
+
2. **Armas el CÓMO** → `opsx:explore` → `opsx:propose`. OpenSpec genera
|
|
24
|
+
`design.md`/`tasks.md`; tú validas y ajustas. Las tareas nacen del cómo.
|
|
25
|
+
3. **Implementas con TDD** → `/tdd`. Un test a la vez, vertical slices: RED → GREEN
|
|
26
|
+
→ refactor. Verificas por la **interfaz pública**, no espías lo interno (Art. 7).
|
|
27
|
+
4. **Smoke** → ejecutas el escenario end-to-end del flujo.
|
|
28
|
+
5. **Revisas la implementación de la IA** (code review propio) → minucioso y con criterio:
|
|
29
|
+
correctitud, casos borde, seguridad, calidad. **Eres responsable del código, no la IA**
|
|
30
|
+
(anti vibe-coding). Ajustas y **commiteas** lo que haga falta.
|
|
31
|
+
6. **Creas la PR** → con el smoke verde y **todo commiteado** (lo que quede sin commitear
|
|
32
|
+
**no entra** en la PR), corres `dai check` (gate: ¿al día con la US?) y en verde `dai pr`
|
|
33
|
+
arma la PR **precargada** (US + estado del check + links; los **dos activos**: código +
|
|
34
|
+
spec trazable) y la asignas a un partner.
|
|
35
|
+
7. **Review de un partner** → un compañero revisa tu PR y **firma** aprobación/rechazo
|
|
36
|
+
(Art. 5). Se apoya en la skill `/dai-review` para un primer pase con comentario estándar.
|
|
37
|
+
*(Tu PR la revisas tú en el paso 5; la de un compañero, lo ayudas con la skill.)*
|
|
38
|
+
8. **Verificas el DoD** → [`definition-of-done.md`](../../templates/definition-of-done.md) antes de mergear.
|
|
39
|
+
9. **Merge → se estampa la cobertura** con `dai stamp` (lo corres tú tras mergear, o el CI
|
|
40
|
+
si la org lo tiene automatizado — mismo comando, ADR-0003). El estado se **deriva** (Art. 10).
|
|
41
|
+
10. **(Opcional) Limpias la rama** → `dai done` te devuelve a la base (default `main`, o
|
|
42
|
+
`--base develop`), hace `fetch --prune` + `pull` y borra la rama local **solo si está
|
|
43
|
+
mergeada**. Higiene del repo tras el merge, sin riesgo de perder trabajo sin integrar.
|
|
44
|
+
|
|
45
|
+
## La trampa a evitar
|
|
46
|
+
|
|
47
|
+
**Vibe coding.** Nada de codear sobre una idea vaga o "improvisar y después vemos".
|
|
48
|
+
Si no hay US con criterios testeables, no arranques: falta el [DoR](../../templates/definition-of-ready.md). La disciplina
|
|
49
|
+
—US clara → design → test → código— es lo que separa esto de pedirle cosas a un chat.
|
|
50
|
+
|
|
51
|
+
## Cuando el QUÉ cambia
|
|
52
|
+
|
|
53
|
+
Si el PO sube la US a `v2`, tu `implements.yaml` (que apunta a `v1`) se marca
|
|
54
|
+
**atrasado** solo. Abres una nueva iteración contra `v2` y vuelves al paso 3. Nadie
|
|
55
|
+
te avisa: el link versionado lo hace [Art. 11](../MANIFIESTO.md#art-11).
|
|
56
|
+
|
|
57
|
+
## Tus herramientas
|
|
58
|
+
|
|
59
|
+
- `/link-us`
|
|
60
|
+
- `/opsx:explore`
|
|
61
|
+
- `/opsx:propose`
|
|
62
|
+
- `/opsx:apply`
|
|
63
|
+
- `/tdd`
|
|
64
|
+
- `/dai-review`
|
|
65
|
+
- `dai check` · `dai pr` · `dai stamp` · `dai done` (limpieza, opcional)
|
|
66
|
+
- `definition-of-done.md`
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Guía del lead / Scrum Master / arquitecto
|
|
2
|
+
|
|
3
|
+
> Tu trabajo en una frase: **custodias las invariantes y eliges cuánta ceremonia
|
|
4
|
+
> corre el equipo.** No haces el QUÉ ni el CÓMO — haces que el método se cumpla y
|
|
5
|
+
> se aligere donde corresponde.
|
|
6
|
+
|
|
7
|
+
## Lo que eres dueño
|
|
8
|
+
|
|
9
|
+
- **El manifiesto** (`MANIFIESTO.md`): eres el guardián de los 15 artículos. Se
|
|
10
|
+
enmiendan solo por ADR explícito, nunca en silencio por presión de sprint.
|
|
11
|
+
- **Los ADRs**: registras cada decisión de fondo (las decisiones abiertas de la
|
|
12
|
+
metodología, la calibración de [DoR](../../templates/definition-of-ready.md)/[DoD](../../templates/definition-of-done.md), la convención de escritura en el gestor).
|
|
13
|
+
- **La calibración del nivel** (N1 / N2 / N3): eliges cuánta plomería corre el
|
|
14
|
+
equipo, y la subes **solo cuando duele**, no por las dudas ([Art. 14](../MANIFIESTO.md#art-14)).
|
|
15
|
+
- **El governance**: naming de ramas, reglas de CI (`governance/`).
|
|
16
|
+
- **La facilitación** del daily y la retro — que son **humanos a propósito** (Art. 6).
|
|
17
|
+
|
|
18
|
+
## Lo que NO haces
|
|
19
|
+
|
|
20
|
+
- No defines el QUÉ por el PO ni el CÓMO por los devs.
|
|
21
|
+
- No conviertes el daily/retro en un reporte automatizado: sacarle al equipo la
|
|
22
|
+
propiedad del ritual rompe la apropiación (Art. 6).
|
|
23
|
+
|
|
24
|
+
## Tus decisiones clave
|
|
25
|
+
|
|
26
|
+
### 1. ¿En qué nivel arranca el equipo?
|
|
27
|
+
- **1 dev / 1 repo →** N1 (OpenSpec solo, cero herramientas externas).
|
|
28
|
+
- **Equipo compacto →** N2 (US en el gestor + `implements.yaml`).
|
|
29
|
+
- **Muchos repos + equipos separados →** N3 (Jira hub, CI estampa, matriz de ambientes).
|
|
30
|
+
|
|
31
|
+
Empieza en el más chico que funcione. Sube de nivel cuando el dolor lo justifique.
|
|
32
|
+
|
|
33
|
+
### 2. ¿Cómo calibras [DoR](../../templates/definition-of-ready.md) y [DoD](../../templates/definition-of-done.md)?
|
|
34
|
+
Ajustas los checklists (`templates/definition-of-*.md`) a tu realidad, **sin tocar
|
|
35
|
+
las invariantes**: criterios testeables (Art. 3), el link autorado una vez (Art. 9)
|
|
36
|
+
y la trazabilidad derivada (Art. 10) no se aflojan en ningún nivel.
|
|
37
|
+
|
|
38
|
+
### 3. ¿Cuándo se colapsan los roles?
|
|
39
|
+
En equipos chicos una persona es PO y dev. Aligeras los gates (auto-check honesto en
|
|
40
|
+
vez de la firma de otro) **pero el link sigue existiendo** (Art. 15).
|
|
41
|
+
|
|
42
|
+
## La trampa a evitar
|
|
43
|
+
|
|
44
|
+
**Adelantar complejidad.** Montar la maquinaria de N3 en un equipo de 3 personas es
|
|
45
|
+
tan dañino como no tener método: agrega fricción sin resolver un dolor real (Art. 14).
|
|
46
|
+
|
|
47
|
+
## Tus herramientas
|
|
48
|
+
|
|
49
|
+
- `MANIFIESTO.md`
|
|
50
|
+
- [`METODOLOGIA.md`](../METODOLOGIA.md) (el dial de niveles)
|
|
51
|
+
- `governance/`
|
|
52
|
+
- los ADRs
|
|
53
|
+
- la retro
|
package/docs/guias/po.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Guía del PO / funcional
|
|
2
|
+
|
|
3
|
+
> Tu trabajo en una frase: **defines el QUÉ y el porqué. Nunca el CÓMO.**
|
|
4
|
+
> Trabajas donde ya trabajas (el gestor de proyectos), nunca entras al código.
|
|
5
|
+
|
|
6
|
+
## Lo que eres dueño
|
|
7
|
+
|
|
8
|
+
- El **contenido funcional** de cada US: el problema, el usuario, el valor.
|
|
9
|
+
- Los **criterios de aceptación** (qué tiene que cumplirse para aceptar).
|
|
10
|
+
- La **prioridad** y el **spec_version** (subes la versión cuando el QUÉ cambia).
|
|
11
|
+
- La **aceptación** en la demo.
|
|
12
|
+
|
|
13
|
+
## Lo que NO tocas
|
|
14
|
+
|
|
15
|
+
- Tablas, endpoints, framework, arquitectura → eso es el CÓMO, del dev.
|
|
16
|
+
- El código, las ramas, el `implements.yaml`.
|
|
17
|
+
- El "cómo se construye". Si te metes ahí, detente: no es tu terreno ([Art. 1](../MANIFIESTO.md#art-1)).
|
|
18
|
+
|
|
19
|
+
## Tu día a día
|
|
20
|
+
|
|
21
|
+
1. **Nace una idea** → creas el ticket en el gestor (nace con ID, aunque sea vago).
|
|
22
|
+
2. **Gate 0** → ejecutas `/grill-intent`. La IA te desafía el *problema*: ¿es el
|
|
23
|
+
correcto? ¿quién lo sufre? ¿qué pasa si no lo hacemos? Un veredicto válido es
|
|
24
|
+
*"no lo construyas"* — eso es el gate haciendo su trabajo (Art. 4).
|
|
25
|
+
3. **Pulir el QUÉ** → ejecutas `/grill-user-story`. La IA te **interroga** hasta que
|
|
26
|
+
la US es testeable (INVEST + Gherkin) y la publica en el gestor. La IA no
|
|
27
|
+
inventa requerimientos: te los saca a preguntas. Tú respondes y decides.
|
|
28
|
+
4. **Verificas el [DoR](../../templates/definition-of-ready.md)** → antes de que entre al sprint, la US cumple el
|
|
29
|
+
[`definition-of-ready.md`](../../templates/definition-of-ready.md).
|
|
30
|
+
5. **Demo** → aceptas o rechazas contra los mismos criterios que ya eran tests.
|
|
31
|
+
|
|
32
|
+
## La trampa a evitar
|
|
33
|
+
|
|
34
|
+
**Criterios no testeables.** *"El usuario tiene una buena experiencia"* no es un
|
|
35
|
+
criterio: no se puede volver un test. La skill te va a frenar ahí — déjala. Un buen
|
|
36
|
+
criterio es *"un carrito vacío no se puede finalizar"* (Art. 3).
|
|
37
|
+
|
|
38
|
+
## Lo que ganas
|
|
39
|
+
|
|
40
|
+
Cuando cambias el QUÉ (subes a `v2`), **todos los repos que implementaron la versión
|
|
41
|
+
vieja se marcan atrasados solos**. No tienes que perseguir a nadie: el `@version` lo
|
|
42
|
+
grita (Art. 11). Y ves en el ticket quién ya lo implementó, sin preguntar — lo puso
|
|
43
|
+
el CI (Art. 10).
|
|
44
|
+
|
|
45
|
+
## Tus herramientas
|
|
46
|
+
|
|
47
|
+
- `/grill-intent`
|
|
48
|
+
- `/grill-user-story`
|
|
49
|
+
- el gestor de proyectos
|
|
50
|
+
- [`definition-of-ready.md`](../../templates/definition-of-ready.md)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Convención de naming de ramas
|
|
2
|
+
|
|
3
|
+
> El nombre de la rama **es** el primer eslabón del link. Si es inconsistente, la
|
|
4
|
+
> trazabilidad se rompe desde el commit uno. Por eso lo genera `link-us`, no la mano.
|
|
5
|
+
|
|
6
|
+
## El formato
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
feature/ABC-###-<slug>
|
|
10
|
+
└──┬──┘ └──┬───┘ └─┬─┘
|
|
11
|
+
│ │ └ título de la US, minúsculas, sin acentos, guiones como separador
|
|
12
|
+
│ └ ID de la US en el gestor (identidad estable del QUÉ)
|
|
13
|
+
└ tipo de rama
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Ejemplo: `feature/ABC-482-finalizar-compra-sin-duplicado`
|
|
17
|
+
|
|
18
|
+
## Reglas
|
|
19
|
+
|
|
20
|
+
- El **ID nunca se tipea a mano**: sale del argumento de `/link-us ABC-###`. Elimina
|
|
21
|
+
el error de tipeo que rompe el link ([Art. 8](../docs/MANIFIESTO.md#art-8), Art. 9).
|
|
22
|
+
- El **slug** deriva del título de la US: minúsculas, sin acentos ni ñ, espacios → `-`.
|
|
23
|
+
- La **base** de la rama sigue la convención del repo (`main` o `develop`).
|
|
24
|
+
- Una rama, una US. Si una US toca varios repos, es una rama por repo, **todas con el
|
|
25
|
+
mismo `ABC-###`** — así el índice las agrupa en una fila (federación).
|
|
26
|
+
|
|
27
|
+
## Tipos de rama (opcional, por repo)
|
|
28
|
+
|
|
29
|
+
| Prefijo | Para |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `feature/` | nueva capacidad (el caso por defecto) |
|
|
32
|
+
| `fix/` | corrección sobre una US ya implementada |
|
|
33
|
+
| `chore/` | trabajo sin US (tooling, deps) — sin `implements`, no cuenta para cobertura |
|
|
34
|
+
|
|
35
|
+
> Regla de oro: si la rama implementa una US, **su nombre lleva el ID** y existe
|
|
36
|
+
> `implements.yaml`. Si no lleva ID, no es trabajo de producto y el CI no le exige link.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Reglas de CI — enforcement, no vigilancia
|
|
2
|
+
|
|
3
|
+
> El método no depende de que la gente "se acuerde". Lo blinda un check: valida el
|
|
4
|
+
> link en cada PR y estampa la cobertura al mergear. La disciplina la sostiene la
|
|
5
|
+
> máquina, no la buena voluntad.
|
|
6
|
+
>
|
|
7
|
+
> **El "CI" no es infraestructura obligatoria (ADR-0003).** Todo lo de acá abajo son
|
|
8
|
+
> los comandos `dai check` (read-only, gate) y `dai stamp` (write, cobertura),
|
|
9
|
+
> corridos por un dev en modo distribuido **o** por el pipeline que la org ya tenga.
|
|
10
|
+
> El tracker solo guarda la US; no ejecuta nada. Un equipo sin CI usa los mismos
|
|
11
|
+
> comandos a mano (o por git-hook) y tiene la misma trazabilidad.
|
|
12
|
+
|
|
13
|
+
## Qué valida el CI en cada PR/MR
|
|
14
|
+
|
|
15
|
+
| Check | Regla | Si falla |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **Link presente** | Toda rama de producto (`feature/ABC-###-*`) tiene `implements.yaml`. | ❌ bloquea el PR |
|
|
18
|
+
| **ID válido** | El `id` matchea el formato del gestor (`ABC-\d+`) y el ID existe. | ❌ bloquea |
|
|
19
|
+
| **`ac_hash` calculado** | El CI (re)calcula el hash de los criterios de la US y lo compara. | ⚠️ marca atrasado si no coincide |
|
|
20
|
+
| **Tests verdes** | La suite de la US pasa. | ❌ bloquea |
|
|
21
|
+
| **Estándares** | Lint + tipos + convenciones del repo. | ❌ bloquea |
|
|
22
|
+
|
|
23
|
+
> Ramas `chore/`/`fix/` sin US no requieren `implements.yaml` (ver `branch-naming.md`).
|
|
24
|
+
|
|
25
|
+
## Qué hace el CI al mergear
|
|
26
|
+
|
|
27
|
+
1. **Lee** el `implements.yaml` de la rama.
|
|
28
|
+
2. **Estampa la cobertura inversa** en el gestor: en el ticket `ABC-###`, deja
|
|
29
|
+
"implementado por `<repo>` @ `<version>` (`ac_hash`) ✅". **Nadie lo escribe a
|
|
30
|
+
mano** ([Art. 10](../docs/MANIFIESTO.md#art-10)).
|
|
31
|
+
3. **Actualiza el índice/router central** de la federación: la fila `ABC-### → { repos }`.
|
|
32
|
+
|
|
33
|
+
## Qué hace el CD al desplegar (solo N3 · organización grande)
|
|
34
|
+
|
|
35
|
+
Reporta a qué **ambiente** llegó la versión (`dev` / `test` / `pre` / `prod`), para
|
|
36
|
+
armar la matriz **repo × ambiente**. Implementación ≠ despliegue: el CI dice "se
|
|
37
|
+
implementó `@v3`", el CD dice "`@v3` está viva en `pre`".
|
|
38
|
+
|
|
39
|
+
## Cómo se calcula el `ac_hash` (contrato)
|
|
40
|
+
|
|
41
|
+
> Decisión abierta de la metodología — este es el contrato propuesto, a congelar en un ADR.
|
|
42
|
+
|
|
43
|
+
1. Tomar el bloque **Criterios de aceptación** de la US vigente.
|
|
44
|
+
2. **Normalizar**: colapsar whitespace, orden estable de los AC, quitar marcado
|
|
45
|
+
editorial (viñetas, énfasis). El objetivo: que un typo **no** dispare un falso atraso.
|
|
46
|
+
3. Hashear el resultado normalizado (p. ej. SHA-256, truncado para legibilidad).
|
|
47
|
+
4. Comparar con el `ac_hash` del `implements.yaml`. Distinto → el repo está atrasado.
|
|
48
|
+
|
|
49
|
+
## Calibración por nivel
|
|
50
|
+
|
|
51
|
+
> **N1 / N2 / N3** son los niveles de ceremonia según el tamaño del equipo — **N1**
|
|
52
|
+
> un dev solo, **N2** equipo compacto (con tracker), **N3** organización grande
|
|
53
|
+
> (federada). Ver el [glosario](../docs/glosario.md) o [METODOLOGIA §3](../docs/METODOLOGIA.md).
|
|
54
|
+
|
|
55
|
+
- **N1** (dev solo)**:** sin CI. La validación es un comando local (`dai` puede ofrecer un pre-commit).
|
|
56
|
+
- **N2** (equipo compacto)**:** CI liviano — valida link + tests, estampa en el gestor si hay adaptador.
|
|
57
|
+
- **N3** (organización grande)**:** CI completo + CD reportando ambientes + índice central publicado.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Convención de commits — el CÓMO, en pasos legibles
|
|
2
|
+
|
|
3
|
+
> Un commit es el **paso atómico del CÓMO**. Si el historial se lee, la implementación
|
|
4
|
+
> se entiende sin abrir el diff. Esta convención lo vuelve mecánico — y un hook la
|
|
5
|
+
> blinda, sin depender de que nadie "se acuerde" (mismo espíritu que [`ci-rules.md`](ci-rules.md)).
|
|
6
|
+
|
|
7
|
+
## Formato
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
<tipo>(<scope>)!: <resumen>
|
|
11
|
+
|
|
12
|
+
<cuerpo opcional>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- **tipo** — obligatorio (ver tabla).
|
|
16
|
+
- **scope** — opcional, en minúscula: el módulo o área (`cart`, `auth`, `cli`).
|
|
17
|
+
- **`!`** — opcional, marca un **breaking change** (rompe un contrato).
|
|
18
|
+
- **resumen** — en **imperativo**, minúscula, **sin punto final**, hasta **72** caracteres.
|
|
19
|
+
"rechaza el carrito vacío", no "Rechazado" ni "se rechaza el carrito".
|
|
20
|
+
- **cuerpo** — opcional: el *por qué*, no el *qué* (el diff ya dice el qué).
|
|
21
|
+
|
|
22
|
+
| Tipo | Cuándo |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `feat` | nueva funcionalidad |
|
|
25
|
+
| `fix` | corrección de un bug |
|
|
26
|
+
| `docs` | solo documentación |
|
|
27
|
+
| `style` | formato (espacios, comas) sin cambio de comportamiento |
|
|
28
|
+
| `refactor` | reescritura sin feature ni fix |
|
|
29
|
+
| `perf` | mejora de rendimiento |
|
|
30
|
+
| `test` | agrega o corrige tests |
|
|
31
|
+
| `build` | sistema de build o dependencias |
|
|
32
|
+
| `ci` | pipeline de CI/CD |
|
|
33
|
+
| `chore` | mantenimiento (nada de lo anterior) |
|
|
34
|
+
| `revert` | revierte un commit previo |
|
|
35
|
+
|
|
36
|
+
Se dejan pasar sin validar: `Merge …`, `Revert …`, `fixup!`/`squash!` y commits de bots (`🤖…`).
|
|
37
|
+
|
|
38
|
+
## Relación con la trazabilidad
|
|
39
|
+
|
|
40
|
+
El link formal QUÉ↔CÓMO vive en el `implements.yaml` (no en el mensaje del commit). Pero si
|
|
41
|
+
el commit implementa una US, **mencionarla en el cuerpo** hace el historial legible:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
feat(cart): rechaza finalizar un carrito vacío
|
|
45
|
+
|
|
46
|
+
Cubre el criterio AC-2. US: ABC-482.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
No es obligatorio y **no** reemplaza al `implements.yaml` — es una ayuda de lectura.
|
|
50
|
+
|
|
51
|
+
## Cómo instalar el hook
|
|
52
|
+
|
|
53
|
+
El template [`templates/commit-msg`](../templates/commit-msg) es POSIX sh **sin dependencias**
|
|
54
|
+
(no necesita dai, node ni commitlint). Elige según tu repo:
|
|
55
|
+
|
|
56
|
+
**Con [husky](https://typicode.github.io/husky/) (si ya lo usas):**
|
|
57
|
+
```bash
|
|
58
|
+
cp templates/commit-msg .husky/commit-msg && chmod +x .husky/commit-msg
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Git hook pelado (sin herramientas):**
|
|
62
|
+
```bash
|
|
63
|
+
cp templates/commit-msg .git/hooks/commit-msg && chmod +x .git/hooks/commit-msg
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Para compartirlo con el equipo sin husky, versiona los hooks en el repo y apunta git ahí:
|
|
67
|
+
```bash
|
|
68
|
+
mkdir -p .githooks && cp templates/commit-msg .githooks/ && chmod +x .githooks/commit-msg
|
|
69
|
+
git config core.hooksPath .githooks
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Opt-in ([Art. 14](../docs/MANIFIESTO.md#art-14) — no adelantar complejidad)
|
|
73
|
+
|
|
74
|
+
El hook es **opcional**. Un equipo chico puede seguir la convención a mano; uno grande la
|
|
75
|
+
blinda con el hook y/o el CI. La convención es la misma en cualquier nivel de ceremonia
|
|
76
|
+
(N1/N2/N3 — ver [glosario](../docs/glosario.md)); solo cambia cuánto se automatiza.
|