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 +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +3 -2
- data/lib/deployangel/core/fingerprint.rb +7 -3
- data/lib/deployangel/mcp.rb +1 -1
- data/lib/deployangel/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 618c24521dbd9aa6102fdd7c3a6c105494abcde74072fa37d8bd2e27f2737f49
|
|
4
|
+
data.tar.gz: 55e402796d95fe4aee557b342fcb0814933b9f39c965bba504b160fdaf557c0d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
-
|
|
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)
|
|
52
|
-
|
|
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;
|
data/lib/deployangel/mcp.rb
CHANGED
|
@@ -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
|
|
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" },
|
data/lib/deployangel/version.rb
CHANGED