chronos-ruby 0.9.0.pre.2 → 0.9.0.pre.3

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: ba6053cbe8155fba7fa99c0adf09db9e0aa38d33314b2355c49f1760233183fe
4
- data.tar.gz: 138ee6958622e5e03d24863c553066c6368459fe423731950bcfcc63bfb12e02
3
+ metadata.gz: a834300cdaf9acd0d75e625d6cc811c677bd8cf2f701aed885e0bbae417aaca0
4
+ data.tar.gz: 1b2e992ee0c9428e25bac17a8cbe21ae0bc167ebb519b63ae9c2e1cdb3ec3cc7
5
5
  SHA512:
6
- metadata.gz: 58b5255dacdb15e3df4147cceb563e247989fa8cc2e72c23e79166e51c772ffc9ba0e87120c025de5d20cff04be21a7625cafb39d9f47793f82d156bdcb5cf09
7
- data.tar.gz: 981f49d6f3d12314278456338e975797c27df3f7d93217eb2a8c9df630faa6081a683159b7694e0963cd7f9fa4ed6fae5f095b697a1ea9ce1c3159f388a5b36d
6
+ metadata.gz: 53be3a9634f8a47b9701897f4b6b58e1f0d023b536a2f6f4a7649f2d31344cb07f161e9f5d11c7636217194bdf31fe8181f5c6d1e916ef6049020f59b1ff2c4a
7
+ data.tar.gz: 40b56150fed7170583f514552cd34894c98e6b8011c09f8a188af29accc5dfe36ab72b78375875e88059324025b7d82f7ef4cbb13b184a034b0bff22e7a38ca5
data/CHANGELOG.md CHANGED
@@ -4,13 +4,20 @@ All notable changes are documented here. The project follows Semantic Versioning
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.0.pre.3] - 2026-07-21
8
+
9
+ ### Changed
10
+
11
+ - version advanced to `0.9.0.pre.3` because `0.9.0.pre.2` had already been published before these fixes were completed.
12
+
7
13
  ### Fixed
8
14
 
15
+ - exception notices now copy request and application values before freezing their immutable representation, preventing `can't modify frozen String` on repeated Rack/Rails failures;
9
16
  - `WorkerPool#flush` no longer returns before a worker marks a just-popped event as active;
10
- - release publishing now updates RubyGems to a Ruby 2.6-compatible version that supports `GEM_HOST_API_KEY`.
11
- - Updated the legacy development toolchain to non-vulnerable Rake and RuboCop versions.
12
- - legacy CI now resolves Bundler 1.17.3 through `Gem.bin_path` on RubyGems versions that do not support the `_version_` executable selector.
13
- - documentation verification now reads source and Markdown files explicitly as UTF-8 on legacy container locales.
17
+ - release publishing now uses RubyGems Trusted Publishing with short-lived GitHub OIDC credentials, avoiding interactive MFA and long-lived API secrets in CI;
18
+ - the legacy development toolchain uses non-vulnerable Rake and RuboCop versions;
19
+ - legacy CI resolves Bundler 1.17.3 through `Gem.bin_path` on RubyGems versions that do not support the `_version_` executable selector;
20
+ - documentation verification reads source and Markdown files explicitly as UTF-8 on legacy container locales.
14
21
 
15
22
  ## [0.9.0.pre.2] - 2026-07-21
16
23
 
@@ -30,7 +37,7 @@ All notable changes are documented here. The project follows Semantic Versioning
30
37
 
31
38
  ### Fixed
32
39
 
33
- - the Sidekiq 5 compatibility smoke now resolves the shared Sidekiq 4/5 fixture inside `examples/` instead of the nonexistent `/app/sidekiq-4` path.
40
+ - the Sidekiq 5 compatibility smoke resolves the shared Sidekiq 4/5 fixture inside `examples/` instead of the nonexistent `/app/sidekiq-4` path.
34
41
 
35
42
  ### Security
36
43
 
data/README.md CHANGED
@@ -33,7 +33,7 @@ See [Compatibility](docs/compatibility.md).
33
33
  The current public build is a pre-release. Add its exact version to the application's `Gemfile`:
34
34
 
