deployangel 0.1.40 → 0.1.42
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 +15 -0
- data/README.md +4 -3
- data/lib/deployangel/cli/formatter.rb +5 -1
- data/lib/deployangel/configuration.rb +4 -1
- data/lib/deployangel/mcp.rb +2 -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: 33fd1151c7e090754dcfa51ced575d52281964abe14f285b46744c2d7c7f8b5c
|
|
4
|
+
data.tar.gz: 1e54552a26d6935c70c8abc92860128af5eaacb7545fc6f555d47508e2f81d7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0465d87b3ebd9e3a67c7260fe71179c9d44baa01ec7772a77cfa8802f32a99991cf0267d98a65701f1b98fb0e6067b691bb7c5644bcdf148680d1d4d7ae69ddc
|
|
7
|
+
data.tar.gz: 3c3231b3af88dc4831479309d8631a29b721d8c9527ce0cb6247974db7d6c4e35ded6e3b9cd0ca38228ce08b8c528f04f91349e2fb43b7cc581daab7403c8d63
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.42 (2026-11-05)
|
|
4
|
+
|
|
5
|
+
- `deployangel verify` marks a late regression that someone dismissed as a
|
|
6
|
+
false alarm, with who and why (servers from 2026-11-05), and the MCP
|
|
7
|
+
server's `list_late_regressions` says that one with `dismissed` set needs
|
|
8
|
+
no action. Only a person can dismiss one, on the release page.
|
|
9
|
+
|
|
10
|
+
## 0.1.41 (2026-11-04)
|
|
11
|
+
|
|
12
|
+
- The agent keeps an hour of unsent minutes (60 payloads, up from 10) when
|
|
13
|
+
DeployAngel can't be reached, so an outage of up to an hour loses no
|
|
14
|
+
telemetry. A minute that is lost leaves a gap DeployAngel has to learn
|
|
15
|
+
the app's normal traffic around. Kept gzipped, a full hour adds under
|
|
16
|
+
1 MB at worst (`rake bench`). `config.max_queued_payloads` still sets it.
|
|
17
|
+
|
|
3
18
|
## 0.1.40 (2026-11-04)
|
|
4
19
|
|
|
5
20
|
- Rails apps get two checkpoints with nothing to add: `rails.mail.delivered`,
|
data/README.md
CHANGED
|
@@ -185,8 +185,9 @@ user data.
|
|
|
185
185
|
in-memory counters.
|
|
186
186
|
- Payloads are sent from a background thread, once a minute, with short
|
|
187
187
|
timeouts.
|
|
188
|
-
- When DeployAngel is unreachable, the buffer is bounded (
|
|
189
|
-
gzipped JSON) and the oldest are dropped. Your
|
|
188
|
+
- When DeployAngel is unreachable, the buffer is bounded (60 payloads, an hour,
|
|
189
|
+
kept as gzipped JSON: under 1 MB at worst) and the oldest are dropped. Your
|
|
190
|
+
app is never blocked or failed.
|
|
190
191
|
- Safe across forks (Puma cluster mode and similar), and the minute in progress
|
|
191
192
|
is flushed at shutdown.
|
|
192
193
|
|
|
@@ -195,7 +196,7 @@ adds, memory with every list at its cap, and the one-time file digest pass
|
|
|
195
196
|
(`APP_ROOT=path/to/app` to digest your own app). On an Apple M-series laptop
|
|
196
197
|
with Ruby 3.4, recording a request adds about 1.6 µs and 6 objects, and with
|
|
197
198
|
every route, job, checkpoint, and exception list at its cap the agent holds
|
|
198
|
-
about
|
|
199
|
+
about 4 MB, including an hour (60) of unsent minutes.
|
|
199
200
|
|
|
200
201
|
## Configuration
|
|
201
202
|
|
|
@@ -128,7 +128,11 @@ module DeployAngel
|
|
|
128
128
|
end ],
|
|
129
129
|
[ "Changed but not yet exercised", changed.map { |item| item["key"] } ],
|
|
130
130
|
[ "To clear sooner, exercise (deployangel plan for details)", exercisable_items(document).first(5) ],
|
|
131
|
-
|
|
131
|
+
# Servers from 2026-11-05 say when a person dismissed one as a false alarm.
|
|
132
|
+
[ "Late regressions", Array(document["late_regressions"]).map do |late|
|
|
133
|
+
dismissed = late["dismissed"]
|
|
134
|
+
dismissed ? "#{late["summary"]} (dismissed as a false alarm by #{dismissed["by"]}: #{dismissed["note"]})" : late["summary"]
|
|
135
|
+
end ],
|
|
132
136
|
# A failed release's rollback target and where to look first
|
|
133
137
|
# (servers from 2026-11-01 send them).
|
|
134
138
|
[ "Next steps", Array(document["next_steps"]).map { |step| step["text"] } ]
|
|
@@ -24,7 +24,10 @@ module DeployAngel
|
|
|
24
24
|
@flush_interval = 60
|
|
25
25
|
@open_timeout = 2
|
|
26
26
|
@read_timeout = 5
|
|
27
|
-
|
|
27
|
+
# An hour of minutes, gzipped (about 1 MB at worst), so an hour when
|
|
28
|
+
# DeployAngel can't be reached loses nothing. A lost minute leaves a
|
|
29
|
+
# gap the cloud learns the app's normal traffic around.
|
|
30
|
+
@max_queued_payloads = 60
|
|
28
31
|
@max_routes = 100
|
|
29
32
|
@logger = Logger.new($stderr, level: Logger::WARN, progname: "deployangel")
|
|
30
33
|
@file_digests = parse_boolean(env["DEPLOYANGEL_FILE_DIGESTS"]) != false
|
data/lib/deployangel/mcp.rb
CHANGED
|
@@ -124,7 +124,8 @@ module DeployAngel
|
|
|
124
124
|
{ "limit" => { "type" => "integer", "minimum" => 1, "maximum" => 50, "default" => 10 } }),
|
|
125
125
|
tool("get_exception", "Sanitized details and a representative stack trace (application frames, or library frames when there are none) for an exception fingerprint.",
|
|
126
126
|
{ "fingerprint" => { "type" => "string" } }, required: %w[fingerprint]),
|
|
127
|
-
tool("list_late_regressions", "Failures found after a release was cleared, on paths the clearance did not cover."
|
|
127
|
+
tool("list_late_regressions", "Failures found after a release was cleared, on paths the clearance did not cover. " \
|
|
128
|
+
"One with dismissed set was dismissed by a person as a false alarm, with their reason: it needs no action.",
|
|
128
129
|
{ "since" => { "type" => "string", "description" => "ISO 8601 time" },
|
|
129
130
|
"limit" => { "type" => "integer", "minimum" => 1, "maximum" => 50, "default" => 10 } })
|
|
130
131
|
]
|
data/lib/deployangel/version.rb
CHANGED