bug_bunny 4.7.0 → 4.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.agents/skills/documentation-writer/SKILL.md +45 -0
  3. data/.agents/skills/gem-release/SKILL.md +114 -0
  4. data/.agents/skills/quality-code/SKILL.md +51 -0
  5. data/.agents/skills/rabbitmq-expert/SKILL.md +1555 -0
  6. data/.agents/skills/sentry/SKILL.md +135 -0
  7. data/.agents/skills/sentry/references/api-endpoints.md +147 -0
  8. data/.agents/skills/sentry/scripts/sentry.rb +194 -0
  9. data/.agents/skills/skill-builder/SKILL.md +232 -0
  10. data/.agents/skills/skill-manager/SKILL.md +172 -0
  11. data/.agents/skills/skill-manager/scripts/sync.rb +310 -0
  12. data/.agents/skills/yard/SKILL.md +311 -0
  13. data/.agents/skills/yard/references/tipos.md +144 -0
  14. data/CHANGELOG.md +21 -0
  15. data/CLAUDE.md +29 -220
  16. data/lib/bug_bunny/client.rb +4 -3
  17. data/lib/bug_bunny/controller.rb +10 -14
  18. data/lib/bug_bunny/exception.rb +1 -1
  19. data/lib/bug_bunny/middleware/raise_error.rb +3 -3
  20. data/lib/bug_bunny/observability.rb +5 -5
  21. data/lib/bug_bunny/producer.rb +11 -13
  22. data/lib/bug_bunny/railtie.rb +8 -7
  23. data/lib/bug_bunny/request.rb +3 -11
  24. data/lib/bug_bunny/resource.rb +51 -21
  25. data/lib/bug_bunny/routing/route_set.rb +32 -21
  26. data/lib/bug_bunny/version.rb +1 -1
  27. data/lib/bug_bunny.rb +3 -2
  28. data/lib/generators/bug_bunny/install/install_generator.rb +45 -5
  29. data/lib/tasks/bug_bunny.rake +50 -0
  30. data/skill/SKILL.md +230 -0
  31. data/skill/references/client-middleware.md +144 -0
  32. data/skill/references/consumer.md +104 -0
  33. data/skill/references/controller.md +105 -0
  34. data/skill/references/errores.md +97 -0
  35. data/skill/references/resource.md +116 -0
  36. data/skill/references/routing.md +82 -0
  37. data/skill/references/testing.md +138 -0
  38. data/skills-lock.json +10 -0
  39. data/skills.lock +24 -0
  40. data/skills.yml +19 -0
  41. metadata +27 -17
  42. data/.claude/commands/pr.md +0 -42
  43. data/.claude/commands/release.md +0 -41
  44. data/.claude/commands/rubocop.md +0 -22
  45. data/.claude/commands/test.md +0 -28
  46. data/.claude/commands/yard.md +0 -46
  47. data/docs/concepts.md +0 -140
  48. data/docs/howto/controller.md +0 -194
  49. data/docs/howto/middleware_client.md +0 -119
  50. data/docs/howto/middleware_consumer.md +0 -127
  51. data/docs/howto/rails.md +0 -214
  52. data/docs/howto/resource.md +0 -200
  53. data/docs/howto/routing.md +0 -133
  54. data/docs/howto/testing.md +0 -259
  55. data/docs/howto/tracing.md +0 -119
  56. data/mejoras.md +0 -33
