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 +4 -4
- data/CHANGELOG.md +12 -5
- data/README.md +3 -3
- data/SECURITY.md +1 -1
- data/docs/modules/sidekiq-legacy.md +1 -1
- data/docs/performance.md +1 -1
- data/docs/protocol-v1.md +1 -1
- data/docs/release-1.0-readiness.md +1 -1
- data/docs/security-review.md +1 -1
- data/lib/chronos/core/notice.rb +19 -7
- data/lib/chronos/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a834300cdaf9acd0d75e625d6cc811c677bd8cf2f701aed885e0bbae417aaca0
|
|
4
|
+
data.tar.gz: 1b2e992ee0c9428e25bac17a8cbe21ae0bc167ebb519b63ae9c2e1cdb3ec3cc7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
11
|
-
-
|
|
12
|
-
- legacy CI
|
|
13
|
-
- documentation verification
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|---|---|
|
data/docs/security-review.md
CHANGED
data/lib/chronos/core/notice.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Chronos
|
|
|
23
23
|
|
|
24
24
|
def initialize(attributes)
|
|
25
25
|
ATTRIBUTES.each do |attribute|
|
|
26
|
-
instance_variable_set("@#{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
|
|
39
|
+
def immutable_copy(value)
|
|
40
40
|
case value
|
|
41
41
|
when Hash
|
|
42
|
-
value.
|
|
43
|
-
|
|
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.
|
|
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
|
data/lib/chronos/version.rb
CHANGED
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.
|
|
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-
|
|
11
|
+
date: 2026-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|