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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e8adef48eb597e4b49551c9935dd0308a465ab3ad302de263ed47035293e15a
4
- data.tar.gz: 98928fa20dfe57fc11b8f99b56ec2f9c33010c023de4a78f0fdffb59cdd29e65
3
+ metadata.gz: 33fd1151c7e090754dcfa51ced575d52281964abe14f285b46744c2d7c7f8b5c
4
+ data.tar.gz: 1e54552a26d6935c70c8abc92860128af5eaacb7545fc6f555d47508e2f81d7f
5
5
  SHA512:
6
- metadata.gz: 37dd0621d760a588e12ea465902aefe678f6e9c171a15721d7ded7071af03e2e80996a8239e1f7fae4e7ca2583d647b73d403a3ef501d0dc4906499fae735c9c
7
- data.tar.gz: d581a5108ccc9bdb4e2c13747ce556c4857a14275939aa0756d05e518da03933b76189aea11269d87fe78c6b9e7faa879c8bc0cd7f989175eeee7b1350e42ff3
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 (10 payloads, kept as
189
- gzipped JSON) and the oldest are dropped. Your app is never blocked or failed.
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 3 MB, including 10 unsent minutes.
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
- [ "Late regressions", Array(document["late_regressions"]).map { |late| late["summary"] } ],
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
- @max_queued_payloads = 10
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
@@ -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
  ]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeployAngel
4
- VERSION = "0.1.40"
4
+ VERSION = "0.1.42"
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.40
4
+ version: 0.1.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Owens