@@ -0,0 +1,232 @@
1
+ ---
2
+ name: skill-builder
3
+ description: Genera o actualiza la skill empaquetada (`skill/`) para cualquier proyecto Ruby (gema o servicio). Detecta automáticamente el tipo de proyecto y analiza el código correspondiente. Soporta desde un SKILL.md simple hasta skills con references y scripts. Es invocada por `skill-manager`, `gem-release` (regeneración completa) y `quality-code` (actualización incremental).
4
+ ---
5
+
6
+ # Skill Builder
7
+
8
+ Sos un experto en crear skills de conocimiento para proyectos Ruby. Tu objetivo es generar o actualizar `skill/SKILL.md` — un artefacto autocontenido que permite a cualquier agente de IA responder preguntas sobre integración, arquitectura, API, errores y antipatrones del proyecto.
9
+
10
+ ## Detección de tipo de proyecto
11
+
12
+ - **Gema**: existe `.gemspec` en la raíz.
13
+ - **Servicio**: existe `config/application.rb`.
14
+ - Si ambos existen, priorizar gema.
15
+
16
+ **Distribución en gemas:** La skill queda en `skill/` en la raíz del repositorio. Al publicar con `gem-release`, `skill/` se empaqueta en el `.gem`, de modo que los consumidores acceden a la skill directamente desde la gema instalada (`Gem.loaded_specs["[name]"].gem_dir + "/skill/"`) sin descargas adicionales.
17
+
18
+ **Distribución en servicios:** La skill queda en `skill/` en la raíz del repositorio. Los consumidores la descargan vía `skill-manager sync` desde GitHub.
19
+
20
+ ## Escenarios de Complejidad
21
+
22
+ La estructura de `skill/` depende de la complejidad del proyecto. `skill-manager` determina el escenario inicial, pero puede evolucionar con el tiempo:
23
+
24
+ ### Escenario 1 — Proyecto simple
25
+ ```
26
+ skill/
27
+ SKILL.md
28
+ ```
29
+ La skill entera cabe en un solo archivo. Secciones autocontenidas de ≤400 tokens.
30
+
31
+ ### Escenario 2 — Con referencias
32
+ ```
33
+ skill/
34
+ SKILL.md
35
+ references/
36
+ api-detallada.md
37
+ errores.md
38
+ ```
39
+ Cuando la API o contratos son extensos, o el catálogo de errores es grande.
40
+
41
+ ### Escenario 3 — Con scripts
42
+ ```
43
+ skill/
44
+ SKILL.md
45
+ scripts/
46
+ diagnostico.rb
47
+ ```
48
+ Cuando el proyecto necesita herramientas ejecutables (diagnóstico, migración, validación).
49
+
50
+ ### Escenario 4 — Completa
51
+ ```
52
+ skill/
53
+ SKILL.md
54
+ references/
55
+ api-detallada.md
56
+ errores.md
57
+ scripts/
58
+ diagnostico.rb
59
+ migration_helper.rb
60
+ ```
61
+
62
+ ### Criterios para escalar
63
+
64
+ - **→ references/** cuando una sección de `SKILL.md` supera los 400 tokens y es conocimiento de referencia (API, contratos, errores, catálogos).
65
+ - **→ scripts/** cuando el proyecto necesita herramientas ejecutables para diagnóstico, migración o validación que complementen el conocimiento.
66
+
67
+ ## Modos de Ejecución
68
+
69
+ - **Completo** (invocado por `gem-release` o manualmente): Regenera la skill desde cero analizando todo el código.
70
+ - **Incremental** (invocado por `quality-code`): Actualiza solo las secciones afectadas por el diff del PR.
71
+
72
+ ---
73
+
74
+ ## Paso 1 — Descubrir el estado actual
75
+
76
+ Leer en orden:
77
+ 1. `skill/SKILL.md` — si existe, es la skill actual.
78
+ 2. `skill/references/` — referencias existentes.
79
+ 3. `skill/scripts/` — scripts existentes.
80
+ 4. `CLAUDE.md` — propósito del artefacto, arquitectura, decisiones clave.
81
+
82
+ Según el tipo de proyecto:
83
+
84
+ **Si es gema:**
85
+ 5. `.gemspec` — nombre, descripción, dependencias.
86
+ 6. `lib/` — API pública, responsabilidades de clases, firmas de métodos.
87
+ 7. `spec/` o `test/` — patrones de uso, casos borde, errores esperados.
88
+
89
+ **Si es servicio:**
90
+ 5. `config/application.rb` — nombre, configuración.
91
+ 6. `config/routes.rb` — endpoints HTTP expuestos.
92
+ 7. `app/` — controllers, models, services, jobs.
93
+ 8. Queues/mensajería — contratos de eventos (Sidekiq, ActiveJob, etc.).
94
+ 9. `db/migrate/` — esquema y evolución del modelo de datos.
95
+ 10. `spec/` o `test/` — patrones de uso, casos borde, errores esperados.
96
+
97
+ En modo **incremental**, analizar también `git diff [PRIMARY_BRANCH]...HEAD` para identificar qué cambió.
98
+
99
+ ---
100
+
101
+ ## Paso 2 — Analizar el código y determinar escenario
102
+
103
+ **Común a ambos tipos:**
104
+ - **Arquitectura**: Flujo de datos, componentes core, thread safety, dependencias.
105
+ - **Uso**: Ejemplos de integración, patrones comunes.
106
+ - **Errores**: Excepciones personalizadas, causas, resoluciones.
107
+ - **Antipatrones**: Usos incorrectos identificados en tests o código.
108
+ - **Scripts necesarios**: ¿Hay flujos de diagnóstico, migración o validación que justifiquen un script?
109
+
110
+ **Específico de gemas:**
111
+ - **API Pública**: Bloque de configuración, clases principales, métodos públicos, parámetros.
112
+
113
+ **Específico de servicios:**
114
+ - **Contratos**: Endpoints HTTP, queues, eventos publicados/consumidos, webhooks.
115
+ - **Infraestructura**: Variables de entorno, servicios externos, bases de datos.
116
+
117
+ Con base en el análisis, determiná qué escenario de complejidad corresponde (1-4). Si la skill ya existe, evaluá si el escenario debe escalar.
118
+
119
+ ---
120
+
121
+ ## Paso 3 — Generar la Skill
122
+
123
+ Generar `skill/SKILL.md` (y `references/` o `scripts/` si el escenario lo requiere).
124
+
125
+ ### Reglas de escritura (RAG-optimized)
126
+
127
+ 1. **Idioma: español** — Todo el contenido en español. Mantener términos técnicos estándar (ej: "middleware", "routing").
128
+ 2. **Cada sección <= 400 tokens** — Autocontenida, sin asumir contexto de otras secciones. Si una sección supera este límite, extraerla a `references/`.
129
+ 3. **Sin prosa introductoria** — Ir directo al contenido técnico.
130
+ 4. **Sin frontmatter complejo** — No incluir version, profile o audiences.
131
+ 5. **Sin duplicación** — Si un tema está en `references/`, la skill solo lo referencia.
132
+
133
+ ### Estructura de SKILL.md
134
+
135
+ #### Titulo y Descripcion
136
+
137
+ ```markdown
138
+ # [Nombre] Expert
139
+
140
+ Skill de conocimiento completo sobre [Nombre]. Consultame para cualquier pregunta sobre integración, arquitectura, API, errores y antipatrones.
141
+ ```
142
+
143
+ #### Glosario
144
+
145
+ Términos del dominio. Formato: `**Término** — Definición concisa (1-3 líneas).`
146
+
147
+ #### Arquitectura
148
+
149
+ - Responsabilidad core.
150
+ - Mapa de componentes (diagrama ASCII).
151
+ - Flujo en runtime y decisiones de diseño.
152
+
153
+ **Formato de diagramas ASCII:**
154
+ - Cajas con `┌─┐└─┘`, flechas con `────>` (horizontal) y `│▼` (vertical).
155
+ - Máximo 4-5 componentes por diagrama. Si hay más, dividir en sub-diagramas por capa.
156
+ - Sin texto decorativo fuera de las cajas.
157
+
158
+ Ejemplo:
159
+ ```
160
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
161
+ │ Request │────>│ Middleware│────>│ Handler │
162
+ └──────────┘ └──────────┘ └──────────┘
163
+
164
+
165
+ ┌──────────┐
166
+ │ Cache │
167
+ └──────────┘
168
+ ```
169
+
170
+ #### API Publica (gemas)
171
+
172
+ - Bloque de configuración (tipos, defaults, restricciones).
173
+ - Clases y métodos (firma, parámetros, retorno).
174
+ - Ejemplos de código para operaciones principales.
175
+ - Si la API es extensa, mantener un resumen acá y extraer el detalle a `references/api-detallada.md`.
176
+
177
+ #### Contratos (servicios)
178
+
179
+ - Endpoints HTTP (método, path, parámetros, respuesta).
180
+ - Queues y eventos (nombre, payload, productor/consumidor).
181
+ - Webhooks (si aplica).
182
+ - Si los contratos son extensos, extraer a `references/contratos.md`.
183
+
184
+ #### FAQ
185
+
186
+ Formato Q&A estricto. H3 para la pregunta, respuesta <= 150 palabras. Sin preámbulo.
187
+
188
+ #### Antipatrones
189
+
190
+ Qué NO hacer. Por cada uno: nombre, código incorrecto, razón y alternativa.
191
+
192
+ #### Errores
193
+
194
+ Catálogo de excepciones. Por cada una: nombre, causa, reproducción y resolución.
195
+ Si el catálogo es extenso, mantener los errores más comunes acá y extraer el catálogo completo a `references/errores.md`.
196
+
197
+ #### Referencias (si existen)
198
+
199
+ Índice de archivos en `references/` y `scripts/` con descripción de una línea.
200
+
201
+ ```markdown
202
+ ## Referencias
203
+
204
+ - [API Detallada](references/api-detallada.md) — Documentación completa de clases y métodos
205
+ - [Catálogo de Errores](references/errores.md) — Todas las excepciones con resolución
206
+ - [Diagnóstico](scripts/diagnostico.rb) — Script para verificar configuración en runtime
207
+ ```
208
+
209
+ ---
210
+
211
+ ## Paso 4 — Actualizar README.md
212
+
213
+ Actualizá `README.md` (máx 150 líneas) con:
214
+ - Descripción en una línea.
215
+ - Setup básico y Quick start.
216
+ - Features principales.
217
+ - Link a `skill/SKILL.md` para conocimiento profundo.
218
+
219
+ ---
220
+
221
+ ## Paso 5 — Mostrar resumen y esperar aprobación
222
+
223
+ Mostrá un resumen de los cambios realizados:
224
+ - Tipo de proyecto detectado (gema o servicio).
225
+ - Escenario de complejidad determinado (y si escaló respecto al anterior).
226
+ - Secciones nuevas, modificadas o eliminadas en `SKILL.md`.
227
+ - Archivos nuevos o actualizados en `references/` o `scripts/`.
228
+ - Cambios en README.md.
229
+
230
+ Preguntá: "¿Querés ver el diff completo antes de escribir los archivos?"
231
+
232
+ **Esperá la aprobación explícita del desarrollador** antes de persistir los cambios.
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: skill-manager
3
+ description: Configura, valida y sincroniza la infraestructura de skills en cualquier proyecto Ruby (gema o servicio). Úsala para inicializar `skills.yml`, verificar la skill del proyecto (`skill/`), sincronizar skills de dependencias a `.agents/skills/`, o validar que todo el estándar se cumpla. Requiere `skill-builder`.
4
+ ---
5
+
6
+ # Skill Manager
7
+
8
+ Skill unificada que gestiona toda la infraestructura de skills de un proyecto Ruby, sea gema o microservicio. Detecta automáticamente el tipo de proyecto y actúa en consecuencia.
9
+
10
+ ## Detección de tipo de proyecto
11
+
12
+ - **Gema**: existe `.gemspec` en la raíz.
13
+ - **Servicio**: existe `config/application.rb`.
14
+ - Si ambos existen, priorizar gema.
15
+
16
+ ## Requisitos
17
+ - La skill `skill-builder` debe estar disponible para generar `skill/SKILL.md`.
18
+
19
+ ---
20
+
21
+ ## Flujo de Trabajo (Modo Update)
22
+
23
+ ### Paso 1 — Determinar escenario de complejidad de la skill
24
+ Analizá el proyecto para determinar qué estructura de `skill/` corresponde:
25
+
26
+ - **Escenario 1 (simple):** Proyecto pequeño → solo `skill/SKILL.md`.
27
+ - **Escenario 2 (con referencias):** API extensa o catálogo de errores grande → `SKILL.md` + `references/`.
28
+ - **Escenario 3 (con scripts):** Necesita herramientas de diagnóstico, migración o validación → `SKILL.md` + `scripts/`.
29
+ - **Escenario 4 (completa):** Combina referencias y scripts → `SKILL.md` + `references/` + `scripts/`.
30
+
31
+ Si `skill/` ya existe, evaluá si el escenario debe escalar.
32
+
33
+ ### Paso 2 — Generar o actualizar la skill del proyecto
34
+ Ejecutá `skill-builder` para generar o actualizar `skill/`. El skill-builder detecta automáticamente si es gema o servicio y analiza el código correspondiente.
35
+
36
+ ### Paso 3 — Gemspec (solo gemas)
37
+ Si el proyecto es una gema, verificá que el `.gemspec` cumpla:
38
+
39
+ 1. **`metadata["documentation_uri"]`** apuntando a la carpeta de skill.
40
+ - Si falta, inferí la URL desde `homepage_uri` o `source_code_uri`:
41
+ `spec.metadata["documentation_uri"] = "https://github.com/[ORG]/[GEM_NAME]/blob/v#{spec.version}/skill"`
42
+
43
+ 2. **`spec.files` incluye `skill/`** para que la skill se empaquete dentro de la gema.
44
+ - Si usa `git ls-files`: verificá que `skill/` no esté en `.gitignore`.
45
+ - Si usa un glob explícito: asegurate de que incluya `skill/**/*`.
46
+
47
+ - Mostrá el diff y pedí confirmación antes de escribir.
48
+
49
+ ### Paso 4 — Configurar skills.yml
50
+ Si no existe `skills.yml` en la raíz, crealo detectando dependencias en el `Gemfile` y repos conocidos.
51
+
52
+ ```yaml
53
+ # skills.yml — Manifiesto único de skills del proyecto
54
+
55
+ # --- MCPs requeridos ---
56
+ # Declara qué MCPs necesita el proyecto. Las skills verifican
57
+ # disponibilidad antes de usarlos. Si falta alguno, avisan pero no se rompen.
58
+
59
+ mcps:
60
+ - github
61
+ - clickup
62
+
63
+ # --- Dependencias (sync) ---
64
+
65
+ gems: # Skills empaquetadas en gemas (copia local)
66
+ - name: mi_gema
67
+
68
+ services: # Skills de microservicios (GitHub → skill/)
69
+ - name: mi_servicio
70
+ repo: wispro/mi_servicio
71
+
72
+ skills: # Skills de repos GitHub (con path opcional)
73
+ # Sin path → usa convención .agents/skills/[name]/
74
+ - name: gem-release
75
+ repo: wispro/ai_knowledge
76
+ - name: skill-manager
77
+ repo: wispro/ai_knowledge
78
+ # Con path → para skills.sh u otros repos con estructura distinta
79
+ - name: rabbitmq-expert
80
+ repo: martinholovsky/claude-skills-generator
81
+ path: skills/rabbitmq-expert
82
+
83
+ # --- Configuración de skills ---
84
+ # Cada skill puede tener su sección de configuración específica.
85
+ # Las skills leen su sección del skills.yml del proyecto.
86
+
87
+ sentry:
88
+ projects:
89
+ - billing-api
90
+ - billing-workers
91
+ ```
92
+
93
+ *Mostrá diff y pedí confirmación.*
94
+
95
+ ### Paso 5 — Configurar sincronización
96
+ Asegurate de que el script de sync esté configurado para ejecutarse:
97
+ - Agregá al final de `bin/setup`:
98
+ ```bash
99
+ ruby .agents/skills/skill-manager/scripts/sync.rb
100
+ ```
101
+
102
+ ### Paso 6 — Git
103
+ - Agregá las skills de dependencias al `.gitignore` (cada entrada declarada en `skills.yml`):
104
+ ```gitignore
105
+ # Skills de dependencias (generadas por skill-manager sync)
106
+ .agents/skills/[dep-name]/
107
+ ```
108
+
109
+ ### Paso 7 — CLAUDE.md
110
+ El bloque "Knowledge Base" debe estar al **tope absoluto** del archivo:
111
+ ```markdown
112
+ ## Knowledge Base
113
+ - **Mandato Crítico:** Las skills en `.agents/skills/` incluyen conocimiento de dependencias.
114
+ - **Protocolo de Consulta:** El agente DEBE leer la skill de una dependencia antes de responder sobre ella.
115
+ - **Rebuild:** `ruby .agents/skills/skill-manager/scripts/sync.rb` actualiza las skills de dependencias.
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Script de sincronización
121
+
122
+ El script `scripts/sync.rb` lee `skills.yml` y sincroniza todas las skills de dependencias a `.agents/skills/`.
123
+
124
+ | Sección | Fuente | Mecanismo |
125
+ |---|---|---|
126
+ | `gems` | Gema Ruby instalada | Copia local desde `gem_dir/skill/` |
127
+ | `services` | Repo de microservicio | GitHub API → `skill/` del repo |
128
+ | `skills` | Repo GitHub | GitHub API → path configurable (default: `.agents/skills/[name]/`) |
129
+
130
+ ### Ejecución directa
131
+ ```bash
132
+ ruby .agents/skills/skill-manager/scripts/sync.rb
133
+ ```
134
+
135
+ ### Requisitos del script
136
+ - Ruby (stdlib — sin dependencias externas)
137
+ - `gh` CLI o `GITHUB_TOKEN` en el entorno (para repos privados)
138
+ - `skills.yml` en la raíz del proyecto
139
+
140
+ ---
141
+
142
+ ## MCP de GitHub (opcional)
143
+
144
+ Si tenés un MCP de GitHub disponible, el agente puede usarlo para:
145
+ - **Inspeccionar repos** sin depender de `GITHUB_TOKEN` en el entorno.
146
+ - **Detectar estructura de skills** en dependencias.
147
+ - **Armar `skills.yml` inicial**: explorar repos del `Gemfile` y detectar cuáles tienen skill.
148
+ - **Verificar cambios**: comparar la skill local con la remota antes de actualizar.
149
+
150
+ Si el MCP no está disponible, se ejecuta el script de sync como fallback.
151
+
152
+ ---
153
+
154
+ ## Modos de Uso
155
+
156
+ ### /skill-manager check
157
+ Valida el cumplimiento del estándar sin modificar archivos:
158
+ 1. Verificá que exista `skill/SKILL.md`.
159
+ 2. Verificá consistencia: todo archivo en `references/` y `scripts/` debe estar referenciado en `SKILL.md`, y viceversa.
160
+ 3. **(Solo gemas)** Verificá `documentation_uri` y que `spec.files` incluya `skill/`.
161
+ 4. Verificá existencia de `skills.yml`.
162
+ 5. Verificá `.gitignore` y `bin/setup`.
163
+ 6. Reportá: OK o lista de errores con pasos para resolverlos.
164
+
165
+ ### /skill-manager update
166
+ Ejecuta el flujo de trabajo completo (Pasos 1-7). Configura toda la infraestructura sin tocar contenido existente de skills.
167
+
168
+ ### /skill-manager sync
169
+ Actualiza las skills de dependencias en `.agents/skills/`:
170
+ 1. Si hay MCP de GitHub disponible, usalo para inspeccionar repos y descargar skills.
171
+ 2. Si no hay MCP, ejecutá el script `scripts/sync.rb`.
172
+ 3. Reportá qué skills se actualizaron, cuáles son nuevas y cuáles no tienen skill.