deployangel 0.1.36 → 0.1.37

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: eb03031f58bd01feb61e1f478f4108eb3c969527e28cf86d970355a6bede0031
4
- data.tar.gz: 3dd9679d37e80b23e449ee99ffd29bd3db9700bf8e2b5bfa665bf4413e2e4fb7
3
+ metadata.gz: 618c24521dbd9aa6102fdd7c3a6c105494abcde74072fa37d8bd2e27f2737f49
4
+ data.tar.gz: 55e402796d95fe4aee557b342fcb0814933b9f39c965bba504b160fdaf557c0d
5
5
  SHA512:
6
- metadata.gz: bbaff8f03fce84081cdf13786dac7d26912ffeb9eae1c3f032f91d3b00afd23ba95a076c6213846cd44390017e8b7f8cdfd7b63833a07fcef9f782b4e9576dc0
7
- data.tar.gz: 2919b83e169d1ac91175c733d9366df8e05b4910f8722a99cb3fdae57a07dda205be55dce418f2c0c7e1d8e382dc17a9007e23c96126b0174d24ed24588c13be
6
+ metadata.gz: 4df4ece416d4c1d16729bbaaff61c0e196d3635796f1a743b754b189d91109891c38232bd484e1240fa55a28db6c85898a3b550fd3bd781337de4f05d18ecfc3
7
+ data.tar.gz: 4a523fc4d15f677b80671a3a09490e267ad1c322fcd0b45d7f2c37dd68ea54586c36efd6204e22f2d20cea15185a2d2072c53bf5f0857fa5011442198ad61431
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.37 (2026-11-03)
4
+
5
+ - An exception raised entirely in gems, with no frame from the app's
6
+ code, now sends its first library frames as its stack trace
7
+ (`net-smtp/lib/net/smtp.rb#start`), normalized like the top frame, with
8
+ no absolute paths or versions. Before, it sent none, so an error such as
9
+ a mailer job's `Net::ReadTimeout` showed no trace.
10
+
3
11
  ## 0.1.36 (2026-11-01)
4
12
 
5
13
  - `deployangel exercise --param id=42` fills path parameters (`:id`,
data/README.md CHANGED
@@ -149,7 +149,8 @@ the dashboard says so.
149
149
  - Release identity, runtime versions, and a per-process instance ID.
150
150
 
151
151
  - Exceptions: a stable fingerprint, the exception class, the first line of the
152
- message, and application frames only. In the message, numbers, IDs, emails,
152
+ message, and application frames only, or the first library frames (gem
153
+ paths without versions) when none is the app's. In the message, numbers, IDs, emails,
153
154
  UUIDs, long hex strings, and quoted values are replaced with placeholders, and
154
155
  so are the request's host and, with ros-apartment, the tenants the request or
155
156
  job switched to. Other words are kept: `Payment failed for Jane Doe` is sent
@@ -238,7 +239,7 @@ end
238
239
  ### Exception messages
239
240
 
240
241
  To send exceptions without any message, only their class, fingerprint, and
241
- application frames:
242
+ stack frames:
242
243
 
243
244
  ```ruby
244
245
  DeployAngel.configure do |config|
@@ -46,10 +46,14 @@ module DeployAngel
46
46
  "#{normalize_path(path, root)}##{label}"
47
47
  end
48
48
 
49
- # Application frames only, relative to the root.
49
+ # Application frames only, relative to the root. An exception raised
50
+ # entirely in gems (a mailer job's SMTP timeout) has none, so it gets its
51
+ # first frames instead, normalized as in top_frame: they're the only way
52
+ # to tell which gem's path failed.
50
53
  def backtrace(exception, root:)
51
- locations(exception).select { |path, _| app_path?(path, root) }.first(MAX_BACKTRACE)
52
- .map { |path, label| "#{normalize_path(path, root)}##{label}" }
54
+ frames = locations(exception)
55
+ app = frames.select { |path, _| app_path?(path, root) }
56
+ (app.empty? ? frames : app).first(MAX_BACKTRACE).map { |path, label| "#{normalize_path(path, root)}##{label}" }
53
57
  end
54
58
 
55
59
  # Only quoted values, numbers, emails, UUIDs, and long hex are replaced;
@@ -117,7 +117,7 @@ module DeployAngel
117
117
  TARGET_PROPERTIES),
118
118
  tool("list_deployments", "Recent deployments with their verification state and verdict.",
119
119
  { "limit" => { "type" => "integer", "minimum" => 1, "maximum" => 50, "default" => 10 } }),
120
- tool("get_exception", "Sanitized details and the application stack trace for an exception fingerprint.",
120
+ tool("get_exception", "Sanitized details and a representative stack trace (application frames, or library frames when there are none) for an exception fingerprint.",
121
121
  { "fingerprint" => { "type" => "string" } }, required: %w[fingerprint]),
122
122
  tool("list_late_regressions", "Failures found after a release was cleared, on paths the clearance did not cover.",
123
123
  { "since" => { "type" => "string", "description" => "ISO 8601 time" },
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeployAngel
4
- VERSION = "0.1.36"
4
+ VERSION = "0.1.37"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deployangel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.36
4
+ version: 0.1.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Owens