exis_ray 0.5.10 → 0.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/CLAUDE.md +41 -12
- data/README.md +250 -232
- data/lib/exis_ray/configuration.rb +51 -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 +26 -4
- data/lib/exis_ray/log_subscriber.rb +161 -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 +29 -8
- data/lib/exis_ray/version.rb +1 -1
- data/lib/exis_ray.rb +3 -1
- data/skill/SKILL.md +443 -0
- data/skill/references/standard.md +155 -0
- data/skills.lock +36 -0
- data/skills.yml +49 -0
- data/spec/exis_ray/configuration_spec.rb +69 -0
- data/spec/exis_ray/json_formatter_spec.rb +72 -0
- data/spec/exis_ray/log_subscriber_spec.rb +326 -0
- data/spec/exis_ray/task_monitor_spec.rb +108 -0
- data/spec/spec_helper.rb +0 -1
- metadata +13 -10
- 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
- data/MANIFEST.md +0 -222
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2b8dea5e0b236f90177ce536cf1226b37b21c778ee6891dc0276756f9b972fc8
|
|
4
|
+
data.tar.gz: a8409a1e92f2494535f9e0512f1b47e8cc0bd841335e9b98d6b19ce20ebab08d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3ad2bcc7d459c05efefd0e30b0701be99cf82477e843f233b4f62c36e56c4ba183a53d6097e6f461dd253bf07a8776da093c59396cbe0fc16948a0b0db813cc1
|
|
7
|
+
data.tar.gz: 297abed5f6adf6a799dd1b6a329833bd1433e1c7383aa364081677025f64b63a05d5b23fc6ae96bb2db0fa6a72d0544622a2820580568429f6433702d8aed0a6
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
## [0.6.1] - 2026-04-05
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **`exception.type` / `exception.message` / `exception.stacktrace`** emitidos junto a los legacy `error_class` / `error_message` en `TaskMonitor` y `LogSubscriber`. Inicia la transición a la convención OTel — los legacy se removerán en v1.0. El stacktrace se toma de `payload[:exception_object]` y se limita a las primeras 20 líneas para respetar el formato one-line KV del estándar Wispro.
|
|
5
|
+
- **`http_route`** en `LogSubscriber` con resolución en capas: (1) `payload[:request].route_uri_pattern` para Rails 7.1+, (2) fallback iterando `Rails.application.routes.routes` y matcheando por `defaults[:controller]`, `defaults[:action]` y verb HTTP. Normaliza el controller name CamelCase (incluyendo namespaces `Api::V1::Users`) al formato snake_case que Rails usa en `route.defaults`.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **`TaskMonitor.format_stacktrace`**: maneja `e.backtrace == nil` de forma segura y está envuelto en rescue para que un logger roto nunca afecte el flujo principal.
|
|
9
|
+
- **`private_class_method` restaurado** en `TaskMonitor`: `pod_identifier`, `setup_tracer`, `execute_with_optional_tags`, `log_event` y el nuevo `format_stacktrace` vuelven a ser privados (regresión de 0.6.0).
|
|
10
|
+
- **`extract_exception_data`**: las keys ahora son symbols (`:error_class`, `:"exception.type"`, etc) para ser consistentes con el resto del payload. Antes mezclaba strings y symbols, lo que causaba inconsistencias al serializar.
|
|
11
|
+
- **`extract_http_route`**: la implementación anterior matcheaba contra `route.requirements[:controller]`, pero Rails guarda controller/action en `route.defaults`. El método antes siempre retornaba `nil` en producción, aunque sus tests pasaban por stubear un contrato inventado. Tests reescritos para stubear la API real (`route.defaults`, `route.path.spec`, `route.verb`).
|
|
12
|
+
|
|
13
|
+
## [0.5.11] - 2026-04-04
|
|
14
|
+
|
|
15
|
+
### Documentación
|
|
16
|
+
- **README reescrito con Diátaxis:** Quick Start paso a paso, sección "Cómo funciona" con diagrama de flujo de propagación, referencia completa del Tracer (atributos y métodos públicos), documentación de Current (helpers, predicados, auto-sync), API pública del Reporter (`report`, `exception`, `add_context`, `add_tags`, hooks), tabla de campos auto-inyectados con condiciones, ejemplo de LogSubscriber custom, filtrado de claves sensibles, y modo `:text` explicado.
|
|
17
|
+
- **YARD:** Agregada documentación en `HttpMiddleware` y `Sidekiq::ClientMiddleware`.
|
|
18
|
+
- **CLAUDE.md:** Agregada sección Knowledge Base con instrucciones de entorno, RuboCop, YARD, testing y releases.
|
|
19
|
+
|
|
20
|
+
### Mejoras internas
|
|
21
|
+
- **Skills migration:** Migración de skills de `.claude/skills/` a `.agents/skills/` con nuevo skill manager (`skills.yml` + `skills.lock`).
|
|
22
|
+
- **TaskMonitor:** Renombrado `get_pod_identifier` → `pod_identifier` (Naming/AccessorMethodName). Líneas largas partidas con `\` para cumplir Layout/LineLength.
|
|
23
|
+
- **Current:** Agregado `rubocop:disable Naming/MemoizedInstanceVariableName` inline en `@user_object`/`@isp_object` — el nombre es intencional porque `resets` y los setters lo referencian para invalidar cache.
|
|
24
|
+
- **JsonFormatter:** Removido `require "set"` innecesario y simplificado operador de unión de sets.
|
|
25
|
+
- **Configuration:** Normalización de comillas a double-quotes (rubocop-omakase).
|
|
26
|
+
- **Gemfile:** Reordenamiento alfabético de dependencias de desarrollo.
|
|
27
|
+
|
|
1
28
|
## [0.5.10] - 2026-04-01
|
|
2
29
|
|
|
3
30
|
### Fixed
|
data/CLAUDE.md
CHANGED
|
@@ -1,10 +1,46 @@
|
|
|
1
1
|
# ExisRay — Project Intelligence
|
|
2
2
|
|
|
3
|
-
## Qué es
|
|
3
|
+
## ¿Qué es ExisRay?
|
|
4
4
|
|
|
5
5
|
ExisRay es la capa de observabilidad y trazabilidad distribuida del ecosistema Wispro. Se integra con Rails para emitir logs estructurados en JSON, propagar trace context entre servicios (HTTP, Sidekiq, RabbitMQ), y mantener identidad de negocio (user_id, isp_id, correlation_id) en cada línea de log.
|
|
6
6
|
|
|
7
|
-
El estándar de logging que implementa está definido en `
|
|
7
|
+
El estándar de logging que implementa está definido en `skill/SKILL.md` (API, arquitectura, reglas generales) y `skill/references/standard.md` (Data First, mapeo OpenTelemetry, ciclo de vida). Son la fuente de verdad — cualquier duda sobre formato, campos, o semántica de niveles se resuelve ahí.
|
|
8
|
+
|
|
9
|
+
## Documentación
|
|
10
|
+
|
|
11
|
+
- **Para humanos**: `docs/` (5 archivos) + `README.md`. Ver README para índice.
|
|
12
|
+
- **Para agentes AI**: `skill/SKILL.md` + `skill/references/`. Es la skill empaquetada que otros proyectos consumen via `skill-manager sync`.
|
|
13
|
+
- **Nunca referenciar `skill/` desde `docs/` o `README.md`** — son audiencias distintas.
|
|
14
|
+
|
|
15
|
+
## Knowledge Base
|
|
16
|
+
- Las skills en `.agents/skills/` incluyen conocimiento de dependencias.
|
|
17
|
+
- Leer la skill de una dependencia ANTES de responder sobre ella.
|
|
18
|
+
- Rebuild: `ruby .agents/skills/skill-manager/scripts/sync.rb`
|
|
19
|
+
|
|
20
|
+
### Entorno
|
|
21
|
+
- Versión de Ruby: leer `.ruby-version`
|
|
22
|
+
- Versión de Rails y gemas: leer `Gemfile.lock`
|
|
23
|
+
- Gestor de Ruby: chruby (no usar rvm ni rbenv)
|
|
24
|
+
- Package manager: Bundler
|
|
25
|
+
|
|
26
|
+
### RuboCop
|
|
27
|
+
- Usamos rubocop-rails-omakase como base.
|
|
28
|
+
- Correr `bundle exec rubocop -a` antes de commitear.
|
|
29
|
+
- No deshabilitar cops sin justificación en el PR.
|
|
30
|
+
|
|
31
|
+
### YARD
|
|
32
|
+
- Documentación incremental: si tocás un método, documentalo con YARD.
|
|
33
|
+
- Consultar la skill `yard` para tags y tipos correctos.
|
|
34
|
+
- Verificar cobertura: `bundle exec yard stats --list-undoc`
|
|
35
|
+
|
|
36
|
+
### Testing
|
|
37
|
+
- Framework: RSpec
|
|
38
|
+
- Correr: `bundle exec rspec`
|
|
39
|
+
- Todo código nuevo debe tener tests.
|
|
40
|
+
|
|
41
|
+
### Releases o Nuevas versiones
|
|
42
|
+
- Usar `/gem-release` para publicar nuevas versiones.
|
|
43
|
+
- El GitHub Action publica a RubyGems automáticamente al pushear un tag `v*`.
|
|
8
44
|
|
|
9
45
|
---
|
|
10
46
|
|
|
@@ -65,7 +101,10 @@ ExisRay.configuration.json_logs? # => true/false
|
|
|
65
101
|
|:------|:----------|
|
|
66
102
|
| `time` | Siempre |
|
|
67
103
|
| `level` | Siempre |
|
|
104
|
+
| `severity_number` | Siempre (OTel: DEBUG=5, INFO=9, WARN=13, ERROR=17, FATAL=21) |
|
|
68
105
|
| `service` | Siempre |
|
|
106
|
+
| `service_version` | Siempre (de `config.version` o `config.x.version`) |
|
|
107
|
+
| `deployment_environment` | Siempre (de `Rails.env`) |
|
|
69
108
|
| `root_id` | Cuando hay trace context activo |
|
|
70
109
|
| `trace_id` | Cuando hay trace context activo |
|
|
71
110
|
| `source` | Cuando hay trace context activo |
|
|
@@ -146,13 +185,3 @@ end
|
|
|
146
185
|
```
|
|
147
186
|
|
|
148
187
|
---
|
|
149
|
-
|
|
150
|
-
## Testing en Consola
|
|
151
|
-
|
|
152
|
-
```ruby
|
|
153
|
-
# Inicializar trace context para probar desde rails console
|
|
154
|
-
ExisRay::Tracer.hydrate(
|
|
155
|
-
trace_id: "Root=1-#{Time.now.to_i.to_s(16)}-#{SecureRandom.hex(12)}",
|
|
156
|
-
source: 'system'
|
|
157
|
-
)
|
|
158
|
-
```
|