exis_ray 0.5.10 → 0.5.11

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ad15b3b5656e54690df31596233aabafaf70a5061b9086d6a601a60370fca16
4
- data.tar.gz: 6d2d87410cb374c1f8c9ddee2b6caf730f959a6c87bc63004ef43e52a290d8c1
3
+ metadata.gz: 38ac0186226043d69ad60406f9aa32045a8d1192e223322735c76773a1fd41dd
4
+ data.tar.gz: 5a37831fc8b34237723ca0ab929c79d469fe316241d97b859272f25b8349e6b6
5
5
  SHA512:
6
- metadata.gz: dd4d89629f65123d600cddf5dbca462b2bfcf50f9c4be9a40a87f9f4fc57949ff2ab5e6c5c65a0095040a99b63bca225a08c9a8d223b90231735049f6bb8f71a
7
- data.tar.gz: 173790ac008fe33aa7b2aca4823dbe7bb94a5428e9628181bcde0325ed3260cc95f75a706751ee56829cca5778d211a386ae1654c83d0af737f401f3ed537501
6
+ metadata.gz: a7f0c1f2e1629f593fd3af2608678568fae5890cd2eb6ed19450364e2a353725dd730baa4cc665498695d0062147728b68d45f3f0485acce93a2e370a956442d
7
+ data.tar.gz: 84dc5252d489b2e28f5b9909d3928b49b8dfdc176019f4e2dcb066a7e25c1da460752625aca61b2be5c404c2eb7187da813de3fc34f02ba447a8e29902800129
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: agent-review
3
+ description: Review de código entre agentes AI via ClickUp. Úsala SIEMPRE que el usuario mencione "review", "crear review", "review para gemini/opencode/claude", "que revise gemini/opencode/claude", "tengo reviews pendientes", o quiera que otro agente revise el trabajo realizado. Crea tickets con checklist de revisores, permite agregar revisores, y guía el proceso de review. Requiere MCP de ClickUp.
4
+ ---
5
+
6
+ # Agent Review
7
+
8
+ Skill para crear y gestionar reviews de código entre agentes AI. Un agente trabaja, crea un ticket de review en ClickUp, y otros agentes lo revisan y dan feedback — todo trazable.
9
+
10
+ ## Configuración
11
+
12
+ ### MCP de ClickUp
13
+ Requiere el MCP de ClickUp. Verificá que esté en `mcps:` del `skills.yml`:
14
+
15
+ ```yaml
16
+ mcps:
17
+ - clickup
18
+ ```
19
+
20
+ ### Lista en ClickUp
21
+
22
+ | Lista | ID | Uso |
23
+ |---|---|---|
24
+ | **Agent Reviews** | `901415149921` | Reviews de código entre agentes |
25
+
26
+ ## Flujos
27
+
28
+ ### 1. Crear review
29
+
30
+ **Trigger:** El usuario dice "creá un review para Gemini" o "review para Gemini y OpenCode".
31
+
32
+ #### Paso 1 — Recopilar contexto
33
+ Analizá TODO el trabajo realizado en la sesión actual revisando estas 3 fuentes:
34
+ 1. **Commits sin pushear:** `git log @{u}..HEAD --oneline` (o desde el último tag si no hay upstream)
35
+ 2. **Cambios sin commitear:** `git diff` y `git diff --cached` (staged + unstaged)
36
+ 3. **Archivos nuevos:** `git status` para detectar archivos no trackeados
37
+
38
+ Con base en ese análisis completo, armá el resumen para la descripción del ticket:
39
+ - **Resumen de cambios:** qué se hizo y por qué
40
+ - **Decisiones tomadas:** elecciones de diseño, trade-offs
41
+ - **Cambios pendientes:** qué falta por hacer
42
+ - **Dudas o riesgos:** puntos que merecen atención del revisor
43
+
44
+ #### Paso 2 — Crear ticket
45
+ Usá `clickup_create_task` en la lista Agent Reviews (`901415149921`):
46
+
47
+ **Título:** `[proyecto] — descripción concreta de lo que se hizo`
48
+ - Ejemplo: `[bug_bunny] Implementar reconexión con backoff exponencial`
49
+ - Ejemplo: `[billing-api] Migrar endpoint de pagos a V2`
50
+ - NO poner "review" en el título — ya se sabe por la lista.
51
+
52
+ **Descripción:**
53
+
54
+ El agente debe analizar los commits sin pushear, cambios sin commitear y archivos nuevos, **entender** qué se hizo, y **escribir** la descripción en sus propias palabras. No copiar output de git ni listar archivos mecánicamente. Referenciar archivos solo cuando aportan contexto puntual (ej: "Breaking change en `reconnect!` de `connection.rb:45`").
55
+
56
+ ```markdown
57
+ **Proyecto:** [nombre]
58
+ **Autor:** [Claude/Gemini/OpenCode]
59
+ **Fecha:** [YYYY-MM-DD]
60
+ **Revisores:** [lista de agentes que deben revisar]
61
+
62
+ ## Resumen
63
+ [Qué se hizo y por qué — 2-3 líneas]
64
+
65
+ ## Qué se hizo
66
+ [Descripción clara y detallada del trabajo realizado. Explicar la lógica,
67
+ los componentes creados o modificados, y cómo encajan. Referenciar archivos
68
+ solo cuando es relevante para entender un punto específico.]
69
+
70
+ ## Decisiones
71
+ [Elecciones de diseño y justificación de cada una]
72
+
73
+ ## Pendiente
74
+ [Qué falta por hacer o commitear, si corresponde]
75
+
76
+ ## Atención
77
+ [Puntos que el revisor debería mirar con cuidado: breaking changes,
78
+ riesgos, dependencias de test, etc.]
79
+
80
+ ## Checklist
81
+ - [ ] [Agente revisor 1]
82
+ - [ ] [Agente revisor 2]
83
+ ```
84
+
85
+ #### Paso 3 — Agregar tags
86
+ Con `clickup_add_tag_to_task`:
87
+ - Tag del **proyecto** (ej: `bug_bunny`, `billing-api`)
88
+ - Tag de cada **agente revisor** (ej: `gemini`, `opencode`). NO taguear al autor.
89
+
90
+ #### Paso 4 — Confirmar
91
+ Mostrá al usuario: "Review creado: [link]. Revisores: [lista]. Cuando levantes [agente], decile 'tengo reviews pendientes'."
92
+
93
+ ---
94
+
95
+ ### 2. Agregar revisor a review existente
96
+
97
+ **Trigger:** El usuario dice "agregá a OpenCode al review".
98
+
99
+ 1. Buscar el ticket de review más reciente del proyecto actual en Agent Reviews (`901415149921`) por tag del proyecto.
100
+ 2. Agregar al revisor en el checklist (comentario con actualización).
101
+ 3. Agregar tag del nuevo agente.
102
+ 4. Confirmar: "OpenCode agregado como revisor a [link]."
103
+
104
+ ---
105
+
106
+ ### 3. Revisar
107
+
108
+ **Trigger:** El usuario dice "tengo reviews pendientes" o "revisá los reviews".
109
+
110
+ #### Paso 1 — Buscar reviews pendientes
111
+ Buscar en Agent Reviews (`901415149921`) tickets abiertos donde este agente está como revisor sin marcar.
112
+
113
+ #### Paso 2 — Leer el ticket
114
+ Para cada review pendiente, mostrá un resumen al usuario:
115
+ - Proyecto, agente autor, fecha
116
+ - Resumen del trabajo
117
+ - Puntos de atención
118
+
119
+ #### Paso 3 — Revisar los cambios
120
+ Analizá los cambios locales del proyecto:
121
+ - Leer los archivos mencionados en el ticket
122
+ - Verificar coherencia entre lo descrito y lo implementado
123
+ - Evaluar decisiones de diseño
124
+ - Identificar bugs potenciales, mejoras, o riesgos
125
+
126
+ #### Paso 4 — Dar feedback
127
+ Crear comentario en el ticket con `clickup_create_task_comment`:
128
+
129
+ ```
130
+ ## Review — [agente]
131
+ **Desde:** [proyecto]
132
+ **Agente:** [Claude/Gemini/OpenCode]
133
+ **Fecha:** [YYYY-MM-DD]
134
+
135
+ ### Veredicto: [Aprobado / Aprobado con observaciones / Requiere cambios]
136
+
137
+ ### Observaciones
138
+ [Feedback detallado punto por punto]
139
+
140
+ ### Sugerencias
141
+ [Mejoras opcionales]
142
+
143
+ ### Issues encontrados
144
+ [Bugs o problemas que necesitan atención]
145
+ ```
146
+
147
+ #### Paso 5 — Marcar como revisado
148
+ Actualizar el checklist marcando al agente como revisado. Si todos los revisores marcaron, informar al usuario que el review está completo.
149
+
150
+ ---
151
+
152
+ ### 4. Verificar y cerrar review (agente autor)
153
+
154
+ **Trigger:** El usuario dice "revisá mi review", "cómo está mi review", "cerrá el review" al agente que creó el review original.
155
+
156
+ #### Paso 1 — Buscar reviews creados por este agente
157
+ Buscar en Agent Reviews (`901415149921`) tickets abiertos por tag del proyecto actual donde este agente es el autor.
158
+
159
+ #### Paso 2 — Leer feedback de los revisores
160
+ Leer los comentarios del ticket con `clickup_get_task_comments`. Para cada revisor:
161
+ - ¿Comentó? ¿Marcó su check?
162
+ - ¿Cuál fue su veredicto? (Aprobado / Aprobado con observaciones / Requiere cambios)
163
+ - ¿Qué observaciones o issues encontró?
164
+
165
+ #### Paso 3 — Mostrar resumen al usuario
166
+ ```
167
+ Review: [título]
168
+ Revisores:
169
+ ✅ [Agente A] — Aprobado con observaciones: [resumen]
170
+ ✅ [Agente B] — Aprobado: [resumen]
171
+ ⬜ [Agente C] — Pendiente
172
+
173
+ Estado: Todos revisaron / Falta [agente]
174
+ ```
175
+
176
+ #### Paso 4 — Cerrar si corresponde
177
+ - Si **todos** revisaron y **ninguno** pidió "Requiere cambios": cerrar el ticket con `clickup_update_task` (status → **done**).
178
+ - Si algún revisor pidió **"Requiere cambios"**: informar al usuario qué cambios piden y NO cerrar.
179
+ - Si **faltan revisores**: informar quién falta y NO cerrar.
180
+
181
+ ---
182
+
183
+ ## Nota sobre agentes
184
+
185
+ Esta skill funciona con **cualquier agente AI** que tenga acceso al MCP de ClickUp (Claude Code, Gemini CLI, OpenCode, o cualquier otro). Los nombres de agentes en los ejemplos son ilustrativos — el flujo es el mismo independientemente de qué agentes se usen como autor o revisores.
186
+
187
+ ---
188
+
189
+ ## Ejemplo de flujo completo
190
+
191
+ ```
192
+ 1. Usuario trabaja con Agente A en bug_bunny
193
+ → Agente A implementa reconexión con backoff exponencial
194
+
195
+ 2. Usuario: "creá un review para Agente B y Agente C"
196
+ → Agente A crea ticket en ClickUp con resumen, decisiones, checklist
197
+
198
+ 3. Usuario abre Agente B en el repo de bug_bunny
199
+ Usuario: "tengo reviews pendientes"
200
+ → Agente B busca en ClickUp, encuentra el ticket
201
+ → Agente B revisa los cambios, comenta feedback, marca su check
202
+
203
+ 4. Usuario abre Agente C en el repo
204
+ Usuario: "revisá los reviews"
205
+ → Agente C lee ticket + review de Agente B
206
+ → Agente C comenta feedback, marca su check
207
+
208
+ 5. Usuario vuelve a Agente A
209
+ Usuario: "revisá mi review"
210
+ → Agente A lee los comentarios de los revisores
211
+ → Agente A muestra resumen de veredictos
212
+ → Si todos aprobaron, cierra el ticket
213
+ ```
@@ -0,0 +1,211 @@
1
+ ---
2
+ name: ai-reports
3
+ description: Gestiona reportes generados por agentes AI en el espacio ai_knowledge de ClickUp. Úsala cuando detectes un bug en una dependencia, quieras sugerir una mejora, o necesites registrar un TODO. Requiere MCP de ClickUp.
4
+ ---
5
+
6
+ # AI Reports
7
+
8
+ Skill para reportar bugs, mejoras y TODOs desde cualquier proyecto del ecosistema al espacio `ai_knowledge` de ClickUp. Usá esta skill cuando un agente detecte un problema con una dependencia, identifique una oportunidad de mejora, o necesite registrar una tarea.
9
+
10
+ ## Configuración
11
+
12
+ ### MCP de ClickUp
13
+ Esta skill requiere el MCP de ClickUp. Verificá que esté en `mcps:` del `skills.yml`:
14
+
15
+ ```yaml
16
+ mcps:
17
+ - clickup
18
+ ```
19
+
20
+ Si el MCP no está disponible, generá un archivo local como fallback (ver sección Fallback).
21
+
22
+ ### Espacio y Listas
23
+
24
+ | Lista | ID | Uso |
25
+ |---|---|---|
26
+ | **Bug Reports** | `901415148810` | Bugs detectados en gemas o servicios del ecosistema. |
27
+ | **Improvements** | `901415148812` | Sugerencias de mejora para skills, gemas o servicios. |
28
+
29
+ ## Alcance — Solo dependencias propias
30
+
31
+ **Regla:** Solo reportar bugs e improvements para gemas, servicios y skills que están bajo nuestro control — es decir, declaradas en el `skills.yml` del proyecto actual (`gems:`, `services:` o `skills:`).
32
+
33
+ Si el problema es en una dependencia externa (ej: `rails`, `redis`, `sidekiq`), **no crear reporte**. Informar al usuario que el problema está fuera de nuestro control y sugerirle que abra un issue en el repo del mantenedor.
34
+
35
+ ## Cuándo reportar
36
+
37
+ ### Bug Report
38
+ Cuando el agente detecta un problema en una dependencia **propia** (declarada en `skills.yml`):
39
+ - Un método no se comporta como dice la skill/documentación
40
+ - Un error se repite en Sentry y el origen es una dependencia propia
41
+ - Un test falla por un bug en una gema interna
42
+ - Incompatibilidad entre versiones de dependencias propias
43
+
44
+ ### Improvement
45
+ Cuando el agente identifica una oportunidad de mejora en algo **propio**:
46
+ - Una skill podría cubrir un caso que no contempla
47
+ - Un patrón de código se repite en varios servicios y podría extraerse
48
+ - La documentación de una gema propia es insuficiente o incorrecta
49
+ - Un flujo podría automatizarse
50
+
51
+
52
+ ## Flujo de reporte
53
+
54
+ ### Paso 1 — Preguntar destino
55
+ Preguntá al usuario: "¿Querés reportarlo en ClickUp o generar un archivo local?"
56
+
57
+ ### Paso 2 — Clasificar
58
+ Determiná el tipo de reporte:
59
+ - **Bug** → lista Bug Reports (`901415148810`)
60
+ - **Improvement** → lista Improvements (`901415148812`)
61
+
62
+ ### Paso 3 — Generar contenido
63
+
64
+ #### Template de Bug Report
65
+ ```
66
+ Título: [gema/servicio] — descripción breve del problema
67
+
68
+ Descripción:
69
+ ## Contexto
70
+ - **Reportado desde:** [nombre del proyecto actual]
71
+ - **Versión del proyecto:** [versión actual]
72
+ - **Versión de la dependencia:** [versión de la gema/servicio afectado]
73
+
74
+ ## Problema
75
+ [Descripción clara del bug]
76
+
77
+ ## Reproducción
78
+ [Pasos o código para reproducir]
79
+
80
+ ## Stacktrace
81
+ [Si hay stacktrace relevante]
82
+
83
+ ## Impacto
84
+ [Frecuencia, severidad, usuarios afectados]
85
+
86
+ ## Sugerencia
87
+ [Si el agente tiene una hipótesis de la causa o solución]
88
+ ```
89
+
90
+ #### Template de Improvement
91
+ ```
92
+ Título: [gema/servicio/skill] — descripción breve de la mejora
93
+
94
+ Descripción:
95
+ ## Contexto
96
+ - **Detectado en:** [nombre del proyecto actual]
97
+
98
+ ## Situación actual
99
+ [Qué pasa hoy]
100
+
101
+ ## Mejora propuesta
102
+ [Qué debería pasar]
103
+
104
+ ## Beneficio
105
+ [Por qué vale la pena]
106
+ ```
107
+
108
+ ### Paso 4 — Crear el reporte
109
+
110
+ **Con MCP de ClickUp:**
111
+ Usá `clickup_create_task` con:
112
+ - `list_id` según el tipo de reporte
113
+ - `name` del template
114
+ - `description` del template
115
+ - `priority` según severidad (bug crítico → urgent, mejora → normal)
116
+
117
+ Después de crear el task, agregar **tags** con `clickup_add_tag_to_task`:
118
+ - **Tipo:** `gem` o `service` (según la dependencia afectada)
119
+ - **Nombre:** el nombre de la gema o servicio (ej: `bug_bunny`, `billing-api`)
120
+
121
+ Esto permite filtrar en ClickUp:
122
+ - Todos los bugs de gemas → tag `gem`
123
+ - Bugs de una gema específica → tag `bug_bunny`
124
+ - Todos los bugs de servicios → tag `service`
125
+ - Bugs de un servicio específico → tag `billing-api`
126
+
127
+ **Mostrar link del task creado al usuario.**
128
+
129
+ ### Paso 5 — Confirmar
130
+ Mostrá un resumen: "Task creado en ClickUp: [link]. Lista: [nombre]. Tags: [tipo, nombre]. Prioridad: [prioridad]."
131
+
132
+ ---
133
+
134
+ ## Cerrar reportes resueltos
135
+
136
+ Cuando el agente está en el repo de una gema o servicio y resuelve un bug que tiene un ticket en ClickUp:
137
+
138
+ ### Paso 1 — Buscar tickets abiertos
139
+ Usá `clickup_search` o `clickup_filter_tasks` para buscar en Bug Reports (`901415148810`) por el tag de la gema/servicio actual.
140
+
141
+ ### Paso 2 — Identificar el ticket
142
+ Si el fix matchea con un reporte abierto (por descripción, error, o referencia), mostrá el ticket al usuario y preguntá: "¿Este fix resuelve el ticket [título] ([link])?"
143
+
144
+ ### Paso 3 — Cerrar
145
+ Con confirmación del usuario, usá `clickup_update_task` para:
146
+ - Cambiar status a **done** o **closed**
147
+ - Agregar un comentario con `clickup_create_task_comment`: "Resuelto en [proyecto] v[versión]. Commit: [hash]."
148
+
149
+ ---
150
+
151
+ ## Conversación entre agentes via comentarios
152
+
153
+ Los tickets funcionan como hilo de comunicación asíncrona entre el servicio que reportó y la gema/servicio afectado.
154
+
155
+ ### Leer comentarios pendientes
156
+ Cuando el agente entra a un repo, puede verificar si hay tickets con actividad nueva:
157
+
158
+ 1. Buscar tickets abiertos en Bug Reports (`901415148810`) e Improvements (`901415148812`) con el tag de la gema/servicio actual.
159
+ 2. Para cada ticket, leer comentarios con `clickup_get_task_comments`.
160
+ 3. Si hay comentarios nuevos (preguntas, pedidos de info), mostrá un resumen al usuario: "Hay [N] tickets con actividad nueva para [nombre]."
161
+
162
+ ### Responder a un comentario
163
+ Cuando el agente tiene información que aportar a un ticket:
164
+
165
+ 1. Usá `clickup_create_task_comment` para agregar la respuesta.
166
+ 2. Identificá el contexto: desde qué proyecto se responde, qué se investigó, qué se encontró.
167
+
168
+ Ejemplo de flujo:
169
+ ```
170
+ 1. billing-api reporta: "bug_bunny: reconexión falla después de timeout"
171
+ 2. bug_bunny lee, comenta: "¿Qué versión de RabbitMQ? ¿SSL habilitado?"
172
+ 3. billing-api lee, responde: "RabbitMQ 3.12, SSL on, timeout 30s"
173
+ 4. bug_bunny comenta: "Bug en connection.rb:45. Fix en v4.9.1"
174
+ 5. bug_bunny cierra el ticket
175
+ ```
176
+
177
+ ### Formato de comentarios
178
+ ```
179
+ **Desde:** [nombre del proyecto] v[versión]
180
+ **Agente:** [Claude/Gemini/OpenCode]
181
+
182
+ [Contenido del comentario]
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Fallback — Archivo local
188
+
189
+ Si el MCP de ClickUp no está disponible, generá un archivo local:
190
+
191
+ ```
192
+ .reports/
193
+ 2026-04-04-bug-bug_bunny-reconnect.md
194
+ 2026-04-04-improvement-sentry-skill-pagination.md
195
+ 2026-04-04-todo-investigar-redis-timeout.md
196
+ ```
197
+
198
+ Formato del nombre: `YYYY-MM-DD-[tipo]-[descripción-breve].md`
199
+
200
+ El contenido usa los mismos templates. Estos archivos se pueden subir a ClickUp después manualmente o en el próximo sync.
201
+
202
+ ## Integración con otras skills
203
+
204
+ Las siguientes skills pueden invocar `ai-reports` cuando detectan algo reportable:
205
+
206
+ - **`quality-code`** — Si detecta un patrón problemático recurrente en una dependencia.
207
+ - **`sentry`** — Si un error apunta a un bug en una gema interna.
208
+ - **`skill-builder`** — Si al analizar el código encuentra antipatrones o documentación faltante en dependencias.
209
+ - **`gem-release` / `service-release`** — Si durante el release se detectan issues que no bloquean pero deberían registrarse.
210
+
211
+ En todos los casos, la skill pregunta al usuario antes de crear el reporte.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: documentation-writer
3
+ description: 'Diátaxis Documentation Expert. An expert technical writer specializing in creating high-quality software documentation, guided by the principles and structure of the Diátaxis technical documentation authoring framework.'
4
+ ---
5
+
6
+ # Diátaxis Documentation Expert
7
+
8
+ You are an expert technical writer specializing in creating high-quality software documentation.
9
+ Your work is strictly guided by the principles and structure of the Diátaxis Framework (https://diataxis.fr/).
10
+
11
+ ## GUIDING PRINCIPLES
12
+
13
+ 1. **Clarity:** Write in simple, clear, and unambiguous language.
14
+ 2. **Accuracy:** Ensure all information, especially code snippets and technical details, is correct and up-to-date.
15
+ 3. **User-Centricity:** Always prioritize the user's goal. Every document must help a specific user achieve a specific task.
16
+ 4. **Consistency:** Maintain a consistent tone, terminology, and style across all documentation.
17
+
18
+ ## YOUR TASK: The Four Document Types
19
+
20
+ You will create documentation across the four Diátaxis quadrants. You must understand the distinct purpose of each:
21
+
22
+ - **Tutorials:** Learning-oriented, practical steps to guide a newcomer to a successful outcome. A lesson.
23
+ - **How-to Guides:** Problem-oriented, steps to solve a specific problem. A recipe.
24
+ - **Reference:** Information-oriented, technical descriptions of machinery. A dictionary.
25
+ - **Explanation:** Understanding-oriented, clarifying a particular topic. A discussion.
26
+
27
+ ## WORKFLOW
28
+
29
+ You will follow this process for every documentation request:
30
+
31
+ 1. **Acknowledge & Clarify:** Acknowledge my request and ask clarifying questions to fill any gaps in the information I provide. You MUST determine the following before proceeding:
32
+ - **Document Type:** (Tutorial, How-to, Reference, or Explanation)
33
+ - **Target Audience:** (e.g., novice developers, experienced sysadmins, non-technical users)
34
+ - **User's Goal:** What does the user want to achieve by reading this document?
35
+ - **Scope:** What specific topics should be included and, importantly, excluded?
36
+
37
+ 2. **Propose a Structure:** Based on the clarified information, propose a detailed outline (e.g., a table of contents with brief descriptions) for the document. Await my approval before writing the full content.
38
+
39
+ 3. **Generate Content:** Once I approve the outline, write the full documentation in well-formatted Markdown. Adhere to all guiding principles.
40
+
41
+ ## CONTEXTUAL AWARENESS
42
+
43
+ - When I provide other markdown files, use them as context to understand the project's existing tone, style, and terminology.
44
+ - DO NOT copy content from them unless I explicitly ask you to.
45
+ - You may not consult external websites or other sources unless I provide a link and instruct you to do so.
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: gem-release
3
+ description: Automatiza el proceso de liberación (release) de gemas Ruby siguiendo estándares de industria. Úsala cuando necesites subir una nueva versión a RubyGems. Ejecuta quality-code, propone versión, genera CHANGELOG, regenera la skill y publica. Soporta [patch|minor|major].
4
+ ---
5
+
6
+ # Gem Release Expert
7
+
8
+ Sos el responsable de garantizar que el proceso de publicación de una gema sea seguro, pase todos los controles de calidad y tenga documentación de clase mundial.
9
+
10
+ ## Parámetros de Uso
11
+ - `/gem-release` — El agente analiza los cambios y propone el tipo de bump.
12
+ - `/gem-release patch|minor|major` — Override manual del tipo de bump.
13
+
14
+ ## Flujo de Trabajo Obligatorio
15
+
16
+ ### Paso 1 — Quality Code
17
+ Ejecutá `quality-code` para validar linting, tests, YARD incremental y skill.
18
+
19
+ ### Paso 2 — Propuesta de Versión
20
+ No asumas rutas fijas. Investigá el entorno:
21
+ - Detectá el nombre de la gema del `.gemspec`.
22
+ - Localizá el archivo de versión (`lib/**/version.rb`).
23
+ - Leé la versión actual.
24
+ - **Análisis de cambios:** Revisá **todas** las fuentes de cambios:
25
+ 1. Commits desde el último tag: `git log [último-tag]...HEAD`
26
+ 2. Diff commiteado contra el tag: `git diff [último-tag]...HEAD`
27
+ 3. Cambios sin commitear (staged + unstaged): `git status` y `git diff` / `git diff --cached`
28
+
29
+ **Importante:** Los cambios sin commitear son parte del release.
30
+
31
+ Clasificá todos los cambios en conjunto:
32
+ - **major** — Breaking changes: métodos/clases eliminados o renombrados, cambios en firmas de métodos públicos, cambios incompatibles en comportamiento.
33
+ - **minor** — Nuevas funcionalidades: métodos/clases nuevos, nuevas opciones de configuración, funcionalidad extendida sin romper compatibilidad.
34
+ - **patch** — Bugfixes, mejoras de performance, refactors internos sin cambios en la API pública.
35
+ - **Propuesta:** Mostrá un resumen de los cambios, la clasificación y la versión propuesta (Actual → Nueva). Esperá confirmación.
36
+ - Si el usuario pasó un override (`/gem-release major`), usá ese tipo directamente.
37
+
38
+ ### Paso 3 — Documentación y Skill
39
+ 1. **Skill Experta:** Ejecutá `skill-builder` en modo **completo** para regenerar `skill/SKILL.md` (y `references/`, `scripts/` si aplica) con la API actualizada de la nueva versión.
40
+ 2. **Gemspec — Empaquetado de la Skill:** Ejecutá `/skill-manager check` para validar que el gemspec esté en orden. Verificá que `skill/` esté incluido en `spec.files`.
41
+ - Si `spec.files` usa `git ls-files`, asegurate de que `skill/` esté commiteado.
42
+ - Si `spec.files` usa un glob explícito, asegurate de que incluya `skill/**/*`.
43
+ - Asegurá la presencia de `metadata["documentation_uri"]` apuntando a `skill/`.
44
+
45
+ ### Paso 4 — Aplicación del Release
46
+ 1. Actualizá el archivo `version.rb` con la Nueva Versión.
47
+ 2. **Generar entrada de CHANGELOG** (ver sección "Generación de CHANGELOG" abajo).
48
+ 3. **Persistencia Git:**
49
+ - `git add .`
50
+ - `git commit -m "release: v[NUEVA_VERSION]"`
51
+ - `git tag -a v[NUEVA_VERSION] -m "Version [NUEVA_VERSION]"`
52
+
53
+ ### Paso 5 — Push (Requiere confirmación)
54
+ Mostrá un resumen del commit y el tag creados. Esperá confirmación explícita antes de pushear.
55
+ - `git push origin main`
56
+ - `git push origin v[NUEVA_VERSION]`
57
+
58
+ **Nota:** No es necesario hacer `gem build` ni `gem push` manualmente. Un GitHub Action se encarga de buildear y publicar la gema en RubyGems cuando detecta el tag.
59
+
60
+ ---
61
+
62
+ ## Generación de CHANGELOG
63
+
64
+ ### Fuente de datos
65
+ Leer todos los commits desde el último tag: `git log [último-tag]...HEAD --format="%H %s (%an)"`
66
+
67
+ ### Filtrado
68
+ Ignorar commits que matcheen:
69
+ - `release:` — commits de release anteriores
70
+ - `Merge branch` / `Merge pull request` — merges automáticos
71
+ - `chore:` — tareas de mantenimiento sin impacto funcional
72
+
73
+ ### Agrupación por tipo
74
+ Clasificar cada commit por su prefijo conventional commit:
75
+
76
+ ```markdown
77
+ ## [X.X.X] — YYYY-MM-DD
78
+
79
+ ### Nuevas funcionalidades
80
+ - Agregar endpoint de facturación (#123) — @dev1
81
+ - Soportar filtro por fecha en listado — @dev2
82
+
83
+ ### Correcciones
84
+ - Corregir cálculo de IVA en pagos parciales — @dev1
85
+ - Resolver timeout en conexión a Redis — @dev3
86
+
87
+ ### Mejoras internas
88
+ - Extraer servicio de notificaciones — @dev2
89
+ - Optimizar queries de reportes — @dev1
90
+ ```
91
+
92
+ **Mapeo de prefijos:**
93
+ - `feat:` → **Nuevas funcionalidades**
94
+ - `fix:` → **Correcciones**
95
+ - `refactor:`, `perf:`, `style:` → **Mejoras internas**
96
+ - `docs:` → **Documentación**
97
+ - `test:` → **Tests**
98
+ - Sin prefijo reconocido → **Otros cambios**
99
+
100
+ ### Formato
101
+ - Cada entrada: descripción limpia (sin el prefijo), PR o issue si está en el mensaje, autor (`@nombre`).
102
+ - Fecha en formato `YYYY-MM-DD`.
103
+ - Si el `CHANGELOG.md` no existe, crearlo con header `# Changelog`.
104
+ - La entrada nueva va al tope del archivo, debajo del header.
105
+
106
+ ### Atribución
107
+ Extraer el autor de cada commit con `git log --format="%an"`. Esto permite saber qué dev contribuyó a cada cambio en el release.
108
+
109
+ ---
110
+
111
+ ## Reglas de Seguridad y Estilo
112
+ - **Tag con `v`:** Los tags de gemas usan formato `vX.X.X`.
113
+ - **Stop on Failure:** Si quality-code falla, detenete. No fuerces el release.
114
+ - **Confirmation:** Siempre esperá confirmación antes de persistir cambios en Git y publicar.
115
+ - **Sin Hardcoding:** No uses versiones de Ruby o rutas específicas. Confiá en el entorno configurado.
116
+ - **CHANGELOG is Law:** Todo release debe tener su entrada en CHANGELOG.md.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: quality-code
3
+ description: Validación de calidad para proyectos Ruby (gemas y servicios). Ejecuta RuboCop, tests, YARD incremental y actualiza la skill del proyecto. Invocala manualmente en cualquier momento o dejá que `gem-release` y `service-release` la ejecuten como primer paso.
4
+ ---
5
+
6
+ # Quality Code
7
+
8
+ Barrera de calidad para proyectos Ruby. Valida que el código cumpla los estándares antes de mergear, hacer release o en cualquier momento que quieras verificar el estado de tu branch.
9
+
10
+ ## Detección de tipo de proyecto
11
+
12
+ - **Gema**: existe `.gemspec` en la raíz.
13
+ - **Servicio**: existe `config/application.rb`.
14
+
15
+ ## Flujo de Trabajo
16
+
17
+ ### Paso 1 — Linting
18
+ - Ejecutá `bundle exec rubocop -a` (o `-A`) para corregir ofensas automáticas.
19
+ - Si quedan ofensas que no se pueden auto-corregir, reportalas y detenete.
20
+
21
+ ### Paso 2 — Tests
22
+ - Ejecutá `bundle exec rspec` (o el test runner detectado).
23
+ - Si un test falla, el proceso se detiene inmediatamente.
24
+
25
+ ### Paso 3 — Base de Datos (solo servicios)
26
+ - Verificá si hay migraciones en `db/migrate/`.
27
+ - Asegurate de que `db/schema.rb` esté actualizado y consistente.
28
+
29
+ ### Paso 4 — Auditoría YARD Incremental (Boy Scout Rule)
30
+ Solo documentá lo que cambió:
31
+ - Analizá `git diff [PRIMARY_BRANCH]...HEAD` para detectar métodos públicos o protegidos nuevos o modificados.
32
+ - **Importante:** También revisá cambios sin commitear (`git status`, `git diff`, `git diff --cached`).
33
+ - Todo método afectado DEBE tener documentación YARD completa (`@param`, `@return`, `@yield` si aplica).
34
+ - Si falta documentación en métodos tocados, generala basándote en la lógica del código.
35
+
36
+ ### Paso 5 — Sincronización de Skill
37
+ - Ejecutá `skill-builder` en modo **incremental** para actualizar `skill/SKILL.md` (y `references/`, `scripts/` si aplica) con los cambios actuales.
38
+ - Auditá si el `README.md` necesita actualizarse por los cambios.
39
+
40
+ ### Paso 6 — Reporte
41
+ Mostrá un resumen de lo ejecutado:
42
+ - RuboCop: OK / X ofensas corregidas
43
+ - Tests: OK / X tests, X failures
44
+ - YARD: OK / X métodos documentados
45
+ - Skill: actualizada / sin cambios
46
+ - README: actualizado / sin cambios
47
+
48
+ ## Reglas
49
+ - **Stop on Failure:** Si los tests o el linting fallan, detenete. No continues con los pasos siguientes.
50
+ - **Sin Hardcoding:** No uses versiones de Ruby o rutas específicas. Confiá en el entorno configurado.
51
+ - **Explain the Why:** Si sugerís cambios en documentación, explicá cómo mejora la mantenibilidad.