35
35
  ```ruby
36
- gem "chronos-ruby", "0.9.0.pre.2"
36
+ gem "chronos-ruby", "0.9.0.pre.3"
37
37
  ```
38
38
 
39
39
  Install with a Bundler version compatible with the application. For the oldest supported runtime:
@@ -54,7 +54,7 @@ gem install chronos-ruby --pre
54
54
  Version 0.5 exposes Rails support explicitly, keeping Rails and ActiveSupport out of plain Ruby applications:
55
55
 
56
56
  ```ruby
57
- gem "chronos-ruby", "0.9.0.pre.2", :require => "chronos/rails"
57
+ gem "chronos-ruby", "0.9.0.pre.3", :require => "chronos/rails"
58
58
  ```
59
59
 
60
60
  Generate the initializer with:
@@ -201,7 +201,7 @@ Version `0.6.0.pre.1` adds optional Sidekiq 4/5 middleware:
201
201
 
202
202
  ```ruby
203
203
  gem "sidekiq", "~> 5.0"
204
- gem "chronos-ruby", "0.9.0.pre.2", :require => "chronos/sidekiq"
204
+ gem "chronos-ruby", "0.9.0.pre.3", :require => "chronos/sidekiq"
205
205
  ```
206
206
 
207
207
  The client middleware propagates only trace/request identifiers in a versioned Sidekiq-envelope field and never changes worker arguments. The server records class, queue, JID, retry count, duration, calculable queue latency, bounded arguments/tags, status, and error class. Values pass through the shared sanitizer before delivery. Failed jobs are notified once and the original exception is re-raised. See [Sidekiq 4/5 legacy integration](docs/modules/sidekiq-legacy.md).
data/SECURITY.md CHANGED
@@ -8,4 +8,4 @@ The Chronos 0.x line provides technical compatibility with end-of-life Ruby vers
8
8
 
9
9
  Security fixes in the agent will be assessed for backporting to maintained Chronos version lines. No response-time commitment is made before a formal security process is published.
10
10
 
11
- The current prerelease review and residual risks are recorded in [docs/security-review.md](docs/security-review.md). Release publishing uses a protected GitHub environment and a scoped RubyGems key. Package signing is deferred until the project has a trusted certificate issuance, rotation, revocation, and offline-key process; do not add a private signing key to the repository or workflow secrets without that process.
11
+ The current prerelease review and residual risks are recorded in [docs/security-review.md](docs/security-review.md). Release publishing uses a protected GitHub environment and RubyGems Trusted Publishing with short-lived OIDC credentials; no long-lived RubyGems API key is stored in GitHub. Package signing is deferred until the project has a trusted certificate issuance, rotation, revocation, and offline-key process; do not add a private signing key to the repository or workflow secrets without that process.
@@ -4,7 +4,7 @@ Version `0.6.0.pre.1` starts the legacy jobs line with optional Sidekiq 4 and 5
4
4
 
5
5
  ```ruby
6
6
  gem "sidekiq", "~> 5.0"
7
- gem "chronos-ruby", "0.9.0.pre.2", :require => "chronos/sidekiq"
7
+ gem "chronos-ruby", "0.9.0.pre.3", :require => "chronos/sidekiq"
8
8
  ```
9
9
 
10
10
  `chronos/sidekiq` installs middleware through the public `configure_client` and `configure_server` APIs. It does nothing when Sidekiq is unavailable, and the core gem never requires Sidekiq. Installation adds no Chronos thread or Redis/database connection per job; delivery continues through the agent's existing fixed worker pool.
data/docs/performance.md CHANGED
@@ -29,7 +29,7 @@ Current controls:
29
29
 
30
30
  Run the scripts under `benchmarks/` and record Ruby version, operating system, CPU, warmup, iteration count, median, and dispersion before publishing results. `benchmarks/filtering.rb` measures privacy filtering, `benchmarks/retry_backlog.rb` measures fixed-memory outage behavior, `benchmarks/request_overhead.rb` compares Rack-protocol calls, and `benchmarks/rails_notifications.rb` isolates subscriber normalization overhead.
31
31
 
32
- ## Version 0.9.0.pre.2 release gates
32
+ ## Version 0.9.0.pre.3 release gates
33
33
 
