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 +4 -4
- data/.agents/skills/agent-review/SKILL.md +213 -0
- data/.agents/skills/ai-reports/SKILL.md +211 -0
- data/.agents/skills/documentation-writer/SKILL.md +45 -0
- data/.agents/skills/gem-release/SKILL.md +116 -0
- data/.agents/skills/quality-code/SKILL.md +51 -0
- data/.agents/skills/skill-builder/SKILL.md +293 -0
- data/.agents/skills/skill-manager/SKILL.md +172 -0
- data/.agents/skills/skill-manager/scripts/sync.rb +310 -0
- data/.agents/skills/yard/SKILL.md +311 -0
- data/.agents/skills/yard/references/tipos.md +144 -0
- data/CHANGELOG.md +15 -0
- data/CLAUDE.md +32 -11
- data/README.md +237 -234
- data/lib/exis_ray/configuration.rb +6 -4
- data/lib/exis_ray/current.rb +2 -2
- data/lib/exis_ray/http_middleware.rb +2 -0
- data/lib/exis_ray/json_formatter.rb +2 -3
- data/lib/exis_ray/sidekiq/client_middleware.rb +1 -0
- data/lib/exis_ray/sidekiq/server_middleware.rb +2 -2
- data/lib/exis_ray/task_monitor.rb +10 -7
- data/lib/exis_ray/version.rb +1 -1
- data/lib/exis_ray.rb +3 -1
- data/skill/SKILL.md +437 -0
- data/skills.lock +27 -0
- data/skills.yml +24 -0
- data/spec/spec_helper.rb +0 -1
- metadata +20 -9
- data/.claude/commands/release.md +0 -64
- data/.claude/skills/opentelemetry/SKILL.md +0 -61
- data/.claude/skills/rails-expert/SKILL.md +0 -85
- data/.claude/skills/readme-writer/SKILL.md +0 -84
- data/.claude/skills/rubocop-omakase/SKILL.md +0 -114
- data/.claude/skills/yard/SKILL.md +0 -77
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 38ac0186226043d69ad60406f9aa32045a8d1192e223322735c76773a1fd41dd
|
|
4
|
+
data.tar.gz: 5a37831fc8b34237723ca0ab929c79d469fe316241d97b859272f25b8349e6b6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|