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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ad15b3b5656e54690df31596233aabafaf70a5061b9086d6a601a60370fca16
4
- data.tar.gz: 6d2d87410cb374c1f8c9ddee2b6caf730f959a6c87bc63004ef43e52a290d8c1
3
+ metadata.gz: 2b8dea5e0b236f90177ce536cf1226b37b21c778ee6891dc0276756f9b972fc8
4
+ data.tar.gz: a8409a1e92f2494535f9e0512f1b47e8cc0bd841335e9b98d6b19ce20ebab08d
5
5
  SHA512:
6
- metadata.gz: dd4d89629f65123d600cddf5dbca462b2bfcf50f9c4be9a40a87f9f4fc57949ff2ab5e6c5c65a0095040a99b63bca225a08c9a8d223b90231735049f6bb8f71a
7
- data.tar.gz: 173790ac008fe33aa7b2aca4823dbe7bb94a5428e9628181bcde0325ed3260cc95f75a706751ee56829cca5778d211a386ae1654c83d0af737f401f3ed537501
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 esta gema
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 `MANIFEST.md`. Ese documento es la fuente de verdad — cualquier duda sobre formato, campos, o semántica de niveles se resuelve ahí.
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
- ```