34
34
  `benchmarks/comparative.rb` compares the same successful Rack fixture without and with Chronos instrumentation. It performs configurable warmup, at least three samples, and reports median plus median absolute deviation. `benchmarks/fake_endpoint_load.rb` sends asynchronous exception events to a local TCP endpoint, verifies the v1 schema marker, ensures the secret key is absent from every payload, and fails on loss, rejection, invalid payload, or timeout.
35
35
 
data/docs/protocol-v1.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Protocol v1 stability
2
2
 
3
- The schemas under `contracts/` are the source of truth for protocol v1. Version `0.9.0.pre.2` keeps `schema_version: "1.0"` and treats every required field, enum value, privacy exclusion, and maximum as a compatibility contract.
3
+ The schemas under `contracts/` are the source of truth for protocol v1. Version `0.9.0.pre.3` keeps `schema_version: "1.0"` and treats every required field, enum value, privacy exclusion, and maximum as a compatibility contract.
4
4
 
5
5
  Compatible changes may add optional bounded fields or new event types accepted by the server. Removing or renaming a field, changing its type/meaning, weakening a bound, or making an optional field required needs a new protocol major schema. Authentication remains outside the JSON payload. Contract tests and `script/verify_docs` must pass before a release.
@@ -1,6 +1,6 @@
1
1
  # Version 1.0 readiness
2
2
 
3
- Version `0.9.0.pre.2` is a hardening release, not the stable release. The local suite, lint, documentation verifier, build, load test, and comparative benchmark are required evidence. The release can advance to `1.0.0` only after the GitHub Actions matrix is green for every declared legacy Ruby/framework/job combination.
3
+ Version `0.9.0.pre.3` is a hardening release, not the stable release. The local suite, lint, documentation verifier, build, load test, and comparative benchmark are required evidence. The release can advance to `1.0.0` only after the GitHub Actions matrix is green for every declared legacy Ruby/framework/job combination.
4
4
 
5
5
  | Gate | State in pre.2 |
6
6
  |---|---|
@@ -1,4 +1,4 @@
1
- # Security review for 0.9.0.pre.2
1
+ # Security review for 0.9.0.pre.3
2
2
 
3
3
  Review date: 2026-07-21. Scope: capture, serialization, transport, remote configuration, framework/job integrations, release workflow, examples, and fixtures.
4
4
 
@@ -23,7 +23,7 @@ module Chronos
23
23
 
24
24
  def initialize(attributes)
25
25
  ATTRIBUTES.each do |attribute|
26
- instance_variable_set("@#{attribute}", deep_freeze(attributes[attribute]))
26
+ instance_variable_set("@#{attribute}", immutable_copy(attributes[attribute]))
27
27
  end
28
28
  freeze
29
29
  end
@@ -36,17 +36,29 @@ module Chronos
36
36
 
37
37
  private
38
38
 
39
- def deep_freeze(value)
39
+ def immutable_copy(value)
40
40
  case value
41
41
  when Hash
42
- value.each do |key, child|
43
- deep_freeze(key)
44
- deep_freeze(child)
42
+ value.each_with_object({}) do |(key, child), copy|
43
+ copy[immutable_copy(key)] = immutable_copy(child)
45
44
  end
46
45
  when Array
47
- value.each { |child| deep_freeze(child) }
46
+ value.map { |child| immutable_copy(child) }
47
+ when String
48
+ value.dup
49
+ when NilClass, TrueClass, FalseClass, Symbol, Numeric
50
+ value
51
+ else
52
+ value.dup
53
+ end.freeze
54
+ rescue TypeError
55
+ value
56
+ rescue StandardError
57
+ begin
58
+ value.dup.freeze
59
+ rescue StandardError
60
+ value
48
61
  end
49
- value.freeze
50
62
  end
51
63
  end
52
64
  end
@@ -1,4 +1,4 @@
1
1
  module Chronos
2
2
  # Current version of the legacy Chronos Ruby agent.
3
- VERSION = "0.9.0.pre.2".freeze
3
+ VERSION = "0.9.0.pre.3".freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chronos-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.pre.2
4
+ version: 0.9.0.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antonio Jefferson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-21 00:00:00.000000000 Z
11
+ date: 2026-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler