@factor_ec/ai-tools 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.
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: ab-git-commit
3
+ description: 'Ejecutar git commit con análisis de mensajes conventional commits, staging inteligente y generación de mensajes. Usar cuando el usuario pida hacer commit de cambios, crear un git commit o mencione "/commit". Soporta: (1) Detección automática de tipo y scope desde los cambios, (2) Generación de mensajes conventional commit desde el diff, (3) Commit interactivo con opciones para sobrescribir tipo/scope/descripción, (4) Staging inteligente de archivos para agrupación lógica'
4
+ license: MIT
5
+ allowed-tools: Bash
6
+ ---
7
+
8
+ # Git Commit con Conventional Commits
9
+
10
+ ## Resumen
11
+
12
+ Crear commits de git estandarizados y semánticos usando la especificación Conventional Commits. Analizar el diff real para determinar el tipo, scope y mensaje apropiados.
13
+
14
+ ## Formato Conventional Commit
15
+
16
+ ```
17
+ <type>[optional scope]: <description>
18
+
19
+ [optional body]
20
+
21
+ [optional footer(s)]
22
+ ```
23
+
24
+ ## Tipos de Commit
25
+
26
+ | Tipo | Propósito |
27
+ | ---------- | --------------------------------- |
28
+ | `feat` | Nueva funcionalidad |
29
+ | `fix` | Corrección de bug |
30
+ | `docs` | Solo documentación |
31
+ | `style` | Formato/estilo (sin lógica) |
32
+ | `refactor` | Refactorización (sin feature/fix) |
33
+ | `perf` | Mejora de rendimiento |
34
+ | `test` | Añadir/actualizar tests |
35
+ | `build` | Sistema de build/dependencias |
36
+ | `ci` | Cambios en CI/configuración |
37
+ | `chore` | Mantenimiento/miscelánea |
38
+ | `revert` | Revertir commit |
39
+
40
+ ## Cambios Breaking
41
+
42
+ ```
43
+ # Signo de exclamación después de type/scope
44
+ feat!: remove deprecated endpoint
45
+
46
+ # Footer BREAKING CHANGE
47
+ feat: allow config to extend other configs
48
+
49
+ BREAKING CHANGE: `extends` key behavior changed
50
+ ```
51
+
52
+ ## Flujo de Trabajo
53
+
54
+ ### 1. Analizar el Diff
55
+
56
+ ```bash
57
+ # Si hay archivos en staging, usar el diff staged
58
+ git diff --staged
59
+
60
+ # Si no hay nada en staging, usar el diff del árbol de trabajo
61
+ git diff
62
+
63
+ # También verificar el estado
64
+ git status --porcelain
65
+ ```
66
+
67
+ ### 2. Añadir Archivos al Staging (si es necesario)
68
+
69
+ Si no hay nada en staging o quieres agrupar los cambios de otra forma:
70
+
71
+ ```bash
72
+ # Añadir archivos específicos
73
+ git add path/to/file1 path/to/file2
74
+
75
+ # Añadir por patrón
76
+ git add *.test.*
77
+ git add src/components/*
78
+
79
+ # Staging interactivo
80
+ git add -p
81
+ ```
82
+
83
+ **Nunca hacer commit de secretos** (.env, credentials.json, claves privadas).
84
+
85
+ ### 3. Generar el Mensaje del Commit
86
+
87
+ Analizar el diff para determinar:
88
+
89
+ - **Tipo**: ¿Qué tipo de cambio es este?
90
+ - **Scope**: ¿Qué área/módulo está afectado?
91
+ - **Descripción**: Resumen en una línea de lo que cambió (tiempo presente, modo imperativo, <72 caracteres)
92
+
93
+ ### 4. Ejecutar el Commit
94
+
95
+ ```bash
96
+ # Una sola línea
97
+ git commit -m "<type>[scope]: <description>"
98
+
99
+ # Multi-línea con body/footer
100
+ git commit -m "$(cat <<'EOF'
101
+ <type>[scope]: <description>
102
+
103
+ <optional body>
104
+
105
+ <optional footer>
106
+ EOF
107
+ )"
108
+ ```
109
+
110
+ ## Buenas Prácticas
111
+
112
+ - Un cambio lógico por commit
113
+ - Tiempo presente: "add" no "added"
114
+ - Modo imperativo: "fix bug" no "fixes bug"
115
+ - Referenciar issues: `Closes #123`, `Refs #456`
116
+ - Mantener la descripción bajo 72 caracteres
117
+
118
+ ## Protocolo de Seguridad Git
119
+
120
+ - NUNCA actualizar la configuración de git
121
+ - NUNCA ejecutar comandos destructivos (--force, hard reset) sin petición explícita
122
+ - NUNCA saltar hooks (--no-verify) a menos que el usuario lo pida
123
+ - NUNCA hacer force push a main/master
124
+ - Si el commit falla por hooks, corregir y crear un NUEVO commit (no amend)
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: project-create
3
+ description: Orienta la creación de un proyecto nuevo según el stack tecnológico disponible (Angular, React, Symfony u otros registrados), usando la plantilla del equipo en el repo del usuario. No crea ni modifica los repos plantilla. Si el usuario no indica el stack, el agente debe preguntar cuál desea antes de seguir. Para cada stack documentado, sigue el archivo en references/. Usar con skill project-create (/project-create) o cuando el usuario pida crear un proyecto de un stack concreto.
4
+ ---
5
+
6
+ # Crear proyecto nuevo (desde proyecto base)
7
+
8
+ ## Qué es (y qué no es)
9
+
10
+ - **Sí**: crear un **proyecto nuevo para el usuario** importando el contenido de un **proyecto base** ya mantenido por el equipo (template).
11
+ - **No**: crear, publicar ni mantener el repositorio del proyecto base; ese es otro flujo.
12
+
13
+ El patrón habitual: **repo git del usuario ya existente** → remote hacia la plantilla → **fetch/merge** → instalación de dependencias del stack → **sustitución** de nombres/IDs/envs según el tipo.
14
+
15
+ ---
16
+
17
+ ## Obligatorio: tipo de proyecto
18
+
19
+ Antes de ejecutar comandos o merges:
20
+
21
+ 1. Si el usuario usa **`/project-create`** (skill **project-create**) o pide explícitamente “crear proyecto” / “nuevo proyecto desde plantilla”, **comprueba si ha indicado el stack tecnológico**: Angular, React, Symfony, u otro listado en [Registro de proyectos base](#registro-de-proyectos-base).
22
+ 2. **Si el tipo no está claro o no lo ha dicho**, **no asumas Angular ni otro stack**. **Pregunta de forma explícita**, por ejemplo: *¿Qué tipo de proyecto quieres crear? (Por ahora el procedimiento detallado está para **Angular**; **React** y **Symfony** están pendientes de documentar.)*
23
+ 3. Cuando el tipo esté claro, **lee el material de referencia de ese stack** (si existe) y sigue solo ese flujo.
24
+
25
+ | Stack | Referencia detallada | Estado |
26
+ |----------|----------------------|--------|
27
+ | Angular | **[references/angular.md](references/angular.md)** — **leer este archivo al completo** cuando el usuario quiera un **proyecto Angular** nuevo desde la plantilla (no confundir con mantener el repo `angular-base-project`). | Completo |
28
+ | React | _pendiente_ | Preguntar; avisar si aún no hay `references/react.md`. |
29
+ | Symfony | _pendiente_ | Idem. |
30
+
31
+ ---
32
+
33
+ ## Convenciones comunes (cualquier stack)
34
+
35
+ 1. **Repo del usuario**: debe ser **raíz de un repositorio git** (`.git` presente). Si no: `git init` o clonar antes.
36
+ 2. **Remote hacia la plantilla**: convención `upstream` salvo que el repo ya lo use para otra cosa; si hay conflicto, acordar nombre y anotarlo en el registro.
37
+ 3. **Merge**: normalmente `git merge upstream/<rama-default> --allow-unrelated-histories` con mensaje que nombre el template.
38
+ 4. **Post-merge**: comandos del stack (`npm install`, `composer install`, …) y sustituciones acordadas.
39
+ 5. **Conflictos**: si el merge falla, orientar resolución manual.
40
+
41
+ ---
42
+
43
+ ## Registro de proyectos base
44
+
45
+ Cada fila describe **de dónde** se parte para crear el **proyecto nuevo** del usuario. El detalle operativo por stack vive en `references/<stack>.md` cuando exista.
46
+
47
+ | Tipo | Repo del proyecto base | Referencia |
48
+ |---------|-------------------------|------------|
49
+ | Angular | `https://github.com/juanca202/angular-base-project.git` | [references/angular.md](references/angular.md) |
50
+ | React | _TBD_ | _TBD_ |
51
+ | Symfony | _TBD_ | _TBD_ |
52
+
53
+ ### Extender este skill
54
+
55
+ 1. Añadir `references/<stack>.md` con el mismo nivel de detalle que Angular.
56
+ 2. Registrar la fila en [Registro de proyectos base](#registro-de-proyectos-base) y enlazar desde la tabla “tipo de proyecto”.
57
+ 3. Mantener la lista de stacks en la tabla alineada con los procedimientos reales de cada plantilla del equipo.
@@ -0,0 +1,124 @@
1
+ # Proyecto nuevo Angular (desde plantilla `angular-base-project`)
2
+
3
+ ## Alcance
4
+
5
+ Esta referencia describe cómo **crear un proyecto nuevo** para el usuario **a partir del proyecto base** del equipo (`angular-base-project`), dentro de un repositorio git **ya existente**.
6
+
7
+ - **Aplica** cuando el usuario pida un **proyecto Angular** nuevo.
8
+ - **No aplica** si el objetivo es **crear, publicar o mantener** el repositorio del proyecto base en sí; ese es otro proceso.
9
+
10
+ ---
11
+
12
+ ## Requisitos previos
13
+
14
+ 1. **Git**: el directorio de trabajo (`targetPath` o el actual) debe ser la **raíz de un repo** con `.git`. Si no existe: `git init` o clonar antes de seguir.
15
+ 2. **Herramientas**: `git` y **Node/npm** disponibles en el PATH para `npm install` y `npm start`.
16
+ 3. **Red**: acceso a GitHub para `git fetch` del remoto de la plantilla.
17
+
18
+ ---
19
+
20
+ ## Parámetros
21
+
22
+ | Parámetro | Obligatorio | Descripción |
23
+ |----------------|-------------|-------------|
24
+ | `projectName` | Sí | Nombre legible del paquete / app (ej. `mi-app`). |
25
+ | `projectId` | Sí | Identificador (ej. `mi-app` o `com.empresa.miapp`). |
26
+ | `targetPath` | No | Raíz del repo donde ejecutar; si se omite o está vacío: directorio actual. |
27
+
28
+ ### Validación
29
+
30
+ Ambos `projectName` y `projectId` deben cumplir:
31
+
32
+ - No vacíos; `projectName` máx. **64** caracteres, `projectId` máx. **128**.
33
+ - Patrón: deben **empezar** con letra o número; el resto puede ser letras, números, `.`, `_`, `-` (regex: `^[a-zA-Z0-9][a-zA-Z0-9._-]*$`).
34
+
35
+ ---
36
+
37
+ ## Proyecto base (plantilla)
38
+
39
+ | Concepto | Valor |
40
+ |----------|--------|
41
+ | URL del repo | `https://github.com/juanca202/angular-base-project.git` |
42
+ | Nombre del remote | `upstream` |
43
+ | Rama a integrar | `upstream/main` |
44
+ | Mensaje de merge sugerido | `Merge angular-base-project template` |
45
+
46
+ ---
47
+
48
+ ## Procedimiento paso a paso
49
+
50
+ Ejecutar desde la **raíz del repo del usuario** (`targetPath`).
51
+
52
+ ### 1. Añadir remote `upstream`
53
+
54
+ ```bash
55
+ git remote add upstream https://github.com/juanca202/angular-base-project.git
56
+ ```
57
+
58
+ - Si Git responde que el remote **ya existe** y apunta al repo correcto del equipo, **continuar** sin duplicar.
59
+ - Si existe pero apunta a **otra** URL, no sobrescribir sin acuerdo con el usuario; puede ser un `upstream` legítimo para forks.
60
+
61
+ ### 2. Obtener la plantilla
62
+
63
+ ```bash
64
+ git fetch upstream
65
+ ```
66
+
67
+ ### 3. Merge con historias no relacionadas
68
+
69
+ ```bash
70
+ git merge upstream/main --allow-unrelated-histories -m "Merge angular-base-project template"
71
+ ```
72
+
73
+ - Si hay **conflictos**, el usuario (o el agente guiando) debe resolverlos antes de seguir.
74
+ - Si la plantilla cambiara la rama por defecto en el futuro, ajustar la ref (`upstream/<rama>`) según el registro del skill principal.
75
+
76
+ ### 4. Dependencias
77
+
78
+ ```bash
79
+ npm install
80
+ ```
81
+
82
+ En la raíz del proyecto (donde está `package.json` tras el merge).
83
+
84
+ ### 5. Personalizar `package.json`
85
+
86
+ - Campo **`name`**: debe quedar como `projectName` (valor JSON entre comillas dobles).
87
+
88
+ Sustituir el valor actual del campo `"name"` por `projectName`.
89
+
90
+ ### 6. Personalizar environments (si existen)
91
+
92
+ Archivos típicos (rutas relativas al repo):
93
+
94
+ - `src/environments/environment.ts`
95
+ - `src/environments/environment.development.ts`
96
+
97
+ En cada uno que exista, alinear:
98
+
99
+ - `appName: '…'` → `appName: '<projectName>'` (comillas simples como en la plantilla esperada).
100
+ - `appId: '…'` → `appId: '<projectId>'`
101
+
102
+ Si la plantilla añade más archivos `environment.*.ts`, aplicar la misma convención si existe `appName` / `appId`.
103
+
104
+ ---
105
+
106
+ ## Después del setup
107
+
108
+ ```bash
109
+ npm start
110
+ ```
111
+
112
+ Desde la raíz del proyecto. Confirmar la ruta final con el usuario si usó `targetPath` distinto del cwd.
113
+
114
+ ---
115
+
116
+ ## Errores habituales
117
+
118
+ | Situación | Qué hacer |
119
+ |-----------|-----------|
120
+ | No hay `.git` en la ruta | Inicializar o clonar repo antes. |
121
+ | `git remote add` falla por otra razón que no sea “already exists” | Revisar stderr; corregir URL o nombre de remote. |
122
+ | `git fetch` / `git merge` fallan | Red, permisos, rama inexistente, o **conflictos** en merge. |
123
+ | `npm install` falla | Revisar versión de Node, lockfile, y errores de red/registry. |
124
+ | Validación de nombres | Ajustar `projectName` / `projectId` al patrón y longitudes indicados. |
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: user-story-add-task
3
+ description: Crea especificaciones en TK-XXX.md bajo docs/product/US-.../ (sin implementar código), con metadatos, unidad de trabajo obligatoria e implementador previsto opcional (inferible con git config user.name o lo que indique el usuario). Enlaza technical-docs y docs/adr; valida coherencia con la historia (US) y otras tareas.
4
+ ---
5
+
6
+ # Crear tarea de historia de usuario (TK-XXX)
7
+
8
+ ## Alcance de este skill: solo especificaciones
9
+
10
+ Cuando se pida **crear una tarea**, el agente debe producir **únicamente el documento de especificación** (`TK-XXX-....md`) y, si corresponde, actualizar o enlazar documentación existente autorizada. **No implementar** código, migraciones, APIs ni pruebas: solo redactar las especificaciones que luego guiarán la implementación.
11
+
12
+ ## Cuándo aplicar
13
+
14
+ Al documentar trabajo técnico asociado a una historia de usuario existente.
15
+
16
+ **Prerrequisito:** debe existir la carpeta `docs/product/US-XXX-[nombre-corto]/` con su `README.md`.
17
+
18
+ Las historias de usuario pueden descomponerse en tareas técnicas. Cada tarea se documenta en un **archivo independiente** dentro de la carpeta de la historia.
19
+
20
+ ## Contexto obligatorio: la historia de usuario
21
+
22
+ Antes de redactar o crear el archivo de tarea:
23
+
24
+ 1. **Leer y usar** el `README.md` de la historia (US-XXX) a la que pertenece la tarea como contexto principal (Como/Quiero/Para, características, reglas de negocio, criterios de aceptación).
25
+ 2. **Revisar todas las tareas ya existentes** en esa misma carpeta (`TK-*.md` del mismo `US-XXX`) y comprobar que la nueva tarea **no contradiga** alcances, supuestos ni entregables de las demás; si hay solapamiento o conflicto, **aclarar con el usuario** o ajustar el alcance en el documento antes de dar la tarea por **lista para implementar**.
26
+
27
+ ## Aclaraciones previas
28
+
29
+ Si la descripción solicitada para la tarea es **poco clara**, **incompleta** o **ambigua**, **no crear** aún el `TK-XXX-....md`. **Preguntar al usuario** lo necesario (límites técnicos, flujos, datos, integraciones, dependencias entre tareas, etc.) y **solo cuando la información sea suficiente** para cumplir la validación previa (apartado siguiente), proceder a la creación del documento.
30
+
31
+ ## Validación previa a la creación del documento
32
+
33
+ Antes de crear el archivo de tarea, comprobar lo siguiente. Si algo no se cumple, resolver preguntando o completando referencias — **no avanzar** con un TK vacío o genérico.
34
+
35
+ - **Sin ambigüedades:** la descripción y el alcance técnico se entienden sin suposiciones ocultas.
36
+ - **Contexto técnico suficiente** en la medida que aplique, referenciado o explícito: por ejemplo modelo **entidad-relación** o esquema de datos, **DTOs** o contratos, **flujos** (secuencia, estados), y decisiones de arquitectura ya documentadas.
37
+ - **ADRs y arquitectura:** las definiciones arquitectónicas deben **apoyarse en ADRs existentes** bajo **`docs/adr/`**. **No crear** archivos ADR de forma automática. Si la tarea revela la necesidad de una decisión arquitectónica no documentada, **sugerir al usuario** que conviene añadir o actualizar un ADR en `docs/adr/` y enlazarlo desde la tarea cuando exista.
38
+ - **Referencias:** usar `docs/product/technical-docs/` para detalle técnico de producto (DTOs, endpoints, etc.) cuando aporte claridad, y rutas al código o contratos del repo según el proyecto.
39
+ - **Unidad de trabajo:** debe estar definida (inferida con criterio o confirmada por el usuario); sin ella, no crear el TK.
40
+
41
+ ## Ubicación
42
+
43
+ - Directorio: `docs/product/US-XXX-[nombre-corto]/` (mismo nivel que `README.md` y `assets/`).
44
+ - Documentación transversal (DTOs, contratos API, etc.): `docs/product/technical-docs/`, enlazada con rutas relativas desde la tarea (`../technical-docs/...`).
45
+ - Decisiones de arquitectura: enlazar archivos bajo **`docs/adr/`** con ruta relativa adecuada desde el repo (p. ej. `../../../docs/adr/...` según la profundidad real del proyecto).
46
+
47
+ ## Formato del nombre del archivo
48
+
49
+ `TK-XXX-[nombre-descriptivo].md`
50
+
51
+ **Convenciones:**
52
+
53
+ - El prefijo `TK-XXX` debe estar en mayúsculas (ejemplo: `TK-001`, `TK-002`)
54
+ - El número es secuencial **dentro de la historia**
55
+ - El nombre descriptivo debe estar en minúsculas y en formato kebab-case
56
+ - Ejemplos: `TK-001-seleccion-materiales.md`, `TK-002-creacion-dry-good-temporal.md`
57
+
58
+ ## Metadatos en cabecera y unidad de trabajo
59
+
60
+ Toda tarea debe incluir al inicio del cuerpo (después del título `#`), una lista de metadatos **en el mismo espíritu** que la historia de usuario:
61
+
62
+ - **ID:** `TK-XXX` (alineado al archivo y al título)
63
+ - **Nombre corto:** etiqueta breve de la tarea
64
+ - **Estado:** Draft / Ready / In Progress / Done
65
+ - **Prioridad:** Alta / Media / Baja
66
+
67
+ ### Implementador previsto (opcional)
68
+
69
+ Campo **no obligatorio** que indica **quién** tiene previsto implementar la tarea.
70
+
71
+ - Si el **usuario** indica responsable o implementador, usar **esa** indicación.
72
+ - Si no lo indica y conviene rellenarlo, el agente puede **inferir** el valor con la configuración de Git del entorno: `git config user.name` (nombre habitual en el repo local). Si no hay valor útil, omitir la línea o dejar explícito que está pendiente de asignar.
73
+ - **No** es requisito para dar la tarea por lista para implementar: se puede omitir toda la línea.
74
+
75
+ ### Unidad de trabajo (obligatoria)
76
+
77
+ El campo **Unidad de trabajo** es **obligatorio** en cada `TK-XXX`: identifica *dónde* o *en qué artefacto del ecosistema* se ejecuta principalmente el trabajo (paquete, app, módulo, servicio, librería, etc.).
78
+
79
+ - **Inferencia:** si el contexto del repositorio lo permite, el agente puede **inferir** la unidad sin preguntar. Ejemplos:
80
+ - Proyecto **npm/node:** el campo `name` del `package.json` más cercano al alcance de la tarea (raíz del paquete o workspace).
81
+ - **Monorepo:** nombre del paquete o app concreta (según `package.json`, `pnpm-workspace`, `nx.json`, etc.).
82
+ - Otros tipos: equivalente habitual del stack (módulo Gradle/Maven, proyecto .NET, crate de Rust, etc.) según archivos del repo.
83
+ - Si **no** está claro qué conviene (varios paquetes, límites difusos, tarea transversal), **preguntar al usuario** qué unidad de trabajo debe constar antes de crear el documento.
84
+
85
+ En la plantilla, el valor debe quedar escrito de forma explícita (p. ej. `**Unidad de trabajo:** @scope/mi-paquete` o el nombre acordado con el usuario).
86
+
87
+ ## Plantilla del documento
88
+
89
+ ```markdown
90
+ # TK-XXX: Título corto de la tarea
91
+
92
+ - **ID:** TK-XXX
93
+ - **Nombre corto:**
94
+ - **Estado:** Draft / Ready / In Progress / Done
95
+ - **Prioridad:** Alta / Media / Baja
96
+ - **Unidad de trabajo:** _[obligatorio: paquete/módulo/servicio/etc.; inferido del proyecto o indicado por el usuario]_
97
+ - **Implementador previsto:** _[opcional — priorizar lo indicado por el usuario; si no, inferir con `git config user.name`; omitir línea si no aplica]_
98
+
99
+ ## Descripción
100
+
101
+ [Descripción técnica de qué implementar y desde dónde se accede — sin ambigüedad]
102
+
103
+ ## Referencias
104
+
105
+ - **Historia de usuario:** [US-XXX](./README.md) — Nombre de la historia
106
+ - **ADRs (arquitectura):** enlaces a `docs/adr/...` cuando la tarea dependa de decisiones ya registradas; no inventar ADRs nuevos
107
+ - **Documentación técnica (producto):** [título](../technical-docs/archivo.md) — DTOs, ER, flujos, endpoints en `docs/product/technical-docs/` si aplica
108
+ - **Modelos de datos / código:** rutas o enlaces en el repo
109
+ - **Diseño:** [Figma - ...](URL)
110
+ - **Punto de acceso:** ruta en el código
111
+ - **Plantilla:** componente o patrón a reutilizar
112
+
113
+ ## Componentes a usar
114
+
115
+ - Lista de componentes UI o servicios existentes
116
+
117
+ ## Criterios de aceptación
118
+
119
+ - Criterio 1
120
+ - Criterio 2
121
+ - ...
122
+
123
+ ## Alcance técnico
124
+
125
+ - Modelos, DTOs, componentes, repositorios, mutaciones involucradas
126
+ ```
127
+
128
+ ## Alcance del contenido (técnico)
129
+
130
+ La tarea debe ser **técnica**: implementación *descrita*, componentes, modelos, repositorios y criterios verificables por desarrollo. No duplicar la narrativa funcional de la historia de usuario; enlazar `./README.md`.
131
+
132
+ ### Validación de contexto (funcional vs técnico)
133
+
134
+ Antes de dar una tarea por **lista para implementar**, valida que el contexto sea **técnico** (no solo lenguaje funcional del `README.md` de la historia).
135
+
136
+ | Artefacto | Contexto esperado | Ejemplo |
137
+ | --- | --- | --- |
138
+ | **Historia de usuario** (`README.md`) | **Funcional** — valor para el usuario, negocio y criterios en lenguaje de dominio | "Como desarrollador quiero agregar materiales temporales para analizar costos" |
139
+ | **Tarea** (`TK-XXX`) | **Técnico** — implementación, componentes, modelos, repositorios y criterios verificables por desarrollo | "Implementar el diálogo DryGoodPicker usando Material Button, Checkbox y DryGoodRepository" |
140
+
141
+ Para la historia: contexto funcional. Para la tarea: contexto técnico y **lista para implementar** solo si cumple las validaciones de este skill.
142
+
143
+ ## Checklist de evaluación — Tarea (lista para implementar)
144
+
145
+ Antes de considerar una tarea **lista para implementar**, pásala por este checklist:
146
+
147
+ - ¿Está alineada con el `README.md` de la historia (misma carpeta `US-XXX-...`) y **no entra en conflicto** con otras `TK-*.md` de la misma historia?
148
+ - ¿La descripción **no tiene ambigüedades** y el contexto necesario está citado o descrito (ER, DTOs, flujos, **ADRs en `docs/adr/`**, etc.)?
149
+ - ¿Tiene referencia explícita a la historia de usuario?
150
+ - ¿La descripción usa contexto técnico (no funcional)?
151
+ - ¿Incluye referencias necesarias (technical-docs, diseño, punto de acceso, plantilla, ADRs existentes)?
152
+ - ¿Los criterios de aceptación son verificables por desarrollo?
153
+ - ¿El alcance técnico está definido (componentes, repositorios, DTOs)?
154
+ - ¿Está acotada y se puede implementar en un sprint?
155
+ - ¿Se ha **especificado** el trabajo sin **implementar** código en el repositorio?
156
+ - ¿Consta la **unidad de trabajo** (inferida del tipo de proyecto o confirmada preguntando al usuario)?
157
+ - (Opcional) Si figura **Implementador previsto**, ¿coincide con lo dicho por el usuario o con `git config user.name` cuando se infirió?
158
+
159
+ ## Pasos para el agente
160
+
161
+ 1. Leer `./README.md` de la historia objetivo (carpeta `docs/product/US-XXX-...`) y **todas** las tareas `TK-*.md` ya existentes en esa carpeta; detectar solapamientos o conflictos y resolverlos con el usuario o en el texto.
162
+ 2. Determinar **unidad de trabajo**: revisar contexto del repo (p. ej. `package.json`, estructura de monorepo) para inferirla; si no es clara, **preguntar al usuario** antes de crear el archivo.
163
+ 3. **Implementador previsto (opcional):** si el usuario indica quién implementa, usar ese valor; si no y conviene rellenarlo, obtener `git config user.name` en el repositorio y añadir el campo solo si el resultado es útil; en caso contrario omitir la línea.
164
+ 4. Si la petición es incompleta o ambigua, **preguntar aclaraciones**; **no crear** el archivo hasta tener información suficiente para la [Validación previa a la creación del documento](#validación-previa-a-la-creación-del-documento).
165
+ 5. Verificar criterios de validación previa (sin ambigüedad, unidad de trabajo definida, contexto ER/DTOs/flujos/ADRs según aplique; **ADRs solo como referencia a `docs/adr/`** o sugerencia explícita al usuario si falta decisión documentada).
166
+ 6. Identificar el siguiente `TK-XXX` en esa carpeta.
167
+ 7. **Solo entonces** crear el archivo `TK-XXX-....md` con la plantilla (metadatos + **Unidad de trabajo** rellenados; **Implementador previsto** solo si aplica); **no** implementar producto ni tests.
168
+ 8. Si hace falta documentación en `docs/product/technical-docs/`, crear o actualizar allí y enlazar; **no** crear ADRs automáticamente — sugerir al usuario si procede.
169
+ 9. Asegurar el enlace a la historia de usuario: `[US-XXX](./README.md)`.
@@ -0,0 +1,167 @@
1
+ ---
2
+ name: user-story-create
3
+ description: Crea historias de usuario US-XXX bajo docs/product/ con plantilla funcional, Given/When/Then, INVEST, Fibonacci y Definition of Ready. Si la descripción o características son ambiguas o faltan datos para INVEST, pregunta al usuario antes de crear la historia. Usar al crear historias de usuario o docs de producto; technical-docs cuando corresponda.
4
+ ---
5
+
6
+ # Crear historia de usuario
7
+
8
+ ## Cuándo aplicar
9
+
10
+ Al generar o reorganizar una historia de usuario según las convenciones de este repositorio.
11
+
12
+ ## Aclaraciones previas (INVEST)
13
+
14
+ Antes de crear la historia, revisar la **descripción**, las **características**, reglas de negocio y cualquier contexto aportado. Si hay **ambigüedad**, **huecos** o **falta de información** que impida completar con criterio honesto la **validación INVEST** (p. ej. usuario o valor poco claro, alcance indefinido, dependencias desconocidas, criterios de aceptación imposibles de testear sin más detalle), **no** crear aún la carpeta ni el `README.md`.
15
+
16
+ En ese caso, **preguntar al usuario** de forma explícita todo lo necesario: actor y beneficio, límites del alcance, reglas y excepciones, integraciones o dependencias con otras historias (US) o sistemas, supuestos de datos o permisos, y cualquier matiz que permita redactar criterios **Given / When / Then** y valorar **I, N, V, E, S, T** sin forzar respuestas. Solo cuando los insumos sean suficientes, proceder con la creación de la historia.
17
+
18
+ ## Estructura de carpetas
19
+
20
+ Cada historia de usuario se organiza bajo **`docs/product/`**:
21
+
22
+ ```
23
+ docs/product/
24
+ ├── technical-docs/ (Opcional — documentación técnica transversal o por feature)
25
+ │ └── ...
26
+ └── US-[Número]-[Nombre-corto]/
27
+ ├── README.md (Historia de usuario — contexto funcional)
28
+ ├── TK-XXX-[nombre-tarea].md (Tareas — contexto técnico, opcional; ver skill user-story-add-task)
29
+ └── assets/
30
+ ├── imagen-1.png
31
+ ├── diagrama-flujo.svg
32
+ └── ...
33
+ ```
34
+
35
+ **`docs/product/technical-docs/`:** usar para documentar DTOs, entidades, endpoints, reglas de negocio **técnicas** (validaciones, contratos API, invariantes de implementación), etc. Las reglas en **lenguaje de negocio** siguen en el `README.md` de la historia. Nombrar archivos en kebab-case y enlazarlos desde el `README.md` o desde los `TK-XXX` con rutas relativas (por ejemplo `../technical-docs/contrato-api.md`).
36
+
37
+ ### Convenciones del nombre de carpeta
38
+
39
+ - El nombre de la carpeta debe seguir el formato: `US-XXX-[nombre-corto]`
40
+ - El código `US-XXX` debe estar en mayúsculas (ejemplo: `US-001`, `US-002`)
41
+ - El nombre corto debe estar completamente en minúsculas
42
+ - El nombre corto debe ser en formato kebab-case (palabras separadas por guiones)
43
+ - **El nombre debe ser descriptivo pero corto**: eliminar palabras innecesarias como artículos ("de", "del", "la", "una"), preposiciones redundantes y frases largas. Priorizar palabras clave que identifiquen claramente la funcionalidad.
44
+ - Ejemplos de nombres cortos y descriptivos:
45
+ - `US-001-seleccion-item-sdp-desde-receta` (en lugar de "seleccion-de-item-de-sdp-cuando-estoy-en-la-receta")
46
+ - `US-002-seleccion-item-sdp-desde-sdp` (en lugar de "seleccion-de-item-de-sdp-cuando-estoy-en-el-sdp")
47
+ - `US-003-mostrar-contexto-al-crear-receta` (en lugar de "mostrar-datos-de-contexto-al-crear-una-receta")
48
+ - `US-004-resumen-costos-receta` (en lugar de "visualizar-resumen-de-costos-de-la-receta")
49
+ - `US-007-importar-receta` (en lugar de "importar-una-receta")
50
+ - El archivo principal siempre debe llamarse `README.md`
51
+ - Todas las imágenes y recursos visuales deben estar en la carpeta `assets/`
52
+ - Las referencias a imágenes en el README.md deben usar rutas relativas: `![Descripción](assets/nombre-imagen.png)`
53
+
54
+ ## Plantilla README.md
55
+
56
+ Usar esta estructura en el `README.md` de la carpeta de la historia (`US-XXX-...`).
57
+
58
+ ````markdown
59
+ - **ID:** US-XXX
60
+ - **Nombre corto:**
61
+ - **Estado:** Draft / Ready / In Progress / Done
62
+ - **Prioridad:** Alta / Media / Baja
63
+
64
+ ## Descripción
65
+
66
+ **Como** _[tipo de usuario]_
67
+ **Quiero** _[necesidad / acción]_
68
+ **Para** _[beneficio / resultado esperado]_
69
+
70
+ ## Características
71
+
72
+ - Característica 1:
73
+ - Característica 2:
74
+ - Característica 3:
75
+
76
+ ## Reglas de negocio
77
+
78
+ - Regla 1
79
+ - Regla 2
80
+ - Regla 3
81
+
82
+ ## Criterios de Aceptación
83
+
84
+ Formato **Given / When / Then** (obligatorio para considerarse "Ready").
85
+
86
+ ```gherkin
87
+ Given
88
+ When
89
+ Then
90
+ ```
91
+
92
+ ## Validación INVEST
93
+
94
+ La historia debe alinearse con el modelo **INVEST**. Marcar cada criterio solo si se cumple; si alguno no aplica o está en riesgo, documentarlo en observaciones.
95
+
96
+ - [ ] **I — Independiente:** se puede entregar valor sin quedar bloqueada por otras historias no resueltas (o las dependencias están explícitas y acotadas).
97
+ - [ ] **N — Negociable:** el detalle del *qué* es discutible con producto; no impone solución técnica cerrada.
98
+ - [ ] **V — Valiosa:** beneficio claro para usuario o negocio.
99
+ - [ ] **E — Estimable:** hay suficiente contexto para que el equipo estime con confianza razonable.
100
+ - [ ] **S — Pequeña:** alcance acotado para completarse en un sprint; si no, conviene dividir la historia.
101
+ - [ ] **T — Testeable:** los criterios de aceptación permiten comprobar el resultado de forma objetiva.
102
+
103
+ ## Complejidad (Fibonacci)
104
+
105
+ Usar la escala típica de story points: **1, 2, 3, 5, 8, 13** (solo Fibonacci en ese conjunto).
106
+
107
+ - **Story points propuestos:** _[elegir uno: 1 | 2 | 3 | 5 | 8 | 13]_
108
+ - **Justificación breve:** _[por qué ese valor: incertidumbre, alcance, integraciones, riesgo]_
109
+
110
+ El agente debe **proponer** un valor y una justificación acorde al alcance descrito; el equipo puede ajustarlo en refinamiento.
111
+
112
+ ## Definition of Ready
113
+
114
+ Criterios para considerar la historia lista para entrar a planificación / desarrollo. Marcar cuando se cumplan:
115
+
116
+ - [ ] Descripción **Como / Quiero / Para** clara y sin ambigüedad mayor
117
+ - [ ] Criterios de aceptación en **Given / When / Then** redactados
118
+ - [ ] Reglas de negocio y alcance revisados con producto (o explícitamente pendientes en Observaciones)
119
+ - [ ] **INVEST** revisado; bloqueos o dependencias críticas documentadas
120
+ - [ ] Dependencias externas identificadas (diseño, APIs, datos, otras historias US, flags)
121
+ - [ ] **Estimación Fibonacci** propuesta y registrada arriba
122
+ - [ ] Prioridad y valor de negocio coherentes con el backlog
123
+
124
+ ## Observaciones
125
+
126
+ - Observaciones adicionales:
127
+ - Notas importantes:
128
+ - Decisiones pendientes:
129
+ ````
130
+
131
+ ## Alcance del contenido (funcional)
132
+
133
+ La historia debe ser **funcional**: valor para el usuario, el problema de negocio y los criterios de aceptación en lenguaje de dominio — no detalle de implementación (eso va en tareas `TK-XXX` y en `technical-docs/` si aplica).
134
+
135
+ ### Validación de contexto
136
+
137
+ Antes de dar una historia por **lista**, valida que el contexto sea **funcional** (no técnico).
138
+
139
+ | Artefacto | Contexto esperado | Ejemplo |
140
+ | --- | --- | --- |
141
+ | **Historia de usuario** (`README.md`) | **Funcional** — valor para el usuario, negocio y criterios en lenguaje de dominio | "Como desarrollador quiero agregar materiales temporales para analizar costos" |
142
+ | **Tarea** (`TK-XXX`) | **Técnico** — implementación, componentes, modelos, repositorios y criterios verificables por desarrollo | "Implementar el diálogo DryGoodPicker usando Material Button, Checkbox y DryGoodRepository" |
143
+
144
+ Para crear o revisar tareas, usar el skill **user-story-add-task**.
145
+
146
+ ## Checklist de evaluación — Historia de usuario
147
+
148
+ Antes de dar una historia como "lista", pásala por este checklist (complementa **INVEST** y **Definition of Ready** en la plantilla):
149
+
150
+ - ¿Tiene usuario, acción y razón?
151
+ - ¿Es comprensible por producto y dev?
152
+ - ¿Tiene criterios de aceptación claros?
153
+ - ¿Se puede verificar con pruebas?
154
+ - ¿Tiene criterios de "no casos"? (edge cases)
155
+ - ¿Está acotada / no es demasiado grande?
156
+
157
+ ## Pasos para el agente
158
+
159
+ 1. Analizar descripción, **características** y contexto: si hay ambigüedad o falta información para cumplir **INVEST** con rigor, **preguntar primero** al usuario (ver [Aclaraciones previas](#aclaraciones-previas-invest)); no crear archivos hasta tener respuestas suficientes.
160
+ 2. Determinar el siguiente `US-XXX` si no lo da el usuario (revisar carpetas `US-*` existentes en `docs/product/`).
161
+ 3. Proponer `nombre-corto` en kebab-case según las convenciones anteriores.
162
+ 4. Crear carpeta `docs/product/US-XXX-[nombre-corto]/` y `assets/` si hay o habrá imágenes.
163
+ 5. Escribir `README.md` con la plantilla completa, rellenando con la información del usuario.
164
+ 6. Si el usuario pide DTOs, entidades, endpoints o reglas técnicas documentadas: crear `docs/product/technical-docs/` si no existe y añadir o actualizar los documentos allí; enlazarlos desde la historia o desde las tareas.
165
+ 7. Completar **Validación INVEST** (valorar cada letra; si algo falla, anotarlo en Observaciones).
166
+ 8. **Proponer story points (Fibonacci: 1, 2, 3, 5, 8, 13)** con justificación breve según alcance, riesgo e incertidumbre.
167
+ 9. Rellenar el checklist **Definition of Ready**; estado **Ready** implica criterios Given/When/Then en gherkin y, idealmente, DoR marcado en lo esencial según el equipo.